小模型装上"工具使用说明书",反超了没用这招的大模型——ExpG 论文解读

你有没有遇到过这种情况:同一个 agent,在开发环境里工具调得顺风顺水,一上线就各种翻车?更气人的是,翻车了你还不知道为啥——工具只返回一个冷冰冰的 "error",到底是参数写错了、工具选错了,还是工具本身就坏了?

这其实是当前 agent 落地的一个真实瓶颈。模型能力越来越强,但执行过程的鲁棒性没跟上。阿里 Token Hub 团队联合山东大学和香港理工的这篇论文(arXiv:2608.03403),给了一个我觉得相当务实的解法:别指望模型自己悟,把每次工具调用的成败经验攒下来,蒸馏成每个工具专属的"使用说明书",下次调用时直接塞给 agent 参考。

核心摘要:ExpG(Experience-Driven Adaptive Guidance)是一个围绕工具的三阶段机制——从历史轨迹中获取结构化经验(Experience Acquisition)、过滤蒸馏成工具级指导(Experience Distillation)、再以动态 prompt 或静态 schema 约束的形式复用(Experience Reuse)。在 MetaTool、API-Bank、BFCL-V3 三个 benchmark 上全面涨点,Qwen3-8B 配上 ExpG 后在 BFCL-V3 上 Avg@3 从 58.28 涨到 66.96(+8.68),甚至反超了裸奔的 Qwen3-235B(71.15 vs 78.52 的差距被大幅压缩,Qwen3-8B+ExpG 总分 81.82 超过 Qwen3-32B 裸跑的 77.55)。更难得的是,这套机制不依赖大模型当老师——Evaluator 和 Summarizer 全换成 Qwen3-8B 自己,依然能稳定涨点。我的判断:这不是底层突破,但工程价值很实,属于"看完就能抄"的那类工作。

论文信息 - 标题:Towards Robust Tool Use in Agents via Experience-Driven Adaptive Guidance - 作者:Can Wang, Haoran Chen, Li Yu, Ding Hao, Bohai Zhao, Zhaoyang Liu, Zhiying Tu - 机构:山东大学数字服务计算技术重点实验室、Alibaba Token Hub、香港理工大学电子电机工程系 - 链接:https://arxiv.org/abs/2608.03403 | 代码:https://github.com/WangCan1178/ExpG


痛点:agent 的工具使用,脆在哪?

论文引了一组数据挺扎眼的:工具使用鲁棒性上的一点点改进,能带来 6.7% 到 68.3% 的性能波动。换句话说,工具调用这块是个高杠杆的薄弱环节。

现有方法大多建立在两个隐含假设上:一是 agent 已经掌握的工具总能被正确调用并返回预期结果;二是就算调错了,工具也会返回足够有用的错误信号,agent 可以自我反思纠正。

现实是这两个假设都不成立。

图1:ExpG 要解决的真实挑战与整体效果

图1(a):两类真实挑战——左边,同一个拧螺母的扳手,换个上下文结果就不同("用尽全力装上去"这种模糊指令让 agent 用错了方式);右边,三种完全不同的失败原因(选错工具、用错方式、工具本身坏了),工具却返回一模一样的粗粒度 "error" 信号。(b)从历史经验中学到的工具指导示例——扳手的指导里写着"选错尺寸或螺母不匹配就会失败"、"用之前先检查有没有裂纹"。(c)在工具选择、工具调用、响应生成三个阶段,ExpG(Ours)相对 No Method、Few-shot、DRAFT、Mem0 都有提升。

看图1(a) 就很直观。三个 ERROR 案例,失败原因完全不同,但 agent 拿到的反馈全是一样的 "error"。没有工具能力边界的概念,agent 只能靠盲目试错,而且一旦出错,拿到的信号是模糊的,推理路径会越走越歪。

这个问题我自己在做工具调用链路的时候深有体会——线上工具和文档描述不一致是常态,一个标着 "success" 的计算器可能返回的就是错的数。指望模型每次都自己试出来,成本太高。


ExpG 怎么做:把每次调用变成可学习的经验

核心思路一句话讲清:不再把工具调用当成黑盒、孤立、可重复的事件,而是把它当成可分析、可学习、有依赖关系的经验。围绕每个工具维护一个不断演化的经验池,持续产出并精炼这个工具的"能力边界 + 最佳实践"。

图2:ExpG 三阶段总览

图2:ExpG 整体框架。①Experience Acquisition:从历史任务轨迹中抽取每次工具调用的元数据,由 LLM Evaluator 做多维度成败归因,产出 scores 向量 + 自然语言解释;②Experience Distillation:先过滤掉过期/重复/有害经验,按 one-shot/few-shot/many-shot 分类选择代表性经验,再做定性+定量总结,产出工具级 Guidance(含核心功能、成功模式、常见问题、最佳实践,以及平均成功率 66%、平均得分 8.0、耗时 6s、token 成本 14 这类统计数据);③Experience Reuse:指导以动态(prompt)或稳定(schema 约束)两种方式注入后续推理。

阶段一:经验获取——给每次调用做"尸检报告"

形式化上,一条经验是 \(E = \langle h, m, c \rangle\)\(h\) 是哈希标识,\(m\) 是元数据(工具信息、调用上下文、输入、响应、成功标志、耗时、token 成本),\(c\) 是经验内容。

关键在 \(c\) 怎么来。一个 LLM Evaluator 对每次调用回答一系列 yes/no 问题——比如"输入参数的字段格式是否正确"——答案编码成一个 \(d\) 维二进制向量 \(scores \in \{0,1\}^d\),外加一段自然语言解释。论文设计的通用评估覆盖 10 个维度,归为三个视角:

  • 工具使用环境:工具选得对不对、调用时机对不对
  • agent 行为:输入在语法和语义上是否正确
  • 工具可靠性:工具本身执行是否稳定、返回是否符合预期

然后是个挺漂亮的设计:用 scores 向量做等价类划分。scores 完全相同的经验属于同一个等价类,一个等价类就对应一种"调用模式"。比如全 1 的向量就是"完美调用",而 \([1,1,1,1,1,1,0,0,0,0]\) 这种模式意味着"上下文对、输入也对,但工具自己返回了离谱结果"——这是工具可靠性问题。

这个划分把模糊的自然语言经验变成了可统计、可选择的结构化对象,后面的过滤和选择都建立在这上面。

阶段二:经验蒸馏——从碎片经验到工具说明书

经验池不是只进不出的垃圾桶。蒸馏阶段干两件事:

过滤。先按哈希去重,再按时间丢掉过期经验。最有意思的是一个滑动时间窗口的"有效性检查":如果某个时间戳之后连续三次调用的平均 scores 都更低,说明当时用于蒸馏的经验可能引入了负面影响,直接删掉。这相当于给经验池加了一个"事后追责"机制。

选择。按经验数量把工具分三档:one-shot(只有 1 条经验,不生成指导,避免单次偏差);few-shot(全用);many-shot(用等价类选择算法挑出最多 Q 条代表)。这个选择算法(论文 Algorithm 1)的目标是在覆盖尽量多调用模式的同时保持原始分布——先给每个等价类保底 1 条,再按类的占比分配剩余配额,最后做细粒度调整。附录 B 还给了理论分析,用 KL 散度和 Shannon 熵论证它比均匀采样(instance-balanced)和按类均分(class-balanced)在"分布对齐 × 多样性"上更均衡。

总结。LLM Summarizer 对保留的经验做定性分析(核心功能、成功模式、常见问题、最佳实践)+ 定量统计(平均成功率、平均得分、耗时、token 成本),产出最终的工具级 Guidance。

阶段三:经验复用——动态 prompt 还是硬 schema 约束?

指导不是一刀切地塞进 prompt。ExpG 把指导分成两类:

  • 动态指导:默认方式,作为轻量上下文 prompt,灵活适应环境变化
  • 稳定指导:当经验足够多(\(\geq Q/2\))且某个非完美等价类占比超过阈值 \(\alpha\)(推荐 \(K/Q\),实验中 \(\alpha=0.8\))时触发,直接写进工具 schema,变成硬约束

什么时候会触发稳定指导?典型场景是工具表现出一致的失败模式——比如那个"输入全对但工具自己乱返回"的等价类占了主导。这时候光在 prompt 里提醒不够,得直接在 schema 层面约束 agent 的行为。

从盲目试错到有据可依,这个转变就是 ExpG 的全部要义。


实验:全面涨点,小模型反超大模型

实验在三个 benchmark 上跑,分别对应工具使用的不同阶段:MetaTool(工具选择,1669 个任务)、API-Bank(工具调用,399 个任务)、BFCL-V3(响应生成,461 测试 + 1542 训练)。指标是 Avg@3 和 Pass@3。Baseline 包括 No Method、Few-shot、DRAFT、Mem0。模型覆盖 GPT-5 nano、DeepSeek-V3、Qwen3-8B/32B/235B。

主结果(Table 1,Total Avg@3)

模型 No Method Few-shot DRAFT Mem0 ExpG
GPT-5 nano 70.62 72.65 71.58 74.67 79.22
DeepSeek-V3 78.66 79.45 77.80 80.91 82.61
Qwen3-8B 74.41 76.27 75.18 74.98 81.82
Qwen3-32B 77.55 82.56
Qwen3-235B 78.49 84.98

几个值得注意的点:

Qwen3-8B 配上 ExpG(81.82)反超了裸奔的 Qwen3-32B(77.55),也反超了裸奔的 Qwen3-235B(78.49)。一个 8B 模型加外挂经验机制,打过了大它 30 倍的模型——这个对比是全文最有冲击力的数据。

DRAFT 在 DeepSeek-V3 上甚至不如 No Method(77.80 vs 78.66),Mem0 在 Qwen3-8B 上也是如此(74.98 vs 74.41)。说明经验类方法不是随便做做就有效的,经验的结构化程度和筛选机制很关键。

图3:MetaTool 与 BFCL-V3 各子任务的 Avg@3 雷达图

图3:左,MetaTool 各子任务——ExpG(红色)在 Similar(相似工具干扰)场景提升最猛(+16.34),在 Reliability、Multi-tool 等场景也全面外扩;右,BFCL-V3——在正常单轮(Normal_single)上各方法接近,但在带噪声的 Problem_single 和 Problem_multi(缺参、未定义工具、无关工具干扰)场景,ExpG 的外扩非常明显(分别 +13.09 和 +10.33)。

雷达图能看出 ExpG 的价值分布:环境越乱、干扰越多,ExpG 涨得越狠。这符合直觉——经验机制本质上就是在对抗不确定性。反过来在 API-Bank 这种相对简单的数据集上,大家分数都接近天花板,差距拉不开。

还有一个有趣的行为变化:正常多轮任务里,ExpG 把平均推理步数从 10.14 降到 9.02(少走弯路);但在有问题的多轮任务里,步数反而增加 2.4 步(更谨慎地与环境交互)。该快的时候快,该稳的时候稳——这个策略转移是经验指导带来的隐性收益。

消融:三个阶段各贡献多少

图4:ExpG 三阶段消融(Qwen3-8B,Avg@3)

图4:逐步叠加三个阶段的增益。MetaTool:+2.34(获取)→ +3.87(蒸馏)→ +1.70(复用);API-Bank:+1.50 → +2.00 → +0.51;BFCL-V3:+2.02 → +4.56 → +2.10。蒸馏阶段贡献最大。

消融结果很诚实:只用经验获取就超过了 Few-shot,说明结构化经验确实比随便塞几个 example 有用;蒸馏贡献最大的一块增益,印证了"经验池质量比数量重要";复用阶段的增量最小,但作者强调它对长期演化更关键——这个解释我觉得合理,不过也确实说明动态/稳定指导的区分在短期内收益有限。

经验数量实验(Table 2)也值得一看:MetaTool 上从 0 条经验的 77.29 涨到 9 条时的 86.70 见顶,之后再加经验反而有波动(11 条时 86.16,14 条时掉到 84.42)。经验不是越多越好,9 条左右就是甜点区——这对工程实践是个有用的参考数字。

我最关心的一个问题:要不要大模型当老师?

ExpG 的 Evaluator 和 Summarizer 默认用 Qwen3-max。那这套机制的收益是不是主要来自"大模型教小模型"?

作者做了两组对照(Table 3、Table 4):把 Evaluator 换成 Qwen3-8B,BFCL-V3 Avg@3 掉 3.76 个点;换成 Qwen3-32B 只掉 1.45。Evaluator 比 Summarizer 更敏感——归因是个精细活,弱模型干不好。

但更关键的是 Table 4:Evaluator 和 Summarizer 全换成 Qwen3-8B,三个数据集上依然有 +4.94 / +2.00 / +3.90 的 Avg@3 增益。也就是说,收益的大头来自经验的结构化蒸馏与复用机制本身,而不是外部强模型。agent 可以自我进化。这一点打消了我最大的疑虑。

另外附录里提到人工抽查:超过 95% 的经验可靠,最终指导的可靠率达 98.7%。不完美经验会在蒸馏阶段被更高层级的综合所纠正。

成本

线上开销:每次工具调用额外约 $0.0018 和 2.5 秒(两次 LLM 调用,平均额外 prompt 691 词),经验池维护基本只是文件 I/O(单条经验约 5.7KB,检索 47ms、更新 170ms)。作者建议资源紧张时"一次生成、多次复用"。完整复现需要 80 万次以上的 API 调用、约 12 天——复现门槛不低,好在代码和结果都开源了。


我的判断

亮点

  1. 把工具调用经验结构化成"scores 向量 + 解释",并用等价类划分做选择——这是全文最值钱的设计,把模糊的自然语言经验变成了可统计、可筛选的对象。跟 Mem0 这类通用记忆方法比,ExpG 的粒度更细(工具级而非对话级),跟 DRAFT 这类文档优化方法比,它多了时间维度的演化。
  2. 动态/稳定指导的双轨制是个务实的工程决策,轻量 prompt 和硬 schema 约束各司其职。
  3. 实验扎实,自进化实验(全 Qwen3-8B)排除了"靠大模型刷分"的嫌疑,这个自证很多论文不会主动做。

问题

  1. 整套机制引入了两个额外的 LLM 角色(Evaluator、Summarizer),线上每次调用 +2.5s 延迟,对实时性敏感的场景是个实打实的成本。"一次生成多次复用"能缓解,但动态环境下指导的时效性和复用率之间有矛盾。
  2. 10 维评估维度和 yes/no 问题集是人工设计的,换到差异很大的工具生态(比如具身机器人、数据库操作)时,这套通用模板能不能直接搬过去,论文没验证。
  3. 失败案例(附录 F.2)里提到的 unseen situations、错误归因、过度反应,本质上都是"经验外推"的固有边界——经验机制只能改善见过的模式,对真正的新情况无能为力。论文对此比较坦诚,但这也意味着 ExpG 是增益项而非银弹。
  4. 横向看,这跟同期 agent memory、skill library 方向的工作(如各种 trajectory-based learning)思路相近,ExpG 的差异在于聚焦工具级粒度和等价类结构化。属于把已有思路做深做实的工程整合,不是范式级创新——但在 agent 落地阶段,这种工作恰恰是最有用的。

工程启发:如果你在维护一个工具调用量大的 agent 系统,这套"经验获取→蒸馏→复用"的流水线基本可以直接抄。哪怕不实现完整版,只做"记录每次调用的多维度成败归因 + 定期汇总成工具级注意事项塞进 prompt"这个最小闭环,大概率也能吃到大部分收益——毕竟消融里前两个阶段的贡献占了八成。另外记住那个数字:每个工具 9 条左右的经验就是甜点区,别贪多。


觉得有启发的话,欢迎点赞、在看、转发。跟进最新AI前沿,关注我