在 ToolBench 上训练出来的模型具备极强的泛化能力,能够直接被应用到新的 API 上,无须额外训练。
下表列出了 ToolBench 与之前相关工作的对比情况。ToolBench 不仅在多工具混合使用场景独一无二,且在真实 API 数量上也一骑绝尘。
ToolBench与之前相关工作的对比情况
ToolBench 的构建包括三个阶段:API 收集,指令生成和解路径标注:
01 API收集
API 收集分为 API 爬取、筛选和响应压缩三个步骤。
API 爬取:作者从 RapidAPI Hub 上收集了大量真实多样的 API。RapidAPI 是一个行业领先的 API 提供商,开发者可以通过注册一个 RapidAPI 密钥来连接各种现有 API。所有 RapidAPI 中的 API 可以分为 49 个类别,例如体育、金融和天气等;每个类别下面有若干工具,每个工具由一个或多个 API 组成。
API 筛选:作者对在 RapidAPI 收集到的 10,853 个工具(53,190 个 API)基于能否正常运行和响应时间、质量等因素进行了筛选,最终保留了3,451 个高质量工具(16,464个API)。
API 响应压缩:某些 API 返回的内容可能包含冗余信息导致长度太长无法输入 LLM,因此作者对返回内容进行压缩以减少其长度并同时保留关键信息。基于每个API的固定返回格式,作者使用 ChatGPT 自动分析并删除其中不重要信息,大大减少了 API 返回内容的长度。
02 指令生成
RapidAPI层次架构和工具指令生成示意图
为了兼顾生成高质量的指令和保证指令能用 API 完成,作者采用自底向上的方法进行工具指令生成,即从收集的 API 入手,反向构造涵盖各种 API 的指令。具体而言,作者首先从整个 API 集合中采样各种各样的 API 组合,接着通过 prompt engineering 让 ChatGPT 构思可能调用这些 API 的指令。
其中 prompt 包括了每个 API 的详细文档,这样 ChatGPT 能够理解不同 API 的功能和 API 之间的依赖关系,从而生成符合要求的人类指令。具体的采样方式分为单工具指令(指令涉及单工具下的多个 API)和多工具指令(指令涉及同类或跨不同类的工具的多个 API)。
通过该方法,作者最终自动构造逾 20 万条合格的指令。
03 解路径标注
给定一条指令 ,作者调用 ChatGPT 来搜索(标注)一条有效的解路径(动作序列):{,...,} 。这是一个多步决策过程,由 ChatGPT 的多轮对话来完成。在每个时间步 t,模型根据先前的行为历史和 API 响应预测下一步动作 ,即:其中 表示真实的 API 响应。每个动作包括了调用的 API 名称,传递的参数和为什么这么做的「思维过程」。为了利用 ChatGPT 新增的函数调用(function call)功能,作者将每个 API 视为一个特殊函数,并将其 API 文档放入 ChatGPT 的函数字段来让模型理解如何调用 API。此外,作者也定义了「Give Up」和「Final Answer」两种函数标识行为序列的结束。DFSDT与传统模型推理方法的对比(左图),解路径标注流程示意图(右图)在实际应用中,作者发现传统的 CoT 或 ReACT 算法在决策过程中存在错误累加传播和搜索空间有限的问题,这导致即使是最先进的 GPT-4 在很多情况下也很难成功找到一条解路径,从而对数据标注形成了一定的障碍。为解决这个问题,作者采用构建决策树的方式扩展搜索空间增加找到有效路径的概率。同时,作者还提出了 DFSDT 算法,让模型评估不同的推理路径并沿着有希望的路径继续前进,或者放弃当前节点并扩展一个新的节点。