跳到主要内容

A1.2 会用工具,是训练出来的

同一份说明书,两代模型​

把上一节那份 exchange_rate 的说明书原封不动拿给 2022 年的模型,它多半会把 JSON Schema 当成普通文本复述一遍,或者「调用」出一个格式稀碎的四不像。拿给 2026 年的模型,它一看就会:选对工具、填对参数、格式分毫不差。

中间差的不是说明书,是训练。「会用工具」不是 API 的功能开关,而是一种模型能力——和上篇讲过的所有能力一样,它是喂出来的。来源可以拆成三层。

三层能力来源​

第一层:预训练埋底子。 模型在预训练里读过海量代码和 API 文档(上篇 4.1 节讲过:代码数据练逻辑)——函数签名、参数表、JSON、调用示例,它全都「见过」。所以「按格式描述一次调用」对它来说不是外语,而是训练语料里出现过亿万次的母语方言。预训练给的是底子:认识说明书这种文体。

第二层:SFT 教格式。 光认识不够,还要教会「在对话里规矩地用」。做法与上篇 5.2 节完全同款:准备几万条「问题 + 正确调用轨迹」的示范数据(示范里多了 tool_use、tool_result 这些格式块),继续做「预测下一个词」训练。SFT 之后,模型看到工具清单就知道:该用这种格式递纸条、该等结果回来再说话。

第三层:RL 精修判断。 最难教的不是格式,是判断——这道题到底该不该用工具?该用哪个?强化学习登场:用可验证的任务练(调用对了 → 任务成功 → 有奖励),和上篇 5.5 节的 RLVR 一脉相承。2025 年以来的前沿是端到端的 agentic RL:不再只优化单次调用,而是把整条多步轨迹(查了什么、试了几次、最后办没办成)当成一个整体来奖励。

一句话版本:预训练让它「见过」,SFT 让它「会写」,RL 让它「会判断」。

「不用工具」也是一种能力​

有一种病叫过度调用:明明 3 + 5 心算就行,也要按一下计算器;用户说句「你好呀」,它先去搜索一番。每次多余的调用都是白花的延迟和 token。

上一节实验的第五题(寒暄题)就是为此设计的:模型的正确决策是「这只是寒暄——不缺任何信息,直接回应就好」。这种克制不是天生的——训练数据里要专门喂反例:大量「不需要工具、直接回答才是正确示范」的样本。会伸手重要,知道什么时候不伸手同样重要。

选型时的现实差距​

工具调用能力是各家模型拉开差距最明显的维度之一,也是智能体应用选型的关键指标。业界有专门的评测基准衡量它——BFCL(伯克利函数调用排行榜)测单次与多轮调用的准确率,τ-bench 测真实客服场景里的多步工具任务(2025-2026 年被广泛引用)。同一份工具清单,不同模型的任务成功率可以差出几十个百分点。

「训练出来的直觉」意味着什么?

意味着它会以出人意料的方式失灵:同一个问题换个措辞,它可能就不调用工具了;上下文里混进一段无关内容,它可能被带偏去调用完全不相干的工具。这不是 bug 修一下就好的事——直觉没有 if-else 可改。工程上的对策不是「相信模型」,而是 A7 章的评测兜底:用足够多的用例反复测量它的调用行为,把「直觉的可靠性」变成一个可监控的数字。

小结​

本节要点
  • 会用工具是训练出来的能力:预训练「见过」(代码与 API 文档)、SFT「会写」(格式示范)、RL「会判断」(可验证奖励)。
  • 「不用工具」也要专门训练——过度调用是真实的病,反例数据是药。
  • 训练出的直觉会以意外方式失灵:换措辞、被无关内容带偏——可靠性靠评测兜底,不靠信仰。
📝 动手自测0/3
1. 三层能力来源中,「教会模型在对话里按正确格式生成 tool_use 块」主要靠哪一层?
2. 训练工具调用的 SFT 数据里,为什么 tool_result(工具返回的内容)不参与损失计算?
3. 一个智能体连用户说「谢谢」都要先调用一次搜索工具。从训练视角看,最对症的药是什么?

延伸阅读​