超越人工智能:AnyTool,一款基于GPT-4的智能代理,引领API调用新纪元

news2024/9/23 7:18:29

DeepVisionary 每日深度学习前沿科技推送&顶会论文分享,与你一起了解前沿深度学习信息!

引言:探索 AnyTool 的创新应用

在人类文明的发展历程中,我们不断探索和创新,利用各种工具增强我们的能力并提高生产效率。从简单的石器到复杂的机械,再到今天的人工智能技术,工具的演变一直在推动着社会的进步。特别是在大型语言模型(LLM)的最新进展中,我们看到了人工智能在工具使用上的巨大潜力。

AnyTool 是一个基于 GPT-4 的智能代理,它通过整合超过 16,000 个 API 来解决用户的查询问题。这一系统不仅包括一个层次化的 API 检索器,还整合了解决方案生成器和自我反思机制,形成一个闭环的解决方案系统。AnyTool 的创新之处在于它无需额外训练,直接利用 GPT-4 的功能调用特性,极大地提高了处理查询的效率和准确性。

在实际应用中,AnyTool 对比其他工具使用模型,如 ToolLLM 和专为工具使用定制的 GPT-4 变体,显示出了显著的优势。例如,在 ToolBench 测试中,AnyTool 的平均通过率比 ToolLLM 高出 35.4%。这一成绩的取得,得益于 AnyTool 在设计上的几个关键创新:即插即用的设计、层次化结构的 API 检索器、以及自我反思机制的有效整合。

通过这些创新,AnyTool 不仅提高了查询解决的效率,还通过自我反思机制,提升了处理复杂查询的能力。这种机制能够在初始解决方案不可行时重新激活 AnyTool,重新评估失败的原因和相关历史上下文,从而找到更合适的解决方案。这一过程在多个数据集上的实验中都证明了其有效性,AnyTool 在所有数据集中的表现均优于现有的基线模型。
在这里插入图片描述

论文标题:AnyTool: Self-Reflective, Hierarchical Agents for Large-Scale API Calls

机构:Tsinghua University, Microsoft Research Asia, University of Waterloo

论文链接:https://arxiv.org/pdf/2402.04253.pdf

项目地址:https://github.com/dyabel/AnyTool

AnyTool 的核心设计

1. 利用超过16,000个API的大规模API调用

AnyTool 设计的一个核心特点是能够接入超过16,000个API,这些API来源于Rapid API。这一庞大的API库为AnyTool提供了广泛的数据访问和功能执行能力,使其能够应对各种复杂的用户查询需求。通过这种设计,AnyTool能够在没有额外训练需求的情况下,直接利用GPT-4的功能调用特性,高效地处理和响应用户的各种请求。

2. 层次化的API检索器

AnyTool的API检索器采用了层次化的结构设计,这一结构包括三个层级,每个层级都包含一个或多个具有不同角色的代理(agents)。这种层次化的设计模仿了“分而治之”的策略,有效地将Rapid API建议的API分类整合到我们的层次结构中。这不仅显著减少了每个代理的搜索范围,还克服了与LLMs最大上下文长度相关的限制。

3. 自反思机制的整合

AnyTool的设计中还整合了自反思机制,该机制在初始解决方案不切实际时重新激活AnyTool。在接收到用户查询后,AnyTool提出一个解决方案,随后由GPT-4评估这一方案的可行性。如果方案被认为是不切实际的,AnyTool将重新激活,并考虑失败的原因及相关历史上下文。这种机制显著减少了对于简单查询的“过度搜索”,同时为复杂查询提供了更丰富的上下文和深入搜索,从而提高了查询解决过程的效率和有效性。
在这里插入图片描述

功能调用与问题解决

在功能调用方面,AnyTool利用GPT-4的功能调用特性,用户可以输入查询Q和一系列功能{Fi}M i=1,每个功能Fi都有可能解决Q的全部或部分,或者可能与Q无关。功能调用过程包括:用户输入查询Q和功能列表{Fi}M i=1,以及一个指定的“完成功能”F到GPT-4;GPT-4为用户生成一个功能调用请求,并清晰地指定输入参数;用户执行特定功能并将历史上下文和功能响应提供给GPT-4;这一系列步骤重复进行,直到GPT-4激活“完成功能”F,标志着查询Q的解决。

在问题解决方面,AnyTool的解决器(solver)使用生成的API候选池来解决用户的查询Q。解决器可以采用深度优先搜索决策树(DFSDT)或思维链(CoT)方法来实现。如果初始解决方案未能解决用户查询,自反思机制将按顺序重新激活API检索器和解决器。这种机制可以重复应用,直到满足终止条件。
在这里插入图片描述

自反思机制的详细分析

1. 自反思机制的定义与功能

自反思机制是AnyTool系统中的一个核心组成部分,它允许系统在初始解决方案不可行时重新激活,重新考虑失败的原因和相关的历史背景。这种机制显著减少了对简单查询的“过度搜索”,同时为复杂查询提供了更丰富的上下文和深入的搜索。通过自反思,AnyTool能够在多轮自反思迭代后显著提高解决方案的通过率,如图3所示,仅通过4-6轮自反思,通过率就能提高高达20%。

2. 自反思在API检索器中的应用

在API检索器中,自反思首先识别用户查询未解决的原因。如果解决器选择“放弃”,则使用解决器提供的理由;如果解决器提出了解决方案,但GPT-4评估认为它未能妥善解决查询,则使用GPT-4提供的理由。我们将识别的原因整合到所有这些历史背景中。由于API检索器的层次结构设计,我们系统地重新激活各种代理以提高效率,按照从工具代理到类别代理再到元代理的顺序进行。

3. 自反思在解决器中的应用

当解决器做出“放弃”决定时,它旨在识别与用户查询无关或不正确的API的功能名称。为了提高效率,我们首先从扩展的API候选池中移除这些API,并从解决器的历史背景中排除调用这些API的条目。然后,解决器使用新的引导提示、更新的API候选池和清理过的历史背景重新激活。剩余的过程与第4.2节中描述的相同。
在这里插入图片描述

实验设置与评估协议

1. 评估协议的修订

在先前的工作中,ToolLLM的评估协议开始于将用户查询分类为可解决或不可解决,使用一组参考API。然而,对于那些不可解决的查询,评估系统在计算通过率时将它们视为已解决,导致人为地高通过率。我们的研究深入这种评估方法的细节,并提出了一个更能反映实际应用场景的修订协议。如图4所示,我们绕过ToolLLM的第一阶段评估,直接使用GPT-4来确定代理提出的解决方案在解决查询方面的有效性。

2. 实验设置

我们在两个基准上进行实验:ToolBench和我们自己的基准,称为AnyToolBench。ToolBench包括六个子集,我们对ToolBench进行了手动审查,只保留可以使用特定API解决的查询。AnyToolBench包括400个实例。我们使用通过率(如方程2所定义)作为评估指标,评估一个由代理生成的解决方案是否能解决查询。

通过这些详细的机制和严格的评估协议,AnyTool在各种数据集上展示了其优越性,显著超过了如ToolLLM这样的强基线。

主要实验结果与分析

1. 实验设置与基准测试

在我们的实验中,AnyTool在两个基准测试上进行了评估:ToolBench和我们自己创建的AnyToolBench。ToolBench包含六个子集,分别是G1-Instruction、G1-Tool、G1-Category、G2-Instruction、G2-Category和G3-Instruction。我们对ToolBench进行了手动审查,排除了无法解决的查询。AnyToolBench包括400个实例,详细创建过程见附录A.8。

2. 主要结果

在ToolBench的过滤数据集上,AnyTool与ToolLLM及其变体以及多个为工具使用定制的GPT-4模型进行了比较。AnyTool在平均通过率方面显著优于ToolLLM和使用参考API的GPT-4,分别提高了32.6和19.3个百分点。这一结果证明了AnyTool在实际应用场景中的有效性和优越性。

讨论与未来研究方向

1. 讨论

AnyTool通过其独特的层次结构API检索器和自反思机制,显著提高了查询解决的效率和效果。这种设计允许AnyTool在不需要外部模块训练的情况下,直接利用GPT-4的功能调用特性,有效地处理和解决用户查询。此外,我们对评估协议的改进更符合实际应用场景,使得AnyTool在新的评估基准上表现出色。

2. 未来研究方向

尽管AnyTool在当前的实验中表现优异,但我们认为还有几个方向值得进一步探索:

  • 优化API的组织:改进API的结构和分类,以提高检索效率和准确性。
  • 开发专用的开源大型语言模型:为API使用定制开发高效的语言模型,这可能会进一步提升性能,并便于本地部署和实际应用。

此外,AnyTool的性能在极其复杂的场景中尚未得到验证,这是因为缺乏合适的数据集。未来的工作可以通过创建或利用更复杂的数据集来测试和提升AnyTool在这些场景下的表现。

总结

在本文中,我们介绍了AnyTool,这是一个先进的代理工具,能够利用超过16,000个API来有效处理现实用户查询。AnyTool的核心是一个分层的API检索器和一个解决器,此外,它还整合了一个独特的自反思机制,提高了对用户查询的响应能力。我们还修订了之前的评估协议,使其更好地反映现实应用场景。在ToolBench和我们自己的AnyToolBench上进行的严格实验显示,我们的方法优于现有模型。

尽管AnyTool显著提高了通过各种工具解决用户查询的有效性,但在极其复杂的场景中的表现尚未得到验证,这是因为缺乏适当的数据集。此外,由于AnyTool依赖于GPT-4的函数调用特性,GPT-4的能力也影响了它生成的解决方案的可行性。

未来的研究方向包括:1) 优化API的组织,以提高性能和效率;2) 开发一个专门用于API利用的高级开源大型语言模型,这可能有助于本地部署。

通过这些探索和改进,AnyTool不仅展示了在处理复杂查询中的潜力,也为未来的研究和应用开辟了新的道路。

关注DeepVisionary 了解更多深度学习前沿科技信息&顶会论文分享!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1678393.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python 全栈系列243 S2S flask_celery

说明 按现有的几个架构部件,构建数据流。 S Redis Stream。这个可以作为缓冲队列和简单任务队列,速度非常快,至少是万条/秒的速度。 Q RabbitMQ。这个作为任务队列,消息也主要是元数据。读速比较慢,但有一些特性&a…

百元以内的蓝牙耳机哪个牌子好?2024四大高品质品牌推荐!

通常对于预算有限的消费者来说,如何在百元以内找到一款品质卓越、性能出色的蓝牙耳机,确实是一个值得深思的问题,为了满足广大消费者的需求,我特别筛选了2024年四大高品质蓝牙耳机品牌,它们在价格亲民的同时&#xff0…

ACWing471. 棋盘-DFS剪枝

题目 思路 本思路参考博客AcWing 471. 棋盘 - AcWing 约束方程&#xff1a; 代码 #include <iostream> #include <cstring> #include <algorithm>using namespace std;const int N 110, INF 0x3f3f3f3f; int g[N][N], n, m, dist[N][N]; int dx[4] {-1…

CSRF 攻击实验:更改请求方式绕过验证

前言 CSRF&#xff08;Cross-Site Request Forgery&#xff09;&#xff0c;也称为XSRF&#xff0c;是一种安全漏洞&#xff0c;攻击者通过欺骗用户在受信任网站上执行非自愿的操作&#xff0c;以实现未经授权的请求。 CSRF攻击利用了网站对用户提交的请求缺乏充分验证和防范…

力扣【旋转函数】python

如果直接用暴力的话&#xff0c;只能过4个样例好像&#xff0c;超时 因此得用递推公式 F1F0前n-1个数-(n-1)*第n个数 F0sum(nums)-n*第n个数 nlen(nums) ans[]#定义一个存最大值值的列表 ss sum(nums) dm 0 for j in range(n):dm j * nums[j] ans.append(dm) print(dm) n…

基于EBAZ4205矿板的图像处理:05均值滤波算法

基于EBAZ4205矿板的图像处理&#xff1a;05均值滤波算法 项目全部文件已经上传&#xff0c;是免费的 先看效果 可以明显看到图像变糊了&#xff0c;这就是均值滤波的特点&#xff0c;将噪声均摊到每个点上的同时&#xff0c;也会让图像丢失细节。 算法讲解 均值滤波&#x…

【十大排序算法】----选择排序(详细图解分析+实现,小白一看就会)

目录 一&#xff1a;选择排序——原理 二&#xff1a;选择排序——分析 三&#xff1a;选择排序——实现 四&#xff1a;选择排序——优化 五&#xff1a;选择排序——效率 一&#xff1a;选择排序——原理 选择排序的原理&#xff1a;通过遍历数组&#xff0c;选出该数组…

6---Linux下版本控制器Git的知识点

一、Linux之父与Git的故事&#xff1a; Linux之父叫做“Linus Torvalds”&#xff0c;我们简称为雷纳斯。Linux是开源项目&#xff0c;所以在Linux的早期开发中&#xff0c;许多世界各地的能力各异的程序员都参与到Linux的项目开发中。那时&#xff0c;雷纳斯每天都会收到许许…

在浏览器执行js脚本的两种方式

fetch请求get 在浏览器执行http请求,可以使用fetch函数; fetch(“url”).then(response => response.text()) .then(data => console.log(JSON.parse(data)[‘status’])) .catch(error => console.error(error)) 直接返回json数据: fetch(“url”).then(response…

如何进行事务处理

1、问题背景 在数据库存储系统中&#xff0c;事务处理是一种保证多个数据库操作作为单个逻辑单元执行的技术。事务处理可以确保数据的一致性、完整性和隔离性。 在使用 Google Cloud Datastore 时&#xff0c;可以使用 datastore.transaction() 函数来进行事务处理。datastor…

ubuntu在conda环境中使用 pip install -r requirements.txt但是没有安装在虚拟环境中

whereis pip pip listubuntu在conda环境中使用pip install lpips0.1.3 但是安装在了这里 Requirement already satisfied: lpips0.1.3 in /home/uriky/anaconda3/lib/python3.11/site-packages (0.1.3) 就会出现黄色波浪&#xff0c;未在虚拟环境中安装包 解决办法1&#xff1…

在云服务器上运行StyleGAN3生成伪样本

首先是传入数据&#xff0c;这里我们不做赘述。 对于数据格式的裁剪&#xff0c;可以通过以下代码进行&#xff1a; from glob import glob from PIL import Image import os from tqdm import tqdm from tqdm.std import trangeimg_path glob(r"C:\Users\Administrato…

uniapp使用地图开发app, renderjs使用方法及注意事项

上次提到uniapp开发地图app时得一些问题&#xff0c;最后提到使用renderjs实现app中使用任何地图&#xff08;下面将以腾讯地图为例&#xff0c;uniapp中写app时推荐使用得是高德地图&#xff0c;无法使用腾讯地图&#xff08;renderjs方式除外&#xff09;&#xff09;。 1、…

独立静态ISP:互联网连接的新选择

在数字化时代&#xff0c;互联网连接的质量直接影响着我们的工作与生活。随着技术的发展&#xff0c;独立静态ISP&#xff08;Internet Service Provider&#xff0c;互联网服务提供商&#xff09;逐渐成为企业和个人用户关注的焦点。本文将从五个方面探讨独立静态ISP的优势、应…

Trieve实践:好用功的开源RAG

目录 RAG概述 RAG架构 Trieve Trieve介绍 Trieve使用 初始化 自行搭建RAG Trieve是什么&#xff0c;RAG是什么&#xff0c;本文来带你了解。其实在很多产品应用里面都会有RAG,比如ai客服&#xff0c;针对性的智能问答&#xff0c;都是基于RAG实现的 RAG概述 RAG 是一种…

【竞技宝】英超:曼城击败热刺,赢西汉姆联就夺冠

曼城在英超补赛中跟热刺相遇,这场比赛对于双方来说都必须赢。曼城要是拿不下热刺,联赛夺冠形势就不容乐观。热刺则是需要击败曼城,保留拿到下赛季欧冠的一线希望。所以,热刺和曼城开场就全力以赴。上半场热刺和曼城门将都做出精彩扑救,比分维持在0比0。下半场曼城金靴哈兰德发威…

基于springboot实现医药管理系统项目【项目源码+论文说明】

基于springboot实现医药管理系统演示 摘要 计算机网络发展到现在已经好几十年了&#xff0c;在理论上面已经有了很丰富的基础&#xff0c;并且在现实生活中也到处都在使用&#xff0c;可以说&#xff0c;经过几十年的发展&#xff0c;互联网技术已经把地域信息的隔阂给消除了&…

airmon-ng start wlan0

错误原因&#xff1a;有一些后台程序干扰&#xff0c;导致无法成功启动监听模式 解决&#xff0c;关闭提示的进程即可 kill -9 PID号

apache与nginx下安装zabbix

apache下安装zabbix #进入zabbix官网 https://www.zabbix.com/ #选择好要配置的服务#安装zabbix存储库 [rootzabbix-server ~]# rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm [rootzabbix-server ~]# yum clean all #清理…