英文名称: ToolLLM: Facilitating Large Language Models to Master 16000+ Real-world APIs
中文名称: TOOLLLM:帮助大语言模型掌握16000多个真实世界的API
文章: http://arxiv.org/abs/2307.16789
代码: https://github.com/OpenBMB/ToolBench
作者: Yujia Qin
日期: 2023-07-31
论文致力于让大模型学习使用工具,以实现复杂的任务。目前使用工具能力最强的还是 ChatGPT,但不清楚它是如何实现的。文中提出的 ToolLLM 主要用于构建针对 引导调优(instruction-tuning)的训练数据集 ToolBench ,最终通过数据对开源的LLaMA调优,训练的模型ToolLLaMA,对工具的使用能力与 ChatGPT 相当。
为了使路径搜索过程更加高效,提出了基于深度优先搜索的决策树(depth-first search-based decision tree:DFSDT);训练了 API 检索器来为每条指令推荐适当的 API。
最终发布了用于评价的工具 ToolEval,以及使用 ToolBench 调优的模型 ToolLLaMA,可支持复杂的引导和没见过的 API。优化了通过大模型与调用 API 的协作,生成最终答案的功能。
对于大模型和工具协作问题,之前工具有以下的局限性:
图-1 展示了整体架构设计,左侧为训练,右侧为推理(使用模型预测)。
在训练阶段,首先从 RapidAPI 收集 API,然后利用ChatGPT,一方面生成引导数据,用于训练神经网络的 API Retriever(API 检索器),另一方面实现路径标注,生成引导学习的数据 ToolBench,将数据代入 LLaMA 精调模型生成 ToolLLaMA。
在推理阶段,用户输入指令 Instruction,利用 API Retriever 检索可能调用的 API,然后将这些 API 输入ToolLLaMA模型,ToolLLaMA 执行多轮 API 调用以得出最终答案,最后再由 ToolEval 对结果进行评价。
通过评测,得到以下结论:
构造 ToolBench 分为以下三个阶段:
RapidAPI Hub 是一个 API 市场,提供数千个现实世界的 API,涵盖 49 个不同的类别 categories,如体育、金融和天气等;每个类别又含子类 collections,如中文API、人工智能API、数据库API;总共上万个API。对于每个API,收集其描述、所需参数、API调用的代码片段等。训练 LLM 理解API与文本描述的关系,以便泛化到未见过的API。
在实现过程中需要对 API 进行筛选,丢弃无法实现功能及返回延时过长的 API,最终保留了 3451 个高质量工具,共 16464 个 API。
另外,描述信息可能过长,包含一些冗余信息,这里使用 ChatGPT 对其进行精减,通过输入为工具的文档描述以及所需输出格式的示例,以此将文档压缩在 2048 tokens 之内。
生成高质量的指令需要关注两个关键点:支持工具多样性和多工具协同解决复杂任务。具体方法是从整个集合中采样 API,然后提示 ChatGPT 为这些 API 生成不同的指令。
具体方法是:
为所有 API 及其组合生成指令,将 API 的总集定义为 SAPI,每次从 SAPI 中采样一些 API:Ssub N = {API1, · · ·, APIN};通过提示让 ChatGPT 了解这些 API 的功能及其相互作用,然后生成涉及 Ssub N 中 API 的可能指令 (Inst*)
,以及每个指令的相关 API (Srel * ⊂ Ssub N ) (Inst*)
,即{[Srel 1 , Inst1],···,[Srel N′ , InstN′ ]}
,其中N′表示每次生成实例的数量。用这些指令和相关 API 对训练 API 检索器。
与 ChatGPT 对话时,提示由以下部分组成:
简言之,就是通过 API 描述和种子,生成可能的 API集合S/指令Inst 对。
API组合非常多,由常识可知,多数工具不会组合在一起使用,对于这种稀疏问题,通过 RapidAPI 中的层次过滤出更有效的组合,具体方法是:从同一类别/集合中选择 2-5 个工具,并从每个工具中采样最多 3 个 API 以生成指令。最后又去掉了一些幻觉产生的API,生成数据对:单个工具相关87413个、同类别工具84815个 ,同子类别工具25251个。
路径指的是工具和模型交互的过程,这里涉及多轮与 ChatGPT 的对话。给定指令 Inst*,提示 ChatGPT 搜索有效的操作序列:{a1, ···, aN}。在每个时间步 t,模型根据之前的交互生成一个动作 at,即 ChatGPT(at|{a1, r1, · · · , at−1, rt−1}, Inst*),其中 r* 表示真实的 API 响应。at 的格式如下:“想法:···,API 名称:···,参数:····”。
对于每条指令,将所有采样的 API Ssub N 作为可用函数提供给 ChatGPT,而不是仅将其相关的 API Srel* 提供给 ChatGPT。以访问更广泛的 API 并扩展操作空间。另外,还定义了两个附加函数,即“完成最终答案”和“完成放弃”。
DFSDT
传统的CoT 或 ReACT 对于决策有固有的局限性:(1)错误传播:一步错步步错;(2)有限的探索:CoT或ReACT只探索一种可能的方向,导致对整个动作空间的探索有限,如图所示。因此,即使是 GPT-4 也常常无法找到有效的解决方案路径。
本文提出:基于深度优先搜索的决策树 DFSDT,具体如:图-4所示。
当对于某一条路径搜索失败时,退回上一个节点的其它路径继续搜索。
具体方法使用深度优先搜索(DFS)而不是广度优先搜索(BFS),因为只要找到一条有效路径就可以完成注释,这样花费更少的 token 调用成本。最终,生成 12657 个指令-解决方案对,用于训练 ToolLLaMA。实验证明这个量集的实例已实现了满意的泛化的需要。
评测工具 TOOLEVAL 涉及两个评测标准。
API 检索器通过 Sentence-BERT 实现,模型将指令和 API 文档分别编码为两个嵌入,然后计算两个嵌入的相关性,以训练模型。
对比文中方法与 BM25,以及ChatGPT 提供的文本Embedding,文中方法明显更好(毕竟它是通过有监督数据训练过的模型),当然应用时效果也会更好。
对比 DFSDT 和 ReACT 的通过率,其中还加入了比较多次 ReACT@N 的操作。几个实验都证明 DFSDT 更好,尤其在相对复杂的场景中,DFSDT 对性能改进更明显。
使用指令-解决方案对 LLaMA 7B 模型进行调优,得到模型 ToolLLaMA。对比其它模型结果如下:
消融实验
这里对比文中几种方法各自对模型的影响: