ToolAnchor: Anchoring Counterfactual Context to Boost Agentic Tool-use Capability
ToolAnchor:用反事实上下文锚点打破 Agent 的工具使用惯性
论文标题: ToolAnchor: Anchoring Counterfactual Context to Boost Agentic Tool-use Capability
作者: Weiting Liu, Jieyi Bi, Wanqi Zhou, Jianfeng Feng, Yining Ma, Ai Han, Wenlian Lu
机构: Fudan University、JD.COM、Nanyang Technological University、MIT
论文地址: https://arxiv.org/abs/2607.14145
发布时间: 2026 年 7 月
关键词: LLM Agent、Tool Use、Agentic RL、Counterfactual Context、Toolset Expansion、SFT
1. 这篇论文在解决什么问题?
这篇论文研究的问题非常现实:
一个已经训练好的 LLM Agent,突然给它增加了一批新工具,它真的会用吗?
乍一看,这似乎不应该是个大问题。
例如,一个 Deep Research Agent 原本已经拥有:
- Web Search
- Web Browse
- Python Interpreter
- Scholar Search
- File Parser
现在我们再给它增加:
- 图片描述工具
- Bounding Box 提取工具
- 局部图片搜索工具
这些新工具的使用方式都已经写进系统提示词里。
那么 Agent 看见新工具之后,应该直接学会使用才对。
但作者发现:
事实并不是这样。
一个已经经过 Agentic RL 训练的 Agent,其行为策略往往已经形成了比较固定的模式。
以前遇到问题时,它习惯:
搜索网页
→ 浏览网页
→ 再搜索
→ 再浏览
→ 整合信息
→ 给答案
即便后来突然加入了视觉搜索工具,它仍然非常容易继续按照原来的方式解决问题。
换句话说:
工具已经给你了,但你还是习惯掏出以前那把锤子。
作者把这种现象称为:
Behavioral Inertia,即行为惯性。
而 ToolAnchor 想解决的,就是:
如何让一个已经训练完成、已经形成固定工具使用习惯的 Agent,高效学会使用后来加入的新工具,而不是重新从头训练一个 Agent?
2. 为什么“直接增加工具”还不够?
作者首先做了一个非常直观的实验。
他们选择已经经过 Agentic RL 训练的 Tongyi DeepResearch Agent。
原始工具集合可以记作:
U_old =
{
Web Search,
Web Browse,
Python Interpreter,
Scholar Search,
File Parser
}
然后加入三个视觉工具:
U_new =
{
Image Descriptor,
Bbox Extractor,
Crop-and-Image Search
}
扩展后的工具集合就是:
U = U_old ∪ U_new
作者随后让模型处理 VDR-Bench 中的视觉搜索任务,并统计不同模型调用各种工具的平均次数。
其中一个非常明显的现象是:
| 工具 | Gemini-2.5-Pro | Qwen3-30B-A3B-Instruct | Tongyi DeepResearch |
|---|---|---|---|
| Web Search | 7.50 | 5.14 | 24.18 |
| Web Browse | 4.42 | 2.72 | 9.62 |
| Image Descriptor | 1.88 | 2.37 | 1.84 |
| Bbox Extractor | 1.43 | 1.68 | 0.37 |
| Crop-and-Image Search | 1.69 | 1.02 | 0.78 |
可以看到,Tongyi DeepResearch 明明已经拥有了新的视觉工具,但仍然疯狂调用自己最熟悉的 Web Search。
尤其是:
Web Search:
Gemini-2.5-Pro 7.50 次
Qwen3-30B-A3B-Instruct 5.14 次
Tongyi DeepResearch 24.18 次
这说明问题并不只是:
“模型知不知道这个工具存在?”
真正的问题更像是:
模型过去通过训练形成了一套稳定的行为策略,新工具虽然被加入了工具列表,但并没有真正进入它原来的行为模式。
这就是作者所说的行为惯性。
3. 一个关键观察:模型可能不是“不会”,而是“走错路了”
这是整篇论文最重要的出发点。
作者没有马上开始重新训练 Agent,而是先分析那些失败轨迹。
他们发现,有些失败并不是因为模型完全不会使用新工具。
相反,Agent 有时候:
- 已经调用了视觉工具;
- 已经获得了有价值的信息;
- 甚至已经走到了正确方向附近;
- 但在某个关键决策点突然放弃;
- 又回到了自己最熟悉的旧工具和旧推理模式。
也就是说:
能力可能已经存在,但正确能力没有在关键时刻被触发。
作者于是提出一个问题:
假设完整轨迹是:
步骤 1 → 步骤 2 → 步骤 3 → 步骤 4 → 步骤 5 → …… → 错误答案
如果真正导致后面整条轨迹走偏的是步骤 4,那么有没有必要让教师模型把整条轨迹全部重写?
也许根本不需要。
只需要把:
步骤 4
替换成一个更合理的决策:
步骤 1 → 步骤 2 → 步骤 3 → 新步骤 4 → 让学生模型自己继续生成
后面的轨迹可能就完全不同了。
这就是 ToolAnchor 的核心思想。
4. 什么是 Counterfactual Anchor?
论文把这种“改变一个关键局部决策”的位置称为:
Counterfactual Anchor Round,反事实锚点轮次。
可以把它理解成:
一条失败轨迹中的关键岔路口。
假设 Agent 原本走的是:
历史 H
↓
决策 A
↓
后续轨迹
↓
失败
教师模型认为:
如果在相同历史 H 下,当时不是选择 A,而是选择 B:
历史 H
↓
决策 B
↓
新的后续轨迹
↓
?
那么任务可能会成功。
这里的 B 就是一种反事实决策:
现实中 Agent 当时没有这么做,但我们假设“如果它当时这么做,会发生什么?”
对应产生的局部上下文就是:
Counterfactual Anchor Context,反事实锚点上下文。
形式上,可以简单理解为:
原始上下文:
H_(t-1)
+
原始 Thought_t
+
原始 Action_t
+
原始 Observation_t
替换成:
反事实锚点上下文:
H_(t-1)
+
新的 Thought'_t
+
新的 Action'_t
+
新的 Observation'_t
关键之处是:
t 之前的历史完全不变。
作者只修改某一个关键决策点,然后让学生 Agent 从这个新的局部状态继续运行。
5. 一个非常直观的例子

【Figure 1 : 一个视觉搜索失败轨迹的反事实锚点案例。Agent 已经通过视觉工具获得了 EvoWorld.io 这一具体线索,但随后错误地认为视觉搜索结果过于模糊,于是放弃视觉证据并转向宽泛的文本搜索。教师模型将这一决策识别为关键锚点,并把“放弃视觉搜索”改写成“继续验证 EvoWorld.io 这一具体线索”。】
这个例子非常适合理解 ToolAnchor。
任务要求 Agent 根据图片中的绿色兜帽角色,找到对应游戏的开发工作室,以及这个工作室在 2017 年发布的一款 VR 游戏。
原来的 Agent 已经做了这些事情:
1. 尝试解析图片
2. 使用 Bounding Box 工具定位绿色兜帽角色
3. 使用局部图片搜索
4. 搜索结果中出现了一个非常具体的线索:
EvoWorld.io
到这里其实都没有问题。
真正的问题出现在下一步。
Agent 想的是:
这些视觉搜索结果看起来太泛了。
于是执行:
切换到宽泛的文本搜索
从这一刻开始,后面的轨迹逐渐远离真正有价值的视觉证据,最终得到错误答案。
教师模型分析完整失败轨迹之后认为:
真正值得修改的不是整条轨迹,而是 Agent 放弃 EvoWorld.io 这个视觉线索的瞬间。
于是教师给出的替代思路是:
虽然结果存在噪声,
但 EvoWorld.io 是一个具体的视觉线索。
在切换到纯文本搜索之前,
我应该先验证这个线索。
然后调用:
search("EvoWorld.io developer")
这个很小的局部改变,就把后面的搜索重新拉回了正确方向。
这也是作者为什么使用 Anchor 这个词:
它不是重新生成整条轨迹,而是在一个关键位置重新“钉住”Agent 的推理方向。
6. ToolAnchor 整体框架
ToolAnchor 由三个阶段组成:
阶段 1:反事实锚点假设
↓
阶段 2:反事实锚点验证
↓
阶段 3:反事实锚点内化

【Figure 2 : ToolAnchor 的完整三阶段框架。首先从学生模型的失败轨迹中寻找关键锚点并由教师生成反事实决策;随后让学生模型从该锚点继续运行,并同时进行任务级与锚点级验证;最后仅使用通过验证的局部决策进行 Agentic SFT,再通过 Agentic RL 将其重新融合进原有策略。】
下面分别来看三个阶段。
7. 第一阶段:找到真正值得修改的“关键一步”
7.1 收集学生模型的失败轨迹
首先,让原来的学生 Agent 在扩展工具集合上执行任务。
得到大量:
Question
→ Thought
→ Action
→ Observation
→ Thought
→ Action
→ Observation
→ ...
→ Answer
只留下最终失败的轨迹:
D_fail = 所有任务失败的完整轨迹
这些轨迹之后交给教师模型分析。
7.2 教师不是简单寻找“第一个错误”
这是一个很重要的设计。
最简单的做法当然是:
找到 Agent 第一次犯错的位置,然后修改它。
但作者认为这种策略并不可靠。
因为第一次犯错不一定真的决定最终结果。
例如:
第 3 步出现一个小错误
↓
第 5 步 Agent 自己修正了
↓
第 11 步出现一个关键错误
↓
后续搜索方向全部改变
↓
最终失败
真正值得干预的是第 11 步,而不是第 3 步。
类似地:
最后一个错误也不一定是最重要的错误。
因此作者要求教师模型从完整轨迹的角度寻找:
对后续行为影响最大的关键分叉点。
8. 作者设计的四个锚点选择标准
教师模型选择反事实锚点时主要考虑四个标准。
8.1 Downstream Impact:后续影响
优先选择:
修改以后能够影响很多后续步骤的位置。
例如:
搜索关键词写得稍微不好
可能只是局部问题。
但:
决定放弃视觉搜索,改成文本搜索
会直接改变后面十几步的行为。
后者显然更值得修改。
8.2 Path Redirection:路径重定向能力
这个位置最好是真正的“岔路口”。
也就是:
→ 路径 A → 失败
历史状态 → 决策点
→ 路径 B → 可能成功
换一个决定之后,后续轨迹会进入完全不同的搜索或推理路线。
8.3 Strategic Leverage:策略杠杆
作者优先寻找涉及高层决策的位置,例如:
- 推理方向
- 工具选择
- 查询词构造
- 证据解释
- 信息整合
- 任务规划
而不是一些无关紧要的表面错误。
8.4 Counterfactual Potential:反事实潜力
最后还要考虑:
在之前历史完全相同的情况下,只修改当前决策,真的有较大概率改善最终结果吗?
四个条件结合起来,其实就是在寻找:
轨迹中“改动成本很小,但对后续结果影响很大”的位置。
9. 一个非常重要的细节:教师不能偷看未来
ToolAnchor 这里做了一个很关键的数据约束。
教师选择锚点位置时:
可以看到完整失败轨迹
因为教师需要分析:
到底哪一步导致了后面的失败?
但是!
确定锚点之后,教师在生成新的 Thought 和 Action 时:
只能看到锚点之前的历史。
也就是说:
寻找问题:
可以看完整轨迹
生成替代决策:
只能看 H_(t-1)
教师不能看到:
- 后续 Observation
- 后续轨迹
- 正确答案
为什么要这么设计?
因为如果教师已经知道未来发生了什么,再倒回来构造一个“完美决策”,那么就产生了信息泄漏。
这种数据在真正推理的时候是不可能存在的。
所以作者实际上把:
诊断
和
决策生成
拆成了两个阶段。
可以理解成:
老师批卷的时候可以看完整试卷,判断你到底哪里出了问题;但如果让老师重新代替你做那一道题,只允许使用你当时已经知道的信息。
这个设计非常重要。
10. 为什么要使用多个教师模型?
单个教师可能存在自己的行为偏好。
例如:
- 一个教师特别喜欢 Web Search
- 一个教师更加偏好 Python
- 一个教师习惯比较早地干预轨迹
- 另一个教师习惯等待更多信息之后再干预
因此 ToolAnchor 使用多个不同教师模型分别分析同一条失败轨迹。
论文主要使用:
- Gemini-2.5-Pro
- GPT-5
不同教师可能:
选择不同锚点
也可能:
在相同锚点给出不同替代决策
于是可以得到更加多样的候选反事实上下文。
但这里马上会出现另一个问题:
教师给出的建议一定可靠吗?
答案显然是否定的。
因此 ToolAnchor 最关键的第二阶段出现了。
11. 第二阶段:不要相信老师,让学生自己验证
这是我认为 ToolAnchor 设计得比较漂亮的地方。
作者没有把教师生成的内容直接当成训练数据。
相反:
教师提供的只是“假设”。
例如教师说:
如果第 12 步这样改,
这个任务应该就能做对。
ToolAnchor 并不会直接相信。
而是:
那就真的从第 12 步改完以后重新跑一次。
而且不是让教师继续做。
是让原来的学生模型自己继续生成。
12. 为什么一定要让学生自己续写?
假设教师提供新的锚点:
H_(t-1)
+
Teacher 给出的 Thought'_t
+
Teacher 给出的 Action'_t
执行 Action 后得到新的 Observation。
然后:
教师退出。
后面的:
t+1
t+2
t+3
...
Final Answer
全部由学生模型自己完成。
因此最终产生的是:
学生历史
+
教师修改的一小步
+
学生自己的后续轨迹
而不是:
教师完整轨迹
这和普通知识蒸馏或者直接模仿教师完整轨迹存在明显区别。
ToolAnchor 真正想验证的是:
教师只需要在某一个关键位置推学生一把,学生自己是否就能够把剩下的任务完成?
如果可以,就说明:
这个局部锚点确实触发了学生模型原本已经具备、但之前没有正确发挥出来的能力。
13. 双重验证:做对了还不够
仅仅看最后答案正确,仍然不够。
为什么?
考虑下面这个情况:
教师修改了第 10 步。
结果学生最后真的答对了。
但仔细看轨迹会发现:
第 10 步教师修改
↓
学生完全没用这个信息
↓
后来偶然搜到了另一个网页
↓
碰巧得到正确答案
那么这个锚点实际上没有价值。
因此作者设计了两层验证。
13.1 第一层:Task-level Verification
首先检查:
从这个锚点继续运行以后,学生最终有没有完成任务?
如果任务失败:
直接丢弃
只有任务成功的候选锚点才能进入下一步。
论文在验证阶段会对每个候选锚点运行 3 次学生轨迹,只要其中至少一次成功,就通过这一层 Pass@3 验证。
13.2 第二层:Anchor-level Verification
然后再让一个 Judge 模型检查:
最后的成功到底是不是这个锚点真正促成的?
也就是说:
任务成功
和:
锚点真的有用
必须同时成立。
最终保留下来的数据可以概括为:
Verified Context =
{
学生从锚点继续以后成功完成任务
AND
Judge 判断该锚点确实对成功有实质贡献
}
这一步非常重要,因为教师模型本身也会产生大量看似合理、实际上没有效果的建议。
14. 教师提出的锚点其实有多不靠谱?
作者统计了候选反事实上下文的通过率。
结果是:
通过任务级验证:
33.67%
继续通过锚点级验证:
31.98%
也就是说,假设教师提出 100 个反事实修改:
大约只有:
32 个
最终真正值得用于训练。
换句话说:
接近三分之二的教师建议都会被过滤掉。
这也说明为什么不能简单地:
强模型生成轨迹
→ 全部拿去 SFT
教师模型能力很强,并不意味着它针对学生模型提出的每一个行为修改,都适合这个学生模型。
ToolAnchor 的思路更加接近:
教师负责提出假设
↓
学生负责做实验
↓
只有实验有效的经验才学习
15. 第三阶段:把有效的“关键一步”真正学进模型
现在我们已经得到了一批经过验证的反事实锚点。
接下来才开始真正训练。
这个过程又分成两步:
Anchor-only Agentic SFT
↓
Agentic RL
16. 第一步:Anchor-only Agentic SFT
这里最值得注意的是:
作者没有拿整条成功轨迹进行 SFT。
训练目标只放在:
教师改写的那个关键 Thought + Action
上。
也就是说,一条轨迹可能有几十轮:
1
2
3
...
11
12
13
...
40
假设第 12 轮是反事实锚点。
SFT 不训练:
1~40 整条轨迹
而只训练:
第 12 轮新的 Thought
+
第 12 轮新的 Action
可以把训练目标简化理解成:
给定原始历史 H_(t-1)
让模型学会生成:
新的 Thought'_t
新的 Action'_t
这是一种非常局部的行为更新。
作者想做的不是:
把学生变成教师。
而是:
只在那些真正重要的决策节点上,修正学生原来的行为习惯。
17. 为什么只做 SFT 还不够?
局部 SFT 有一个明显风险:
模型可能确实学会了:
在某些特定状态下调用新工具
但这种局部行为还没有很好地融入原来的完整 Agent 策略。
甚至可能出现:
为了学新工具
↓
破坏以前已经学好的工具使用能力
因此作者在 SFT 之后继续进行 Agentic RL。
18. 第二步:Agentic RL
SFT 可以理解为:
把 Agent 从原来的行为惯性中推出来。
而后面的 Agentic RL 则负责:
让这个新行为重新融入整个策略。
作者使用 GRPO,并使用任务级二值奖励:
答案正确 → Reward = 1
答案错误 → Reward = 0
这个阶段主要承担两个作用。
第一:
把 SFT 学到的新锚点行为
和原来已经训练好的 Agent 策略重新对齐。
第二:
让 Agent 在新工具集合下继续自己探索,
而不是永远只能模仿教师提供的几个固定动作。
因此整个训练逻辑其实非常清晰:
反事实锚点
↓
告诉模型“真正值得改的是这里”
↓
局部 SFT
↓
先把关键行为改掉
↓
Agentic RL
↓
重新形成完整、自主的工具使用策略
19. ToolAnchor 和普通“教师轨迹蒸馏”有什么不同?
这也是理解这篇论文非常重要的一点。
普通做法可能是:
强教师模型完成任务
↓
得到一条优秀完整轨迹
↓
学生模仿整条轨迹
ToolAnchor 则是:
学生先自己失败
↓
教师分析学生为什么失败
↓
只提出一个关键局部修改
↓
学生从这里继续自己做
↓
验证这个修改真的有效
↓
只训练这个关键局部决策
所以教师在这里并不是:
答案提供者。
而更像:
失败轨迹诊断者 + 局部行为修正者。
更重要的是:
教师没有最终决定权。
教师提出的修改必须经过学生实际 rollout 验证。
因此整套系统实际上形成了这样一个闭环:
Student Failure
↓
Teacher Hypothesis
↓
Student Rollout
↓
Verification
↓
Training
20. 实验设置
20.1 学生模型
作者使用:
Tongyi DeepResearch Agent,Qwen3-30B-A3B
作为基础 Agent。
它原本已经在固定工具集合上完成 Agentic RL。
20.2 教师模型
主要使用:
- Gemini-2.5-Pro
- GPT-5
用于:
- 分析失败轨迹
- 找到反事实锚点
- 生成新的 Thought 和 Action
20.3 训练数据
作者使用两类训练数据。
| 数据集 | 数量 | 类型 |
|---|---|---|
| OpenSeeker-1.5k | 1500 | 文本搜索 |
| VDR-1.5k | 1500 | 视觉搜索 |
因此总训练规模大约为:
3000 个任务
20.4 测试 Benchmark
最终在三个方向进行测试:
| Benchmark | 任务类型 | 测试规模 |
|---|---|---|
| GAIA | 通用 AI Assistant | 165 |
| BrowseComp | 文本搜索 | 200 |
| VDR-Bench | 视觉搜索 | 500 |
这三个任务分别测试:
原有综合 Agent 能力
原有文本搜索能力
新增视觉工具能力
因此可以同时观察:
新能力有没有获得?
以及:
老能力有没有因为训练而退化?
21. 主实验结果
核心结果如下。
| 方法 | GAIA | BrowseComp | VDR-Bench |
|---|---|---|---|
| Tongyi DeepResearch | 70.9% | 43.4% | 7.5% |
| GPT-5 | 67.4% | 51.5% | 20.4% |
| Gemini-2.5-Pro | 74.5% | 10.0% | 18.8% |
| Qwen3-VL-30B-A3B-Thinking | 42.4% | 5.0% | 23.2% |
| Vision DeepResearch | 55.2% | 18.5% | 37.8% |
| ToolAnchor | 74.5% | 45.0% | 28.8% |
最值得关注的是 VDR-Bench。
原来的 Tongyi DeepResearch:
7.5%
ToolAnchor:
28.8%
提升达到:
+21.3 个百分点
这意味着一个原本主要训练于文本工具使用的 Agent,在加入视觉工具并经过 ToolAnchor 后,确实获得了明显更强的视觉搜索能力。
22. 为什么 28.8% 这个结果值得注意?
Vision DeepResearch 可以达到:
37.8%
仍然明显高于 ToolAnchor 的:
28.8%
但两者的训练条件并不完全一样。
Vision DeepResearch 本身就是针对视觉搜索从头设计和训练的视觉语言 Agent,并且使用了约 15K 的多模态训练数据。
ToolAnchor 则是在一个已有的文本型 Deep Research Agent 上:
保留原来的 Agent
+
加入几个视觉工具 API
+
使用反事实锚点进行增量能力扩展
所以作者真正想证明的不是:
ToolAnchor 能打败所有专门训练的多模态 Agent。
而是:
如果我已经花了很大成本训练好了一个 Agent,现在业务突然需要增加一类工具,没有必要把所有东西推倒重来。
这是 ToolAnchor 更现实的应用价值。
23. 更有意思的是:原来的能力没有掉
如果只看视觉任务,可能会觉得:
新工具学会了,那是不是牺牲了以前的能力?
结果恰恰相反。
原始 Tongyi DeepResearch:
GAIA 70.9%
BrowseComp 43.4%
ToolAnchor:
GAIA 74.5%
BrowseComp 45.0%
分别提升:
GAIA:
+3.6 个百分点
BrowseComp:
+1.6 个百分点
所以 ToolAnchor 不仅没有明显破坏原来的文本 Agent 能力,反而还有一定增强。
作者认为,这是因为反事实锚点并不只会修改“是否使用新工具”。
教师也可能发现:
- 原来的搜索策略不好
- 查询词构造不好
- 证据解释错误
- 信息整合存在问题
- 推理路径本身有问题
因此训练过程中实际上顺带改善了一部分原有 Agent 行为。
24. 仅仅把视觉工具加进去,有没有用?
有。
但是不够。
作者直接给原模型加入视觉工具,不进行 ToolAnchor 训练:
VDR-Bench:
7.5%
→
16.6%
说明模型本身确实具有一定的工具泛化能力。
只要告诉它:
这里有一个新工具
它并不是完全不会使用。
但:
16.6%
距离最终 ToolAnchor 的:
28.8%
仍然差得很远。
因此可以把整个能力提升拆成两部分理解:
工具说明带来的自然泛化:
7.5 → 16.6
ToolAnchor 进一步打破行为惯性:
16.6 → 28.8
这个实验很好地支持了作者的核心观点:
问题既包括“有没有工具使用能力”,也包括“在正确的时候能不能触发这种能力”。
25. 消融实验:为什么三个阶段缺一不可?
作者比较了几种训练方案。
25.1 直接重新做 Agentic RL
结果:
GAIA 70.3%
BrowseComp 41.5%
VDR-Bench 21.6%
视觉能力确实提升了。
但仍然明显低于 ToolAnchor 的:
28.8%
作者认为原因是:
原来的 Agent 策略已经比较稳定。
直接进行 RL 时,它仍然容易重复以前熟悉的策略,因此探索新工具的效率有限。
也就是说:
RL 会探索
不代表:
RL 一定能够轻松逃离已经形成的行为模式
25.2 使用未经验证的教师反事实上下文做 SFT
效果反而比较差。
特别是在 BrowseComp:
22.5%
出现了非常明显的性能下降。
这说明:
强教师生成的内容不能直接当成高质量训练数据。
教师可能:
- 锚点找错
- 修改没有意义
- 建议不适合学生
- 虽然看起来合理,但实际上不能提高任务成功率
所以 Student-side Verification 并不是一个可有可无的小模块,而是 ToolAnchor 的关键组成部分。
25.3 只使用经过验证的 Anchor SFT
结果会明显改善:
GAIA 64.8%
BrowseComp 33.5%
VDR-Bench 16.8%
但仍然不如最终方案。
说明:
找到正确的局部行为并让模型学习,只解决了“往哪里走”的问题。
还需要后续 RL 将这些局部修改真正整合进完整策略。
25.4 最终 ToolAnchor
Verified Anchor
+
Anchor-only SFT
+
Agentic RL
结果:
GAIA 74.5%
BrowseComp 45.0%
VDR-Bench 28.8%
三个 Benchmark 都取得最好或者非常有竞争力的结果。
所以 ToolAnchor 的整个逻辑可以浓缩成:
教师负责找到突破口
验证负责判断突破口是不是真的有效
SFT 负责把模型从旧轨迹里推出来
RL 负责重新学习完整策略
26. 锚点选在哪里真的重要吗?
非常重要。
作者比较了几种简单策略:
随机选择一轮
选择第一次错误
选择最后一次错误
按照四项标准让教师寻找关键锚点
在 VDR 和 OpenSeeker 上,作者设计的标准都取得了最高的轨迹恢复率。
例如 VDR:
Last Error Round 8.0%
First Error Round 16.0%
Random Round 12.0%
Criteria Round 20.5%
OpenSeeker:
Last Error Round 9.5%
First Error Round 21.0%
Random Round 17.0%
Criteria Round 23.5%
这说明:
ToolAnchor 有效并不仅仅是因为“教师模型插了一句话”。
干预位置本身同样重要。
作者进一步让教师针对同一条失败轨迹重复寻找锚点 50 次。
结果发现:
有效锚点并不会均匀分布在轨迹中。
它们会集中在少数几个真正具有因果影响力的决策节点附近。
这进一步支持了:
一条几十步的 Agent 轨迹中,不同决策的重要程度差异可能非常大。
27. 我认为这篇论文真正有意思的地方
如果只看表面,ToolAnchor 很容易被概括成:
教师分析错误
→ 生成修改
→ SFT
→ RL
这样看其实并不新奇。
但这篇论文真正值得关注的是它背后的几个观点。
27.1 Agent 失败不一定意味着缺少能力
传统思路很容易认为:
任务失败
=
模型能力不足
ToolAnchor 提出了另一种可能:
任务失败
=
模型没有在正确状态下触发正确行为
也就是说,一个 Agent 可能:
- 会用工具
- 会搜索
- 会推理
- 甚至已经拿到了关键证据
但某一个错误决策把后面的几十步全部带偏。
所以:
能力存在与能力是否被正确调用,是两件不同的事情。
这对于长轨迹 Agent 尤其重要。
27.2 一条轨迹中的信息价值极度不均匀
传统轨迹蒸馏很容易把:
整个成功 trajectory
都当成监督数据。
但 ToolAnchor 暗示:
一条几十轮轨迹中真正高价值的监督信息,可能只集中在几个关键决策点。
例如:
第 1~10 步:普通搜索
第 11 步:关键工具选择
第 12~25 步:顺着第 11 步自然展开
第 26~35 步:信息整理
那么真正决定结果的可能就是:
第 11 步
如果是这样,相比把教师整条几十轮轨迹全部蒸馏给学生:
寻找高杠杆决策点,然后只训练这些位置,可能是一种更加高效的数据利用方式。
27.3 Teacher 不再是绝对正确的监督者
ToolAnchor 的另一个特点是:
Teacher Output ≠ Ground Truth
教师只是提出:
“我觉得这里这样改可能更好。”
最终到底好不好,要让学生自己跑。
所以整个过程非常像:
提出假设
→ 做实验
→ 验证假设
→ 保留有效经验
而不是:
老师说什么
→ 学生学什么
这个思想其实非常适合 Agent。
因为一个动作对 GPT-5 有效,不代表:
对一个 30B 学生模型也一定有效。
真正有价值的经验应该是:
学生自己能够接得住的经验。
28. ToolAnchor 和 Agent 自进化有什么关系?
虽然论文主要把问题定义为:
Toolset Expansion,即工具集合扩展。
但它实际上已经带有比较明显的 Agent 自进化味道。
整个过程是:
Agent 执行任务
↓
产生失败轨迹
↓
分析自己的失败轨迹
↓
构造反事实改进策略
↓
重新执行验证
↓
提取有效经验
↓
更新自身策略
↓
获得新的工具使用能力
这已经不只是普通的:
训练集 → 模型训练
而是:
Agent 自己的交互轨迹
→ 成为下一阶段能力提升的数据来源
只不过 ToolAnchor 当前仍然依赖:
- 外部教师模型
- SFT
- RL
所以它还不是完全自主的持续自进化系统。
但:
“从失败轨迹中寻找真正值得修改的关键决策,再把有效修改内化”
这个思想本身非常适合后续自进化 Agent 研究。
29. 论文的局限性
作者自己也提到了几个明显限制。
29.1 教师模型数量有限
目前主要依赖少量强教师模型生成反事实锚点。
不同教师可能具有完全不同的行为偏好。
未来如果引入更多类型教师,可能进一步提高:
- 锚点覆盖率
- 行为多样性
- 泛化能力
29.2 当前工具扩展类型仍然比较单一
论文主要研究的是:
文本 Deep Research Agent
→
加入视觉搜索工具
这是一个很合适的实验场景,因为新旧工具差异比较明显。
但仍然需要验证:
如果增加的是:
- 数据库工具
- 代码执行环境
- GUI 工具
- 文件操作工具
- 专业软件
- Computer Use 工具
这种方法是否还能保持相同效果。
29.3 整套流程仍然不算便宜
虽然不需要从头训练 Agent,但 ToolAnchor 包含:
失败轨迹生成
多个教师分析
教师生成反事实上下文
每个候选锚点多次学生 rollout
LLM Judge 验证
SFT
Agentic RL
所以它解决的是:
相比从头训练,如何更加高效地扩展能力。
而不是:
完全零成本、零训练地获得新能力。
30. 总结
ToolAnchor 研究的是一个非常现实的问题:
已经训练好的 Agent,在加入新工具以后为什么还是不会好好使用?
作者发现,原因之一是已经经过 Agentic RL 训练的 Agent 会形成明显的行为惯性:
以前习惯怎么做
↓
以后仍然倾向怎么做
即便新工具已经出现,它仍然容易退回原来的工具和推理模式。
ToolAnchor 的解决方案不是重新从头训练,而是从 Agent 自己的失败轨迹出发:
失败轨迹
↓
教师寻找关键决策岔路口
↓
构造一个反事实决策
↓
学生从这里重新继续任务
↓
验证这个局部修改真的能够帮助学生
↓
只对这个关键决策进行 SFT
↓
再通过 Agentic RL 整合进完整策略
整篇论文最核心的思想,我认为可以浓缩成一句话:
一个 Agent 做错任务,并不意味着整条轨迹都需要重学;很多时候,只需要找到那个让后续行为彻底走偏的关键岔路口,把这一小步改对,模型原本已经具备的能力就可能重新被释放出来。
从这个角度看,ToolAnchor 真正研究的并不仅仅是“如何教 Agent 使用一个新工具”。
它更深层的问题其实是:
对于已经形成稳定行为模式的 Agent,我们应该如何用尽可能少、但真正具有因果影响力的监督信号,改变它的长期行为策略。
这可能也是这篇工作最值得继续思考的地方。

浙公网安备 33010602011771号