阅读范围。 本文以 Schick 等人的 Toolformer 论文及其附录为主要依据。1 文中的实验数值均是论文在特定模型、工具、数据集、提示词和解码设置下报告的结果,不应外推为任意模型或生产系统的保证。
先给结论
Toolformer 的关键贡献不是发明了 API,也不是证明语言模型可以像人一样规划,而是给出了一个极其具体的训练信号:
若把某个工具调用及其返回结果提供给模型后,模型对原始文本后续 token 的预测损失显著降低,则该调用对模型有训练价值。
因此,工具调用的“有用性”不再完全由人工逐条标注,而由原始语料本身提供的自监督信号判定。模型先生成候选调用,工具返回外部信息,后文充当可验证目标;过滤通过的样本再用于微调同一个模型。最终得到的模型会把 API 调用写进其生成序列,并在运行时由外部执行器填入返回值。
这一定义同时解释了论文的能力和边界:它擅长学习单步、文本化、可从语料后文验证价值的工具调用;它并没有学会通用规划、长程搜索、工具链协作或安全地访问任意外部系统。
一、为什么仅靠扩大语言模型仍不够
大语言模型可以从提示词中完成许多任务,但有些短板不是只增加参数就能稳定解决:
- 精确算术更适合由确定性程序执行;
- 事实检索需要访问参数之外的知识库;
- 当前日期和近期事件需要外部时钟或最新数据;
- 低资源语言理解可以借助专门翻译系统。
直觉上的做法是让人手工写大量“此时该调用工具 A,参数应为 B”的示范。然而,这会带来三个问题。第一,标注成本高;第二,标注者认为有用的信息未必真的改善模型的续写;第三,针对某个基准任务写出的轨迹通常难以迁移到未知任务。
Toolformer 的设计目标是:只给每个工具少量格式和意图示例,其余候选调用由模型自行提出,并由可计算的损失差筛选。这里的“自监督”不应误解为完全没有人工信息。工具名、调用格式和少量 demonstrations 仍由人提供;自动化的是大规模候选生成与质量判定。
二、问题形式化:把工具调用当成文本的一部分
设因果语言模型为 $M$,普通文本语料为:
\[\mathcal{C}=\{\mathbf{x}_1,\ldots,\mathbf{x}_{|\mathcal{C}|}\},\qquad \mathbf{x}=(x_1,\ldots,x_n).\]论文要求每种工具的输入与输出都能表示为文本。一个调用写为 $c=(a_c,i_c)$,其中 $a_c$ 是 API 名称,$i_c$ 是输入参数。为便于说明,记:
\[e(c)=\langle\mathrm{API}\rangle\ a_c(i_c)\ \langle/\mathrm{API}\rangle\] \[e(c,r)=\langle\mathrm{API}\rangle\ a_c(i_c)\rightarrow r\ \langle/\mathrm{API}\rangle.\]实际实现没有扩展词表,而是用已有 token 序列 [、] 和 -> 近似这些边界符号。这样避免为 GPT-J 添加并重新训练新词元。1
例如,一段文本中可以出现:
平均每场进球数为 [Calculator(723 / 252) -> 2.87] 2.87。
模型的训练目标仍是下一个 token 预测。特殊之处在于,训练文本中多了“调用、参数、返回值”这段可读序列。模型不是直接获得某个隐藏工具向量,而是在语言建模上下文中学习一个可生成的调用协议。
三、核心流程:生成、执行、过滤、微调
整个方法可拆为四个可验证步骤。
1. 用少量示例生成候选调用
对每个 API,作者编写提示模板 $P(\mathbf{x})$。模板含有少量人工示例,告诉模型调用名称、括号格式和何种上下文可能需要该工具。将原文前缀 $x_{1:i-1}$ 接在模板后,模型为每个位置计算启动调用的概率:
\[p_i=p_M(\langle\mathrm{API}\rangle\mid P(\mathbf{x}),x_{1:i-1}).\]只保留 $p_i>\tau_s$ 的位置;若位置过多,最多保留概率最高的 $k$ 个。随后,模型从该位置采样至多 $m$ 个调用,并以结束符作为终止条件。没有生成合法结束符的样本被丢弃。
这一步并不保证调用正确。它只解决“到哪些位置、让模型提出哪些可能的查询”。候选的质量由下一步而非人类直觉决定。
2. 真实执行工具
每个候选调用都交给相应系统执行,得到单一文本返回值 $r_i$。执行器可以是检索器、另一个神经模型、日历服务或 Python 计算脚本。Toolformer 本身没有把工具计算进参数;它学习的是调用字符串和利用返回字符串的能力。
这一区分很重要。论文中“Toolformer 的表现”实际是一个由语言模型、调用格式、路由逻辑和外部工具共同构成的系统表现,不能简单归因于 6.7B 参数的 GPT-J 本体。
3. 用未来 token 的损失差过滤调用
这是论文最值得吃透的部分。对位于位置 $i$ 的候选调用,定义模型预测原始后缀 $x_i,\ldots,x_n$ 的带权交叉熵:
\[L_i(\mathbf{z})=-\sum_{j=i}^{n}w_{j-i}\log p_M(x_j\mid \mathbf{z},x_{1:j-1}).\]其中 $\mathbf{z}$ 是预先提供给模型的附加信息。作者使用随距离衰减的权重:
\[\widetilde{w}_t=\max(0,1-0.2t),\qquad w_t=\frac{\widetilde{w}_t}{\sum_s\widetilde{w}_s}.\]这使过滤器更关心调用后紧邻的文本是否更容易预测,而非遥远后文的偶然关联。
随后比较两种损失:
\[L_i^+=L_i(e(c_i,r_i)),\] \[L_i^-=\min\big(L_i(\epsilon),L_i(e(c_i,\epsilon))\big).\]保留条件是:
\[L_i^- - L_i^+\geq\tau_f.\]直觉上,只有完整的“调用加结果”确实比“什么都不给”与“只给调用参数、不给结果”都更利于预测后文时,该样本才通过。
取最小的 $L_i^-$ 是一个关键防泄漏设计。若只比较“有结果”与“无调用”,模型可能因为查询参数本身已经复述了答案而获益。例如调用参数中直接出现答案,这不是工具结果创造的价值。与“仅给调用、不给返回”比较,可以排除这种虚假的信息增益。
过滤时,作者将 API 序列作为前缀提供,而非立即插入原文中间。原因是未经微调的基础模型尚未见过这种插入式格式,直接在中间打断原文会使困惑度人为变差。完成过滤后,才将通过的调用插回其原始位置。1
4. 在增强语料上做普通语言模型微调
对通过过滤的调用,将原文变为:
\[\mathbf{x}^*=x_{1:i-1},e(c_i,r_i),x_{i:n}.\]多个通过调用可类似地插入。所有工具的样本合并为 $\mathcal{C}^*$ 后,模型以标准因果语言模型目标微调。
这一步没有单独的“工具分类器”或强化学习奖励模型。调用时机、工具选择、参数生成和返回值利用,都是同一个 next-token objective 中被共同学习的。由于原文内容仍保留,作者主张这种训练比只训练工具轨迹更不容易牺牲一般语言建模能力。
四、推理时到底发生什么
微调后的模型先按通常方式生成。它输出调用并生成 -> 后,运行时执行器暂停解码:
- 解析已生成的工具名与参数;
- 调用真实工具;
- 把返回值与闭合标记插入上下文;
- 从扩展后的上下文继续解码。
因此,模型并不在内部“知道”计算器结果,而是预测“这里应请求计算器”,然后利用上下文中被写回的结果继续生成。
论文的评测还使用了一个重要的启发式:不只在 API 起始标记是概率最高 token 时调用,而是在它进入前 $k=10$ 个候选 token 时就优先调用。每个输入还限制最多一次调用,以避免连续调用循环。这个设置提高了调用率与任务分数,但也意味着结果并非单纯来自普通贪心解码下的模型偏好。
五、五种工具与它们各自验证的能力
| 工具 | 实现 | 模型需要学会的要点 | 主要验证场景 |
|---|---|---|---|
| 问答 | Atlas 检索增强问答模型 | 把事实缺口改写为简短问题 | LAMA 事实补全 |
| Wikipedia 搜索 | BM25 检索 KILT Wikipedia dump | 写出检索词,再从片段提取答案 | 开放域问答 |
| 计算器 | 四则运算 Python 脚本 | 从语义题干构造算式 | 数学文字题 |
| 日历 | 返回当前日期 | 识别需要时间锚点的情况 | 日期推理 |
| 翻译 | NLLB,输出固定为英语 | 找到非英文片段并调用翻译 | 多语问答 |
问答工具使用 Atlas,训练数据构造时是 Atlas-large,推理时是 Atlas-xxl。12 搜索工具不是实时互联网,而是固定的 Wikipedia 索引。计算器也只支持加、减、乘、除,复杂数学推理仍要由语言模型把题意转成表达式。翻译工具采用 600M 参数的 NLLB,并用 fastText 自动识别源语言。3
这些实现细节决定了结论的解释方式。例如,Toolformer 在事实题上的提升很大,但其中一部分能力实际来自外部 Atlas;它在时间敏感问题上的“搜索”也不等于访问当日网页。
六、实验结果应该如何读
基础模型是 GPT-J 6.7B,语料为 CCNet 子集。45 对照包括原始 GPT-J、仅在同一 CCNet 子集继续训练的 GPT-J + CC、禁用 API 的 Toolformer,以及启用 API 的 Toolformer。以下是论文的代表性数值:
| 任务 | GPT-J | Toolformer 禁用调用 | Toolformer 启用调用 | 主要调用工具 |
|---|---|---|---|---|
| LAMA T-REx | 31.9 | 34.9 | 53.5 | 问答 |
| ASDiv | 7.5 | 14.8 | 40.4 | 计算器 |
| SVAMP | 5.2 | 6.3 | 29.4 | 计算器 |
| MAWPS | 9.9 | 15.0 | 44.0 | 计算器 |
| WebQuestions | 18.5 | 18.9 | 26.3 | Wikipedia 搜索 |
| Dateset | 3.9 | 5.9 | 27.3 | 日历 |
1. LAMA:事实查询的收益很明确
在 SQuAD、Google-RE、T-REx 三个 LAMA 子集上,Toolformer 的分数分别达到 33.8、11.5、53.5,高于 GPT-J 与仅继续预训练的对照。6 为避免直接把 Wikipedia 答案泄露给由 Wikipedia 构造的 LAMA,作者禁用了 Wikipedia 搜索;模型主要调用问答工具。
这说明模型能识别“此处缺少一个可外查事实”。它不能证明模型内部参数本身获得了同等知识,更准确地说是模型学会了把事实检索外包出去。
2. 数学题:工具改善计算,不自动解决语义建模
计算器启用后分数显著上涨,但仍远非满分。这符合任务结构:计算器负责求值,语言模型仍要理解题意、选择变量、构造正确表达式并解释答案。禁用 API 的 Toolformer 也优于 GPT-J,说明大量“算式到结果”的训练文本可能对模型自身的数学模式学习有帮助;真正的主增益仍来自可执行计算器。
3. 开放域问答:工具质量限制系统上限
在 WebQuestions、Natural Questions 和 TriviaQA 上,Toolformer 多数使用 Wikipedia 搜索并超过同尺寸 GPT-J,但仍落后于论文比较的 GPT-3 175B。作者指出搜索器常返回不佳匹配,且模型不能改写查询、翻页或使用多个结果。1
这正是单步调用和交互式 Agent 的分界线:一次检索失败后,Toolformer 没有“观察、反思、再检索”的训练轨迹。
4. 多语问答与时间任务:不要只看平均分
在 MLQA 上,翻译调用对各语言通常有帮助,但继续在 CCNet 上训练本身会使一些语言表现下降,Toolformer 并未稳定超过原始 GPT-J。7 印地语尤其异常,翻译工具调用率很低。
在 TempLAMA 上,Toolformer 的提升主要来自搜索和问答,日历仅调用约 0.2%。原因是“知道今天日期”不足以得到罕见实体的历史事实。在作者构造的 Dateset 上,日历调用才是主要原因。这是一个很好的反例:同样被称为时间任务,真正需要的工具并不相同。
七、论文的额外证据与正确边界
1. 语言建模能力没有额外恶化,但证据有限
在禁用调用时,GPT-J + CC 与 Toolformer 在 WikiText、未参与训练的 CCNet 子集上的困惑度同为 10.3、10.5。作者据此说明插入 API 调用没有在这两个测试集上造成额外困惑度损失。1
这不是“通用能力不受影响”的数学证明。它没有覆盖安全性、鲁棒性、长上下文、多语言全部分布,也没有评估启用 API 时的精确困惑度。后者需要对每个位置所有潜在调用进行边缘化,论文认为不可计算。
2. 模型规模存在明显门槛
作者还将方法用于 124M、355M、775M、1.6B GPT-2 与 GPT-J。工具收益大约从 775M 参数才明显出现,小模型往往无法可靠地产生、选择和利用调用。这不是普适“规模定律”,而是此任务、此工具格式、此训练方案下的实证观察。
3. 解码阈值改变了模型行为
在 T-REx 上,$k$ 从 0 增至 10,调用率从 0% 增至 98.1%,整体分数从 34.9 增至 53.5;在 WebQuestions 上,调用率从 0% 增至 100%,分数从 18.9 增至 26.3。1 但在 $k=1$ 时,模型较倾向于在自己原本做得较差的案例调用工具;增大 $k$ 后这种校准性降低。
所以“会不会调用”不仅是训练结果,也是推理策略选择。生产系统还应单独评估误调用、漏调用、延迟、花费和风险。
八、最容易误解的五件事
- 它不是完全无监督。 每种工具需要人工设计的 few-shot 提示与格式约定。
- 它不是端到端学会工具本身。 算法、检索和翻译能力主要由外部系统提供。
- 它不是现代多步 Agent。 论文明确不能把一个工具输出作为另一个工具输入,也不能交互式浏览搜索结果。
- 损失下降不等于人类语义上总是有用。 论文展示了检索结果不相关却恰好降低困惑度的噪声样本;作者认为少量噪声还能训练模型不盲从工具结果。
- 它不是成本最优路由器。 过滤目标只衡量预测收益,不衡量 API 的价格、延迟、权限或潜在伤害。
九、与 TALM、ReAct 和函数调用的关系
Toolformer 与 TALM 都使用“外部结果是否改善语言模型预测”的思想,但 TALM 主要面向下游任务微调;Toolformer 的目标是直接在一般语言建模语料中学习调用时机与格式。8
ReAct 则强调在推理过程里交替生成 Reasoning 和 Action,并根据 Observation 继续行动。9 Toolformer 的训练样本没有多轮观察轨迹,因此它自然不擅长 ReAct 式的迭代检索或纠错。
今天的函数调用接口通常还提供 JSON Schema、类型约束、权限分离、参数校验、超时、重试、审计与人工确认。Toolformer 只证明了文本化调用协议可以被语言模型学习;工程上安全可靠的工具系统仍需要这些外围机制。
十、如何把论文方法抽象成可复用的训练范式
可以把 Toolformer 看成一个通用的“候选增强信息过滤器”。对任意外部信息源,只要满足以下条件,就可能借用其框架:
- 输入和输出可序列化为模型上下文;
- 有少量示例让基础模型产生候选请求;
- 可以离线执行候选请求;
- 原始样本中存在足以判断外部结果是否有助于后续预测的目标;
- 训练与推理时的信息可用性不发生泄漏。
其中第 5 条最容易被忽略。离线过滤可以看到原文后文,这是用来给候选打分的;部署时模型看不到未来,只能依靠已学到的上下文模式决定调用。若训练调用的参数依赖未来文本,推理时就无法复现。论文在机器翻译数据上专门删除这类样本。1
若要把它用于真实业务,还应把目标改为多目标形式,例如:
\[\text{utility}=\text{prediction gain}-\lambda\cdot\text{cost}-\mu\cdot\text{risk}.\]这不是论文的原始公式,而是工程化时必须补上的决策维度。预测收益高的调用不一定值得执行,例如它可能昂贵、缓慢、读取敏感数据,或给出无法验证的结果。
十一、实现与复现实验时的检查清单
- 固定工具版本、检索索引快照和日期服务语义,否则结果无法比较;
- 单独记录候选数、合法调用率、执行成功率、过滤通过率及每类工具分布;
- 同时评估普通贪心解码与强制提高调用倾向的策略;
- 把“工具禁用”的模型作为必要对照,区分微调本身与工具返回值带来的收益;
- 对事实检索任务防止索引与测试集直接泄漏;
- 检查调用参数是否仅依赖推理时可见的前缀;
- 对 API 超时、空返回、非法参数、注入式工具输出和权限错误定义明确行为;
- 评估质量之外的调用率、时延、成本、失败率与安全风险。
论文的训练设置也值得作为规模感参考:每个 API 最多使用约 25,000 个样本,最大序列长度为 1,024,有效 batch size 为 128,在 8 张 A100 40GB GPU 上以 BF16 训练,最多 2,000 步。1 这不是一个轻量级“加个 prompt 就能复现”的方案,候选生成、批量工具执行和损失计算本身都很昂贵。
十二、最终心智模型
阅读 Toolformer 时,可以始终抓住下面这条因果链:
少量人工调用示例
↓
模型提出候选调用位置与参数
↓
真实工具返回文本结果
↓
结果是否降低原文后续 token 的预测损失?
↓
保留有效调用并插回训练文本
↓
普通语言模型微调学会单步工具使用
它把“工具调用标注”转化为“外部结果是否帮助预测已知后文”的问题。这一转换是论文的核心洞见,也是其局限的来源。对于单步、可文本化、可离线验证的工具,它提供了优雅的自举训练方案;对于多步规划、实时交互、高风险操作和成本约束,则需要在此之上引入更完整的 Agent 训练与运行时系统。
-
Timo Schick et al. “Toolformer: Language Models Can Teach Themselves to Use Tools”, 2023。本文算法、工具、实验与附录训练设置的主要来源。 ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9
-
Gautier Izacard et al. “Atlas: Few-shot Learning with Retrieval Augmented Language Models”, 2022。Toolformer 使用的问答系统基础。 ↩
-
Marta R. Costa-jussà et al. “No Language Left Behind: Scaling Human-Centered Machine Translation”, 2022。NLLB 翻译模型。 ↩
-
Ben Wang and Aran Komatsuzaki. “GPT-J-6B: A 6 Billion Parameter Autoregressive Language Model”, 2021。Toolformer 的基础模型。 ↩
-
Guillaume Wenzek et al. “CCNet: Extracting High Quality Monolingual Datasets from Web Crawl Data”, LREC 2020。论文使用的语言建模语料来源。 ↩
-
Fabio Petroni et al. “Language Models as Knowledge Bases?”, EMNLP-IJCNLP 2019。LAMA 事实知识评测。 ↩
-
Patrick S. H. Lewis et al. “MLQA: Evaluating Cross-lingual Extractive Question Answering”, ACL 2020。多语问答评测。 ↩
-
F. Parisi et al. “TALM: Tool Augmented Language Models”, 2022。与 Toolformer 最接近的工具增强语言模型工作之一。 ↩
-
Shunyu Yao et al. “ReAct: Synergizing Reasoning and Acting in Language Models”, ICLR 2023。交替推理、行动和观察的 Agent 范式。 ↩