多教师在线蒸馏翻车现场:当一个 token 决定整条轨迹
你有没有遇到过这种"看起来哪里都对、跑起来就是不对劲"的训练?一个学生模型被两路教师监督——一路专门教它什么时候该调用工具,另一路专门教它什么时候该直接回答——理论上这不就是把两个专家的能力拼起来吗?结果训练完一测,确实学会调用工具了,但毛病也跟着来了:明明不该调用的地方它也调了,APIGen-MT 上的 over-calling 从 4.9% 飙到 13.7%。
更让人挠头的是看 loss 曲线——两路教师贡献"挺均衡"的啊。token 曝光量是均衡的,token 级 JSD 也是均衡的,gradient proxy 也看不出哪边在喧宾夺主。那学生到底是怎么被"教坏"的?
这篇 arXiv:2607.07050 揭开了这个谜:错不在总量,在位置。它给出了一个叫 behavior leverage imbalance(行为杠杆失衡)的概念,并配套提了一个简单到令人发指的解决方法 Soft Clamp。
核心摘要
痛点:多教师在线蒸馏(MOPD)训练智能体模型时,常用"工具调用教师 + 直接回复教师"分工合作。但学生学完之后虽然调用准确率上去了,却开始过度调用——本该直接回答的也去调工具,APIGen-MT 上 over-calling 从 4.9% 飙到 13.7%,多轮场景里反复调同一个工具的比例高达 16.7%。这件事诡异的地方在于:从 token 曝光量、整段 JSD、gradient proxy 这些"总账"看,两路教师是均衡的,看不出谁在喧宾夺主。
核心方案:论文把锅精准地甩到了一个被忽略的维度——信号落点。在工具调用场景里,<tool_call> 标签、函数名这些"模式入口 token"具有不成比例的全局控制力——只要这几个位置被推一下,后面整条轨迹就跟着跑偏了。Soft Clamp 干的事情极其简单:对 batch 内的 token 级 JSD 设一个动态阈值 \(C = k \cdot \mathrm{mean}(d)\),超出的 token 前向值被钳到 \(C\),梯度按 \(C/d\) 缩放而不是直接截断。
关键效果:在 APIGen-MT 上,Soft Clamp 把 over-calling 从 13.7% 压到 9.0%,决策准确率 89.2% 与 vanilla GKD(88.9%)持平甚至反超;在 BFCL 多轮循环诊断里,Loop@3 从 14.8% 降到 10.1%,重复调用率从 16.7% 降到 11.1%。
一针见血的评价:这篇不是新方法、新范式,是一篇"诊断+小修小补"的工程型工作。但它戳中了一个真实痛点——多教师 OPD 的失效模式不能只看总账,必须看信号落点。Soft Clamp 的代码改动小到几乎可以一行解决,APIGen 决策精度不掉,多轮循环砍掉三分之一,性价比很高。值得每个做 agent 训练的人读完反思。
论文信息
- 标题:Behavior Leverage Imbalance in Multi-Teacher On-Policy Distillation
- 作者:Jiabin Shen, Guang Chen, Chengjun Mao
- 机构:Ant Group(蚂蚁集团)等
- 发表日期:2026 年 7 月 8 日
- 链接:arXiv:2607.07050
- 篇幅:17 页(含附录),6 张图
问题动机:为什么总账看不对?
先说场景:智能体语言模型在多轮工具调用轨迹里的行为大概是这样——
在这样一个轨迹里,模型需要做的关键决策不是"怎么调工具",而是"要不要调"。多教师 OPD 看起来是个自然解法:
- 一个工具调用教师,专门教"什么时候该调结构化函数"
- 一个直接回复教师,专门教"什么时候该自然语言回答"
- 学生在自己生成的轨迹上做 on-policy 学习(GKD 风格)
理论上完美——专业化分工、行为互补。论文做的实验就是在这个设定下,结果翻车了。
翻车现场:APIGen-MT 主结果
| 方法 | 决策准确率 | Over-calling | 调用召回 | 回复召回 |
|---|---|---|---|---|
| Base | 80.7 | 7.2 | 68.5 | 92.8 |
| Base SFT | 85.3 | 4.9 | 75.5 | 95.1 |
| Vanilla GKD | 88.9 | 13.7 | 91.4 | 86.4 |
| Hard Clip | 89.2 | 12.0 | 90.4 | 88.0 |
| Global Reweight | 89.1 | 10.1 | 88.2 | 90.0 |
| Soft Clamp | 89.2 | 9.0 | 87.5 | 91.0 |
表 1:APIGen-MT 决策结果。Vanilla GKD 调用召回从 75.5% 飙到 91.4%——但代价是 over-calling 从 4.9% 跳到 13.7%,回复召回从 95.1% 跌到 86.4%。(数据来源:论文 Table 3)
这就是那个让人困惑的"跷跷板":调得动了,但不该调的地方也调了。Base SFT 是"少调"但"调得准";Vanilla GKD 是"敢调"但"调得乱";Soft Clamp 试图找到平衡点。
更糟的是多轮场景。BFCL 多轮循环诊断(800 个任务、3136 轮)显示,Vanilla GKD 的 Loop@3 高达 14.8%(连续三轮都在调工具),重复调用占 16.7%,最终回复率只有 89.6%——意味着 10% 的对话压根结束不了,模型陷入"调工具 → 收到观察 → 再调同一个工具"的死循环。
总账的迷惑
直觉上你要解释这个现象,第一反应肯定是"那肯定是工具调用教师贡献太大了吧?"
论文做了 sanity check(Table 1):
| 方法 | Token 曝光 T/R | Token 级 JSD T/R | Gradient proxy T/R |
|---|---|---|---|
| Vanilla GKD | 0.867 | 0.881 | 0.957 |
| Hard Clip | 0.870 | 0.893 | 0.980 |
| Global Reweight | 0.874 | 0.902 | 0.985 |
| Soft Clamp | 0.881 | 0.895 | 0.976 |
表 2:聚合层 sanity check。所有 GKD 变体的 T/R 比都接近 1.0,甚至略低于 1.0——意味着工具调用教师并没有"霸占"训练信号。(数据来源:论文 Table 1)
T/R 是 tool-call 除以 response 的比值。三种聚合指标下,T/R 都接近 1 甚至略小于 1。也就是说:
- 工具调用样本没有获得更多 token 曝光
- 整段 token 级 JSD 没有明显偏向工具调用教师
- gradient proxy 同样没看出偏向
结果:总账是平的,但行为已经歪了。 你用任何"总量分析"的方法都查不出来。问题出在哪儿?

图 1:聚合层 sanity check。横轴是训练 step,纵轴是各聚合指标。可以看到四组 GKD 变体的 token 曝光、JSD 比例曲线高度重合,没有任何"哪路教师贡献过大"的迹象。(图片来源:论文 Figure 1)
这就是论文最精彩的切入——既然总账没毛病,那一定有个"被忽略的维度"在搞事。
方法核心:行为杠杆与 Soft Clamp
关键洞察:行为杠杆(Behavior Leverage)
论文给了一个非常直觉化的概念——behavior leverage(行为杠杆):
一个 token 位置对"未来生成模式"的控制程度,叫它的行为杠杆。
为什么这个概念重要?因为在工具调用场景里,存在一类特殊的"模式入口 token":
<tool_call>标签<function=get_xxx>函数名- 结构化 schema 的边界符
这些 token 一旦被推一下,整个轨迹就跟着跑偏。打个比方:
你在十字路口准备左转还是直行,本来五五开。这时候"左转"或"直行"这两个字只占你说话内容的一小部分——但这一个 token 决定了后面所有话。这两个字就是"高行为杠杆"位置。
相对地,自然语言回复里的内容 token 杠杆就低很多:你把"今天天气不错"改成"今天天气挺好",影响的是局部措辞,不会把整段对话从"回答"模式拉成"调工具"模式。
论文的诊断假设非常清晰:
多教师 OPD 的脆弱性,来自于当一路教师的信号集中在高杠杆位置(模式入口),而另一路教师的信号分散在低杠杆位置(内容词)时,前者对全局行为的控制力远大于它在总账里的占比。
这个假设也很容易验证——把"工具调用样本上 student 的 P(
| 方法 | APIGen over-call | P(tool) on response | Top-1 tool on response | BFCL irrel. refusal |
|---|---|---|---|---|
| Vanilla GKD | 13.7 | 0.164 | 15.1 | 77.8 |
| Hard Clip | 12.0 | 0.157 | 14.4 | 81.9 |
| Global Reweight | 10.1 | 0.138 | 11.3 | 80.9 |
| Soft Clamp | 9.0 | 0.135 | 11.2 | 83.5 |
表 3:响应侧决策压力 vs. 最终 over-calling。Soft Clamp 在四个指标上都是 GKD 变体里最优的。(数据来源:论文 Table 2)

图 2:响应侧决策压力和 over-calling 的关系。每个点对应一个 GKD 变体,红色 Soft Clamp 在右下角——决策压力最低、over-calling 也最低。(图片来源:论文 Figure 2)
训练过程中的 step-level 曲线就更直观了:

图 3:训练 step 级别的 response 侧决策压力(P(tool) 和 Top-1 tool 率)。Soft Clamp 红色线在累计均值(下方两张图)里始终是最低的,而 Vanilla GKD 蓝色线在第 100-200 步间出现明显高峰。(图片来源:论文 Figure 3)
这个图值得多看一眼。上排的滚动均值在训练初期所有方法都差不多,但 Vanilla GKD 在第 100-200 步出现一个明显的峰——这就是"工具调用入口"被高杠杆推高的瞬间。下排的累计均值差异就更稳定了,Soft Clamp 一直贴在最低位。
Soft Clamp 算法
有了诊断,解决方案就水到渠成了:把那些"极端的 token 级 JSD"按位置压下去,但保留梯度信号。
对 batch 内的所有监督 token 的 JSD 值 \(\{d_i\}\),定义动态阈值:
校准后的 divergence:
主实验用 \(k=3.0\)。
这个设计有几点小心思:
- 动态阈值:用 batch 内均值做归一化,不依赖全局统计
- Forward 钳到 C:极端 token 的 loss 不再爆炸,但也不会被截断到 0
- Stop-gradient 妙用:\(\mathrm{stopgrad}(d_i)\) 让分母不传梯度,所以 \(C/d_i\) 是个常数缩放因子——极端 token 的梯度被等比缩小,但方向和符号都还在。这是它和 Hard Clip 的本质区别:Hard Clip 把超出部分直接截到常数,梯度按"超出部分"算(也就是 0),极端 token 的学习信号被直接掐断;Soft Clamp 保留了一个 \(\frac{C}{d_i}\) 的比例梯度,模型仍然能继续学,只是步子小了点
对比另外两个 baseline:
| 方法 | 操作 | 缺点 |
|---|---|---|
| Hard Clip | \(d'_i = \min(d_i, c)\),\(c=0.5\) | 极端 token 失去边际梯度,学不动 |
| Global Reweight | 按 z-score 全局调权重 | 改动大段 loss,不是局部干预 |
| Soft Clamp | 动态阈值 + 梯度保留 | 只动极端值,普通 token 不受影响 |
实验结果:Soft Clamp 真的管用吗?
主实验:APIGen-MT
回到 Table 1 的主结果。Soft Clamp 把 over-calling 从 13.7% 压到 9.0%(降幅 34%),同时决策准确率 89.2% 不掉。这个图更直观:

图 4:APIGen-MT 四个决策指标的水平条形图。Decision accuracy 各 GKD 变体差异不大(约 89%);Over-calling 差异最显著,Vanilla 13.7% → Soft Clamp 9.0%;Call recall Vanilla 最高(91.4%),但 Respond recall Vanilla 最低(86.4%)。(图片来源:论文 Figure 5)
这个 trade-off 让我想起 RLHF 里的 reward hacking:你在优化一个总目标,单看总目标确实涨了,但拆开看子指标会发现"一好一坏"。Vanilla GKD 的问题是把"调用能力"学过头了,挤占了"判断什么时候不该调用"的能力。
跨域验证:BFCL 和 When2Call
光在 APIGen 上好不算数,作者还在两个外部 benchmark 上做了验证。
| 方法 | BFCL Overall | Tool Call Quality | Irrelevance Refusal |
|---|---|---|---|
| Base | 82.2 | 83.5 | 79.8 |
| Base SFT | 82.9 | 82.0 | 84.4 |
| Vanilla GKD | 79.8 | 80.9 | 77.8 |
| Hard Clip | 80.2 | 79.3 | 81.9 |
| Global Reweight | 80.0 | 79.5 | 80.9 |
| Soft Clamp | 80.6 | 79.1 | 83.5 |
表 4:BFCL 结果。Soft Clamp 在 GKD 变体里 irrelevance refusal 最高(83.5%),符合"减少不必要工具调用"的预期。但所有 GKD 变体都没超过 Base SFT 的 84.4%——说明 OPD 本身在 BFCL 上是个负向迁移。(数据来源:论文 Table 4)
When2Call 结果(表 5)则给论文的适用范围划了边:
| 方法 | MCQ Acc | tool_call | request_for_info | cannot_answer |
|---|---|---|---|---|
| Base | 72.8 | 88.1 | 61.6 | 68.1 |
| Base SFT | 71.6 | 88.8 | 63.3 | 63.1 |
| Vanilla GKD | 64.9 | 89.7 | 52.6 | 52.9 |
| Soft Clamp | 65.0 | 89.1 | 57.8 | 49.7 |
表 5:When2Call 结果。所有 GKD 变体的 MCQ 准确率都掉到 65% 左右,明显低于 Base 的 72.8%。request_for_info 和 cannot_answer 这两个"判断不调用"的能力,GKD 反而变差了。(数据来源:论文 Table 5)
作者诚实地承认了:GKD 变体在 When2Call 上整体是负向的。这其实是在提醒读者:Soft Clamp 是 GKD 内部的行为校准方法,不解决"OPD 是否值得做"这个更上层的问题。When2Call 的失败说明 base 模型本身的工具决策能力就很强,强行用 OPD 去"学"反而会学偏。
最有说服力的实验:多轮循环诊断
这是我最看重的实验。多轮场景里,single-turn 的 over-calling 倾向会被放大成循环——一旦模型偏向调工具,多轮里就是"调工具 → 收到观察 → 再调"。
| 方法 | Calls/turn | Loop@3 | Loop@5 | Max-step | Repeat call | Final answer |
|---|---|---|---|---|---|---|
| Base SFT | 0.974 | 5.1 | 0.7 | 0.7 | 2.5 | 96.5 |
| Vanilla GKD | 1.494 | 14.8 | 8.6 | 8.6 | 16.7 | 89.6 |
| Hard Clip | 1.348 | 11.5 | 6.3 | 6.3 | 14.4 | 91.5 |
| Global Reweight | 1.398 | 12.1 | 6.6 | 6.6 | 14.8 | 92.1 |
| Soft Clamp | 1.268 | 10.1 | 4.7 | 4.7 | 11.1 | 94.1 |
表 6:BFCL 多轮循环诊断。Soft Clamp 在 Loop@3(10.1%)、Repeat call(11.1%)、Final answer(94.1%)三个核心指标上都是 GKD 变体最优。(数据来源:论文 Table 6)

图 5:BFCL 多轮循环诊断。Vanilla GKD 蓝柱在 Loop@3(14.8%)和 Repeat same call(16.7%)上都是最高的,Soft Clamp 红柱带星星标记——GKD 变体里表现最好。(图片来源:论文 Figure 6)
这些数字背后是真实的用户体验差异。Loop@3 = 14.8% 意味着每 7 次对话就有 1 次陷入"调三次工具以上"的死循环;Soft Clamp 把它压到 10.1%——不是消灭循环,但确实让循环少了三分之一。Final answer rate 从 89.6% 升到 94.1%,意味着多 4.5% 的对话能正常结束。这个改进幅度对生产环境的 agent 来说是实打实可感知的。
Intervention strength:越多越好吗?
论文还做了一个"插值实验":把 Soft Clamp 的阈值 \(k\) 调高,相当于"压得更狠"。

图 6:干预强度(x 轴是 clamp 阈值 \(k\))vs. APIGen over-calling 的关系。\(k\) 越大压缩越激进,over-calling 越低,但作者明确提醒"不能读作越多越好"——过度的压缩会让极端 token 的学习信号归零。(图片来源:论文 Figure 4)
作者在 Figure 4 caption 里特意写了一句"the result should not be read as 'more compression is always better'"。这是个诚实的提醒:Soft Clamp 不是"调参调到无脑压缩",而是一个平衡点——压太狠会让模型学不到那些"真正难的高杠杆 token",反而欠拟合。
我的判断:这篇论文值不值得读?
亮点
1. 诊断比方法更值钱
Soft Clamp 本身的代码改动确实小到可笑——batch 内求个 mean、设个阈值、乘个 stopgrad 因子就行。但提出"行为杠杆"这个概念、并系统地用 sanity check 排除聚合解释这个诊断过程,才是这篇论文真正的价值。
"多教师 OPD 翻车"是个老问题,之前大家都是"调调 loss 权重试试"或者"换个教师组合试试"。这篇论文告诉你:别只盯着总量,去看信号落点。这个思路可以直接迁移到很多场景——RLHF 的 reward hacking、多任务学习的任务干扰、混合数据 SFT 的能力漂移,本质上都是"信号落点"问题。
2. 多轮诊断的设置很有说服力
很多论文停在"single-turn 指标涨了 X 个点"就完了。这篇专门搭了一个 800 任务、3136 轮的 multi-turn harness,专门去量"循环"、"重复调用"、"能不能给出最终回复"——这些才是用户真正能感知的失败模式。Base SFT 调工具只调 0.97 次/轮,Vanilla GKD 调到 1.49 次/轮,多调的那 0.5 次就藏在 16.7% 的重复调用里。
3. 诚实承认边界
论文没有吹"我们解决了多教师蒸馏的所有问题"。When2Call 上所有 GKD 变体都是负向的,作者直接写"the current GKD variants do not improve all out-of-domain tool-use decisions",并把 Soft Clamp 定位为"GKD 内部行为校准方法",不是"通用工具决策解决方案"。这种分寸感在 AI 论文里挺难得的。
问题
1. 没做多 seed 验证
作者在 Limitations 里坦承:"报告数值为当前训练运行的点估计;多种子研究能更好区分系统性效应与运行间变异。" 这是个实打实的缺口——over-calling 13.7% vs. 9.0% 这个差异,跨 seed 跑一遍是否稳定?论文没给数据。
2. 双教师设定太窄
实验是 "tool-call teacher vs. response teacher" 的二元分工。实际工程里多教师设定比这复杂得多——拒绝 vs. 有用性、代码 vs. 自然语言、短答案 vs. 长推理…… Soft Clamp 在这些更异构的设定下是否依然有效,论文没验证。从原理上讲应该有效(行为杠杆的概念不依赖具体教师类型),但缺数据。
3. SFT anchor = 0.3 是"作弊"吗?
主实验里所有 GKD 变体都加了一个 sft_alpha=0.3 的监督 loss 作为"格式锚"。这意味着 GKD 变体之间的对比是纯 OPD 行为校准的对比,但 GKD 变体和 Base SFT 的对比已经包含格式锚的影响。换句话说,你不能直接说"我们比 Base SFT 好"——APIGen 上的 89.2% vs. 85.3% 包含了 sft_alpha=0.3 的贡献。
作者在 Appendix E 里专门讨论了这点("schema drift 是另一个问题,格式锚是保持 schema 可解析的"),技术上站得住脚,但读者看主表时容易高估 GKD 的实际提升。
4. 阈值 k=3.0 是怎么来的?
主实验固定 \(k=3.0\),没做 \(k\) 的消融(Figure 4 只展示趋势,没列不同 \(k\) 下其他指标的变化)。从 Figure 4 看 \(k=3\) 到 \(k=5\) 还能继续压 over-calling,但其他指标(call recall、format 质量)会不会跌?不知道。
和同期工作的对比
提到多教师 OPD 的稳定性问题,2026 年还有两篇相关工作值得关注:
- Stabilizing On-Policy Distillation for MLLM Reasoning(Hao et al., 2606.09091)——从 MLLM 视角做 OPD 稳定化,用的是"全局归一化",更接近本论文的 Global Reweight baseline
- Entropy-Aware On-Policy Distillation(Jin et al., ICML 2026)——从熵的角度做教师信号平衡
这些工作和 Soft Clamp 的差异在于:它们改的是总账(全局归一化、熵加权),Soft Clamp 改的是局部极端值(per-token 动态阈值)。从行为杠杆的视角看,本论文更精准——它不动普通 token,只针对高杠杆位置可能出现的极端值。
工程启发:怎么把这套思路用到自己的训练里?
如果你也在做 agent 训练,这篇论文至少给你三个具体的启发:
1. 训练完先看"信号落点",再看 loss 曲线
loss 涨了不代表模型学对了,loss 稳不代表模型没问题。把你的决策边界 token 拎出来单独看——比如工具调用场景里的 <tool_call>、分类任务里的标签 token、代码生成里的 import 语句。画一个"step-level 决策压力"曲线,看它和最终指标的对齐关系。如果对不齐,说明你的总账在撒谎。
2. 给极端 token 的 loss 加个动态钳位
Soft Clamp 这个 trick 真的就几行代码——batch 内求 mean,设定阈值,超出部分 forward 钳位 + stopgrad 缩放梯度。即使你没做多教师 OPD,单教师 SFT 里也可能出现类似问题:某些 token 的 loss 异常高(数据噪声、模型不擅长),这些 token 拉爆梯度导致训练不稳。Soft Clamp 的设计哲学("只动极端值,保留梯度方向")可以原样套用。
3. 评估必须覆盖多轮和"用户体验指标"
APIGen 单点准确率从 88.9% 到 89.2%,看起来没涨多少;但多轮循环率从 14.8% 降到 10.1%、重复调用从 16.7% 降到 11.1%,这些才是用户能感知的改进。写评估脚本时,把"对话能不能正常结束"也列为一级指标,比单纯的任务准确率更能反映真实使用体验。
收尾
这篇论文解决的不是"怎么把多教师蒸馏做得更强",而是"为什么多教师蒸馏明明在'工作',行为却在偷偷变差"。答案是行为杠杆——少数高杠杆 token 位置上的极端信号,可以在总账毫无波澜的情况下,把模型推向一个错误的行为模式。
Soft Clamp 的方案非常克制:它不动普通 token、不改教师路由、不需要新的 reward model,只针对极端 per-token divergence 做一次动态压缩,既限制了爆炸,又保留了学习信号。
从这个角度看,它不是一个"突破性方法",但它是一个"工程上立刻能用、且背后有清晰诊断支撑的小修小补"。
如果让我给一个总评:这是一篇被低估的、值得在 agent 训练里立刻落地的工程型工作。 它不会上 leaderboard,但每段实验设计都直击真实痛点,every step 都有清晰的"为什么"。
论文:https://arxiv.org/abs/2607.07050 作者机构:Jiabin Shen, Guang Chen, Chengjun Mao (Ant Group 等) 发表日期:2026 年 7 月 8 日
觉得有启发的话,欢迎点赞、在看、转发。跟进最新 AI 前沿,关注我。