# 国产 AI 工具开源：ToolLLM框架集成 16000+实用API

*Published:* 2023-08-17
*Author:* 客服001

#### 温馨提醒

如果文章内容或图片资源失效，请留言反馈，我们会及时处理，谢谢

本文最后更新于2023年8月17日，已超过 180天没有更新



ToolLLM 框架包括如何获取高质量工具学习训练数据、模型训练代码和模型自动评测的全流程。作者构建了 ToolBench 数据集，该数据集囊括 16464 个真实世界 API。

ToolLLM 框架的推出，有助于促进开源语言模型更好地使用各种工具，增强其复杂场景下推理能力。该创新将有助于研究人员更深入地探索 LLMs 的能力边界，也为更广泛的应用场景敞开了大门。

> ToolLLM 论文链接：https://arxiv.org/pdf/2307.16789.pdf
> 
> ToolLLM 数据与代码链接：https://github.com/OpenBMB/ToolBench
> 
> ToolLLM 开源模型下载链接：https://huggingface.co/ToolBench
> 
> 工具学习学术交流社群：https://discord.gg/asjtEkAA

工具学习的目标是让 LLM 能给定用户指令与各种工具（API）高效交互，从而大大扩展 LLM 的能力边界，使其成为用户与广泛应用生态系统之间的高效桥梁。尽管已经有一些工作（例如 Gorrila、APIBank 等）探索了如何让 LLM 掌握 API 调用能力，这些工作仍然存在以下局限性：

有限的 API：很多研究没有使用真实世界的 API（如 RESTful API），存在 API 范围有限、多样性不足的问题

场景受限：先前工作大多集中在单一工具的使用，而实际场景中可能需要多个工具协同工作来完成复杂任务；此外，现有研究通常假设用户提供与指令相关的 API，但现实中可供选择的API可能非常多，用户难以从中高效选择

模型规划和推理能力不足：现有模型推理方法如 CoT、ReACT 过于简单，无法充分利用 LLM 的潜力来处理复杂指令，因而难以处理复杂任务

ToolLLM 研究框

为了激发开源 LLM 的工具使用能力，该研究提出了 ToolLLM，一个包括数据构建、模型训练和评估过程的通用工具学习框架。

作者首先收集高质量的工具学习指令微调数据集 ToolBench，随后对 LLaMA 进行微调得到 ToolLLaMA，最后通过 ToolEval 评估 ToolLLaMA 的工具使用能力。

ToolBench 数据集

ToolBench 的构建完全由最新的 ChatGPT（gpt-3.5-turbo-16k）自动化完成，无需人工标注。在 ToolBench 上训练出来的模型具备极强的泛化能力，能够直接被应用到新的 API 上，无须额外训练。

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\. 指令生成

为了兼顾生成高质量的指令和保证指令能用 API 完成，作者采用自底向上的方法进行工具指令生成，即从收集的 API 入手，反向构造涵盖各种 API 的指令。具体而言，作者首先从整个 API 集合中采样各种各样的 API 组合，接着通过 prompt engineering 让 ChatGPT 构思可能调用这些 API 的指令。

其中 prompt 包括了每个 API 的详细文档，这样 ChatGPT 能够理解不同 API 的功能和 API 之间的依赖关系，从而生成符合要求的人类指令。具体的采样方式分为单工具指令（指令涉及单工具下的多个 API）和多工具指令（指令涉及同类或跨不同类的工具的多个 API）。通过该方法，作者最终自动构造逾 20 万条合格的指令。

03\. 解路径标注

给定一条指令 ，作者调用 ChatGPT 来搜索（标注）一条有效的解路径（动作序列）：{,...,} 。这是一个多步决策过程，由 ChatGPT 的多轮对话来完成。在每个时间步 t，模型根据先前的行为历史和 API 响应预测下一步动作 ，即：

[![](https://www.xarjtc.com/wp-content/uploads/2023/08/640.png)](https://www.xarjtc.com/wp-content/uploads/2023/08/640.png)  
其中 表示真实的 API 响应。每个动作包括了调用的 API 名称，传递的参数和为什么这么做的 “思维过程”。为了利用 ChatGPT 新增的函数调用（function call）功能，作者将每个 API 视为一个特殊函数，并将其 API 文档放入 ChatGPT 的函数字段来让模型理解如何调用 API。

此外，作者也定义了 "Give Up" 和 "Final Answer" 两种函数标识行为序列的结束。

在实际应用中，作者发现传统的 CoT 或 ReACT 算法在决策过程中存在错误累加传播和搜索空间有限的问题，这导致即使是最先进的 GPT-4 在很多情况下也很难成功找到一条解路径，从而对数据标注形成了一定的障碍。

为解决这个问题，作者采用构建决策树的方式扩展搜索空间增加找到有效路径的概率。作者提出 DFSDT 算法，让模型评估不同的推理路径并沿着有希望的路径继续前进，或者放弃当前节点并扩展一个新的节点。

为验证 DFSDT 的效果，作者基于 ChatGPT 比较了 DFSDT 与 ReACT 的差异。此外，作者还引入了更强的 baseline （ReACT@N），它进行多次 ReACT 推理直到找到一条合理的解路径。

如上图所示，DFSDT 在所有场景下的通过率（pass rate）显著更高，超越了两种 baseline。此外，DFSDT 在更复杂场景下（I2，I3）的效果提升更大，这说明扩大搜索空间更加有助于解决复杂的工具调用任务。

总而言之，DFSDT 算法显著提升了模型推理能力，增加了解路径标注的成功率。最终，作者生成了 12000+ 条指令 - 解路径数据对用于训练模型。

在应用方面，ChatGPT Plugins 的出现补充了 ChatGPT 最后的短板，使其可以支持连网、解决数学计算，被称为 OpenAI 的 “App Store” 时刻。然而直到现在，它仅支持部分 OpenAI Plus 用户，大多数开发者仍然无法使用。

为此，面壁智能之前也推出了工具学习引擎 BMTools，一个基于语言模型的开源可扩展工具学习平台，它将是面壁智能在大模型体系布局中的又一重要模块。研发团队将各种各样的工具（例如文生图模型、搜索引擎、股票查询等）调用流程都统一到一个框架上，使整个工具调用流程标准化、自动化。

开发者可以通过 BMTools，使用给定的模型（ChatGPT、GPT-4）调用多种多样的工具接口，实现特定功能。此外，BMTools 工具包也已集成最近爆火的 Auto-GPT 与 BabyAGI。未来，团队还将围绕大模型工具学习有更多发布，敬请大家期待！

> BMTools 工具包 ：https://github.com/OpenBMB/BMTools
> 
> 工具学习综述链接 ：https://arxiv.org/abs/2304.08354
> 
> 工具学习论文列表 ：https://github.com/thunlp/ToolLearnirgPapers
> 
> 大模型使用搜索引擎实践 ：https://github.com/thunlp/WebCPM