打开任何一个生产环境智能体的 trace,看一看在用户提问和第一个真正有用的动作之间到底跑了哪些工具调用。你会看到一个 get_user_profile 返回了一个根本没人用的名字、一个 check_status 返回绿色然后再也没被引用、一个 list_recent_orders 的结果被总结成"ok"然后直接丢掉。这些调用没有一个改变了最终答案。但每一个都花了真金白银的钱、真实的延迟,以及在 trace 里真实占一行。你的智能体已经学会了表演勤奋 ——而表演勤奋如今是你最大的单一浪费来源。
这就是填充式工具调用 :智能体发出一个动作,不是因为它需要那个结果,而是因为"先想一想,再行动"的整体模式在训练时被反复奖励,多到模型现在会把"显得周全"当作回答任何问题的副作用来执行。这是一个 LLM 版本的初级分析师,故意打开五个根本不会读的标签页,好让坐在对面的高级同事看到自己很忙。区别只在于:初级分析师会累。智能体永远不会。
经济账比看起来更糟。2025 年阿里巴巴关于其 Metis 智能体的一项研究报告显示,基线系统中冗余工具调用占比高达 98%,经过针对性训练后降到 2%——更关键的是,准确率在同一时间还提升了。SMART 这类"工具滥用治理"方向的工作也证明,一个只有 7B 参数的小智能体,只要给它一个知识边界 信号,就能用五分之一的调用量追平 70B 的同类水平。换句话说:填充式调用不只是贵,它还在主动拉低 你的输出质量,因为上下文窗口里每多一个无关观测,都在稀释模型本该用来推理的那一点信号。
模型为什么会学着伪装周全
填充式调用是训练循环里长出来的,不是 prompt 里写出来的。如果微调或 RL 的奖励信号被"几乎都能从查询里获益的任务"所主导,那么策略梯度就会把模型推向更频繁 地调用工具,而不是更少——因为多一次没必要的调用,对 loss 函数而言是隐形的;少一次该有的调用,对 loss 函数而言却是致命的。这跟一个"防御性医生"非要多开一次扫描是同一种不对称:漏诊有名字写在病例上,过度检查没有。
具体来说,有三种训练压力合谋制造填充:
只看结果的奖励模型 。当奖励只盯着最终答案,模型就把中间步骤当作免费的,没有任何梯度把它拉向简洁。
从冗长的示范中模仿 。被当作监督数据的公开智能体 trace 里,"我先验证一下……"这种模式比比皆是。模型先学会了这套语言脚手架,再学会脚手架后面通常挂着一个工具调用。
工具描述偏差 。研究表明,仅仅是修改工具的描述文字,就能让选用频率发生不成比例的偏移。一个被描述成"X 的权威来源"的工具,只要问题里出现"X"这个字眼就会被调用,不管智能体其实早就知道答案。
你自己的 prompt 也在固化这种行为。那条经典的系统指令——"回答之前,先收集所有相关的上下文"——会被模型逐字执行。哪怕回答所需的全部上下文已经在用户那一句话里了,它还是会去"收集"。
填充式调用到底花了你多少钱
每一次填充式工具调用,背后都有四个计费表在跑。多数团队只插了第一个表。
第一个表是调用本身的 token 。工具定义会在每一轮里被粘进上下文,schema 经常一写就是几百个 token。当一个智能体接入了太多工具服务器,光是工具定义就能吃掉绝大部分 prompt 预算。第二个表是结果的 token ,这一项通常更糟:一个本来只需要 3 个字段的工具,返回了一个有 50 个字段的 JSON blob,于是模型在下一轮要花上数千个输入 token 来搞清楚哪些字段应该忽略。第三个表是延迟 。一次到模型的往返大概是 800 毫秒;多加一次工具调用就要再加上网络往返、后端处理、再加一轮模型推理来消化结果。三个填充式调用堆在答案的路径上,就是"感觉是实时的功能"与"感觉是一个慢 API"之间的差距。第四个表是准确率衰减 ,这一项往往是团队最后才发现的。含有大量无关观测的长上下文,会可测地 降低模型对相关信息的推理能力;最糟的情况是模型锚定在一个填充式观测上,给出一个错误答案——而那个问题在更短的上下文里本来是会答对的。
把这四个表加起来,你就明白为什么智能体的成本账永远对不上纸面计算。你的 token 账单涨了 3 倍,但用户能看到的工作只多了 1 倍——多出来的 2 倍都是表演。
反事实检验:去掉这次调用,答案会不一样吗?
关于一次工具调用,最有用的问题也是最难规模化回答的:**这次调用让答案变了吗?**如果去掉这次调用答案依然一样,那它就是填充;如果去掉它答案就会错,那它是承重的。
这是一个反事实问题,意味着你没法只看一条 trace 就算出来——你得对比路径 。几个在实战中跑得通的近似方法:
消融重放(Ablation replay) 。定期对一批采样的生产 trace 做处理,每次去掉一个工具调用,让一个裁判模型对比新旧答案。每个工具、每个智能体上"答案不变 vs 答案改变"的比例,就给出了这个工具的反事实价值分 。分数接近零的工具就是填充制造机。
调用前置信度 。让智能体在每次工具调用之前先吐一个 token 的置信度估计。如果置信度本来就高,那这次调用大概率是填充。SMART 风格的训练用的正是这个信号——一个"元认知"标志——来当作是否调用的闸门。
结果使用率追踪 。在下一轮模型推理里插入埋点,检测工具结果的任何字段是否真的出现在了响应里、或下一次调用的参数里。从未被引用的结果,按定义就是填充;这种方法能抓到"调用了工具,却忽略了它的结果"——这种情况单靠消融发现不了,因为一个无关的工具有时会和一条正确路径并存。
这些方法都不完美。但它们比今天大多数团队的仪表盘要有用得多——后者只显示每会话的工具调用总数,对"哪些调用其实有用"什么也说不出来。
把填充式调用从循环里挤出去 一旦你能度量 填充,可用的杠杆就具体了。最便宜的一根叫做用 prompt 反语言脚手架 。把 few-shot 里那些"我先查一下"、"为了周全起见"、"我来验证一下"全部删掉,换成果断的句式:"答案是 X,因为用户提供了 Y。"模型会模仿节奏。给它一个不一样的节奏。
下一根杠杆是工具表面积 。一个手里有 8 个工具的智能体,就会用到 8 个工具。把那些很少承重的工具从默认表面挪出去,藏在一个明确的"我需要查一下"的意图后面。2025 年浮出水面的代码执行 模式更进一步:与其把每一个只读 API 都暴露成一个独立工具,不如暴露一个 执行环境,让模型自己写一个脚本,脚本里再去做它真正需要的那几个查询。填充式调用之所以会减少,是因为模型必须先承诺一个计划 才能拿到查询权限,而计划比单次调用要难伪造得多。
第三根杠杆是知识边界训练 。教会模型:简单的东西它自己已经知道了。SMART、When2Tool 这类训练管线干的就是这件事——他们构造的训练数据里既有"必须用工具才能答"的任务,也有"不该用工具的"任务,并且在模型本不该调用却调用了的时候惩罚它。如果你没条件重新训练,那这套规则的"上下文版"就是在系统 prompt 里列出一份清单,告诉模型哪些类别的问题预期是用参数化知识自己回答的。
第四根杠杆是调用预算 。给智能体一个明确的每轮预算——比如,每轮最多两次工具调用,除非它能解释为什么要更多。预算之所以管用,是因为它把一个隐形的成本(漫长 trace 里多出的一次调用)转换成一个可见的成本(智能体得花掉一个预算单位,而那一份预算它本可以用在更有价值的地方)。多轮 RL 现在已经把预算直接烤进奖励函数里了,超额会被惩罚——哪怕最终答案是对的。
第五根杠杆是清退死工具 。如果你的使用率埋点显示,某个工具在所有能调用它的智能体里反事实价值都长期接近零,那这个工具本身就是填充。把它从注册表里删掉。剩下工具的选择准确率会因此提升——因为选择空间变小了。
度量对的东西,会改变什么 那些真正去测量"每个工具的反事实价值"的团队,几乎都会得到两个一致的发现。第一,分布是重尾的:少数几个工具承担了几乎所有承重工作,少数几个完全是填充,剩下一大堆夹在中间,看情况有用。第二,填充式调用的占比比任何人猜的都要高——Metis 的 98% 是个极端数字,但远不是孤例;即使是纪律严明的团队,也常常发现自己有三分之一的调用是可以删掉而对质量毫无影响的。
更持久的成果是心智上的转变 。一旦你开始把工具调用看成"智能体为了改变答案而花掉的预算",你就不会再去优化"让智能体能访问到所有东西",而是会优化"让智能体只访问到那些真正会改变这位用户、这个任务、此时此刻 答案的东西"。这个重构本身,就是"一个让人觉得又贵又慢的智能体"和"一个让人觉得目的明确又利索的智能体"之间的分水岭——而你必须先停止为"看起来在努力"这件事付费,才能跨过去。
往前看,正确的姿势是把填充式调用当作一类更广泛失败模式 的预警:任何"模型学到了,是因为它在奖励信号下看起来不错,但其实并不推动结果"的行为。工具调用只是其中最容易测的一种。冗长的开场白、不必要的澄清提问、表演式的置信度对冲——它们都是同一种模式在不同表面的体现。一旦你有了反事实这把尺子,你可以把它指向任何一个。下一轮赢家不会是能力最多的智能体,而是已经学会——靠梯度也好,靠护栏也好——只在使用真正有意义的时候才使用能力 的那一批。
会员专享
余下内容仅对会员开放。 会员可读完整内容 —— 每一个公开发布的观点背后,那些框架、决策与推理的全貌。
— 完整文章,包含未公开存档的部分 — 可落地的工作框架,附带权衡与决策依据 — 新文章抢先看,先于公开发布 登录以继续阅读→ 随时取消 · 一次订阅,畅读全部