关于 LLM Agent 框架中,如何调用外部工具,之前有介绍 ReAct、Plan-Act-Reflect 的设计方案。这次介绍一种和前面完全不同的设计:Toolformer,特点是让 LLM 自己有调用外部工具的能力。
1. 背景
1.1 LLM 调用外部工具的需求
大型语言模型(LLM)在推理和问答时存在几个固有问题:
- 知识时效性问题:训练数据是静态的,无法获取最新信息。
- 计算能力不足:无法精确执行数学计算、代码运行等。
- 专业知识缺失:某些领域知识无法完全覆盖。
解决方法之一是让 LLM 在推理过程中调用外部工具(API、搜索引擎、计算器、数据库等),以弥补这些不足。
1.2 ReAct 框架(2022)
- 论文:Yao et al., "ReAct: Synergizing Reasoning and Acting in Language Models", 2022。
核心思想:在模型生成过程中显式交替进行:
- Reasoning(推理):用思维链推导下一步行动。
- Acting(行动):调用外部工具或执行命令。
- 优点:可解释性强,能清晰看到推理链和工具调用过程。
缺点:
- 需要人工设计示例(prompt engineering)告诉模型如何调用工具。
- 没有自动化学习工具调用的能力,依赖人工示范。
- 迁移到新工具需要重新写提示和示例。
1.3 Toolformer 的提出(2023)
在 ReAct 之后,Meta AI 提出 Toolformer,目的是:
- 去掉大量人工示例的依赖。
- 让模型自动学会在合适时机调用工具。
- 支持多工具场景且可扩展。
论文信息:
- 标题:"Toolformer: Language Models Can Teach Themselves to Use Tools"
- 作者:Timo Schick, Jane Dwivedi-Yu, et al.(Meta AI)
- 时间:2023年2月(arXiv:2302.04761)
- 核心贡献:提出一种自监督(self-supervised)方法,利用模型自身生成训练数据来学习工具调用。
2. 对比 ReAct
2.1 对比
自动化程度不同
- ReAct:依赖人工 prompt 和少量人工示例,迁移成本高。
- Toolformer:模型自己生成调用数据并过滤,不需要人工标注。
训练 vs 推理阶段的能力
- ReAct 更像是推理时的框架,指导模型如何交替推理和调用工具。
- Toolformer 是训练方法,让模型在微调后本身就具备工具调用能力,即便没有复杂 prompt,也能自然调用。
可扩展性
- ReAct 增加新工具时,需要人写新的示例。
- Toolformer 只需要提供 API 接口,模型会自动生成调用数据。
调用时机学习
- ReAct:时机由人工示例隐含控制。
- Toolformer:时机由模型通过数据生成和过滤过程自动学到。
2.2 举例
ReAct:
Question: What is the population of France?
Thought: I should look up the latest population data.
Action: Search("population of France")
Observation: 67 million
Answer: The population of France is about 67 million.这里的“Search”调用方式是通过 prompt 教给模型的。
Toolformer:
训练后模型可以直接在生成过程中插入:
The population of France is [Search_API("population of France") -> "67 million"].它不需要显式思维链提示,因为在训练中已经学会了调用模式。
3. 应用场景
3.1. 适合场景
1. 定制化的专业业务领域
- 特点:领域工具固定、调用逻辑复杂(如法律法规库、医疗数据库、工业计算器)。
优势:
- 模型可内化工具调用能力,不依赖运行时复杂 prompt。
- 调用时机精准,减少无效调用。
- 部署后稳定,不需要频繁改动。
应用示例:
- 法律问答机器人:自动判断是否查询法规库。
- 医疗诊断助手:自动调用病历检索和药物数据库。
- 工业工程助手:调用结构力学计算工具。
2. 专业的小模型(如 6.7B 参数开源模型)
- 特点:算力和推理能力有限,但任务需要高精度。
优势:
- 弥补推理不足:通过调用外部计算/检索工具显著提升准确率(数学推理等任务可提升 30%+)。
- 低资源运行:适合在算力受限环境部署。
应用示例:
- 金融计算小助手。
- 数学解题系统。
- 专业术语翻译工具。
3. 离线或封闭网络环境
- 特点:不能使用 MCP / LangChain 等运行时框架,无法联网。
优势:
- 工具调用能力直接内置在模型中,推理时不依赖外部 Agent。
- 符合数据安全和合规要求。
应用示例:
- 内网部署的企业智能客服。
- 军工/航天嵌入式 AI 助手。
- 离线工业控制系统。
4. 调用时机复杂且需要精准决策
- 特点:调用工具的最佳时机难以用简单规则描述。
优势:
- Toolformer 在训练中学会隐性调用模式,减少无效调用和错误调用。
应用示例:
- 法律问题:只有涉及特定条款时才查询数据库。
- 医疗问答:只有信息不完整时才调用检索工具。
5. 对延迟敏感的任务
- 特点:不希望多轮交互或运行时决策延迟。
优势:
- 内化调用能力可一步生成调用指令并执行。
应用示例:
- 实时语音助手。
- 在线客服系统。
3.2. 不适合场景
1. 工具更新频繁
- 每次新增或修改工具,都需要重新生成训练数据并微调,成本高。
- 更适合:MCP / LangChain 动态加载新工具。
2. 工具调用简单且可通过 prompt 控制
- 如果调用逻辑简单(如直接查天气、翻译一句话),用运行时框架即可,无需微调。
3. 使用强闭源大模型
- GPT-4、Claude 等已经具备良好的工具调用能力,运行时框架更灵活。
- Toolformer 微调闭源模型不可行。
4. 预算或资源有限
- 微调需要计算资源和 API 调用成本,如果只是临时功能,不划算。
4. 工作流程
Toolformer 的训练流程可以分为 5 个关键步骤:
Step 1:准备基础模型
- 可以是开源模型(如 LLaMA、GPT-J、Mistral)。
- 模型本身不具备稳定的工具调用能力。
Step 2:自动生成工具调用示例
- 给模型一个工具 API 文档(包括调用格式和功能描述)。
- 让模型在普通文本中尝试插入工具调用(例如在遇到数学问题时插入调用计算器的指令)。
- 每个插入点生成一个调用,并执行 API,得到返回结果。
Step 3:结果过滤(自监督学习)
- 把 API 返回结果替换原文本的相关部分。
- 让模型对比“有工具调用”与“无工具调用”的回答质量。
- 只有那些显著提升回答质量的调用才保留到训练数据中。
- 这样避免模型学会滥用工具。
Step 4:微调模型
- 用保留的高质量调用示例微调模型。
- 训练目标:让模型在推理中自然嵌入工具调用指令,并在合适时机调用。
Step 5:推理阶段
部署后,模型在生成回答时会:
- 根据上下文判断是否需要调用工具。
- 生成符合 API 格式的调用指令。
- 执行工具调用,得到结果。
- 将结果整合到最终回答中。
5. 未来前景
5.1. 适合继续发展的场景
- 专业领域智能助手
法律、医疗、金融、工业工程等调用逻辑复杂且稳定的领域。 - 小模型能力放大
在算力受限或离线环境中,用小模型+工具调用获得接近大模型的效果。 - 离线/内网安全 AI
数据敏感场景(军工、金融、医疗)结合本地工具库,实现封闭环境智能化。 - 多工具协作任务
需要搜索、计算、数据清洗、可视化等多工具串联的复杂任务。
5.2. 成本降低
Toolformer 落地的最大技术门槛之一就是预训练 / 微调的成本,尤其是数据生成和过滤阶段的算力消耗。
但 2023 年后已经出现多种降本方案(LoRA 少样本训练、模拟工具返回值、运行时日志学习、增量适配器),如果这些方法成熟,Toolformer 在商业落地的门槛会显著降低,特别适合小模型和领域专用模型的部署。
- 少样本微调(LoRA/QLoRA)
用几十到几百条高质量调用示例即可适配新工具,减少全量数据生成和训练成本。 - 增量更新
工具更新时只训练相关模块(适配器),保留原有能力,避免重复微调。 - 运行时日志驱动训练
在推理阶段收集调用数据,后续用作增量微调,降低一次性算力投入。 - 模拟工具返回值
用规则或生成模型替代真实 API 调用,减少数据生成耗时和外部资源依赖。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。