NVIDIA 研究人员与普林斯顿大学和马里兰大学合作推出了 PivotOPD,这是一种面向多轮 LLM 智能体的在线策略蒸馏方法。PivotOPD 在线策略蒸馏训练智能体避免其最具破坏性的早期错误,并在错误发生时进行恢复。与 13 个基线相比,它在 ALFWorld、WebShop 和基于搜索的问答上为 Qwen3-1.7B 和 Qwen3-8B 学生模型取得了最佳平均成绩。核心结论:恢复能力是可学习的,而标准的 OPD 很少教授它。
TL;DR
- 规模: 这是一种训练方法,而非模型。在 Qwen3-1.7B 和 Qwen3-8B 学生模型以及 SWE-Bench Verified 上的一个 Nemotron-3.5-SFT 学生模型上进行了测试。
- 运行环境: 在 NVIDIA H100 节点上训练。增加 0 推理成本,因此训练后的智能体可以在其基础模型能运行的任何地方运行。
- 性能: 在 3 个种子下,对 13 个基线的全部 8 项各基准平均值均排名第一。
- 最佳: 在重放的关键错误中恢复了 72.7%,而标准 OPD 仅为 20.3%。
- 最差: 1.7B 学生模型在 ALFWorld “Look” 任务上为 55.9%,而 SOD 为 83.9%。
- 结论: 最佳之处:教授了仅基于结果的 RL 无法达到的恢复能力。最差之处:依赖于可重放的环境,以及一个在 77.8% 的失败 rollout 中其关键决策与 oracle 一致的教师模型。
什么是多轮智能体中的关键错误?
关键错误是指延长了完成任务的最短剩余路径、或使任务无法解决的动作。ALFWorld 的符号 oracle 会在每一轮对此进行度量。
在 Qwen3-8B、Qwen3-30B-A3B 和 Qwen3-235B-A22B 中,59% 的失败 rollout(262 个中的 155 个)包含一个关键错误。第一个关键轮次出现得很早,中位数为 30 轮中的第 8 到 12 轮。之后智能体又浪费了 18 到 21 轮而未能恢复。
在 Qwen3-8B 失败案例的重放中,纠正关键轮次使成功率从 8% 提升到 59%。即使保留该错误并在接下来的 2 轮强制采取正确动作,仍能达到 58%。
为什么标准的在线策略蒸馏会错过它?
标准 OPD 将留出集失败率从 79% 降至 56%。关键轮次之后的失败率仅从 51% 降至 49%。正确动作在每一个关键轮次的概率都低于 1%,因此 8 个 rollout 很少采样到它。
基于结果的 RL 也有同样的盲点:如果每个 rollout 都失败,组相对优势为 0。
PivotOPD 是如何工作的?
PivotOPD 在基于组的 RL 中增加了 3 个组件,并在单次 PPO 更新中组合使用。
- 关键错误检测:一个更大的教师模型以事后视角读取每个 rollout 及其结果。它挑选候选轮次并在每个轮次命名一个金标准动作。当学生的动作与金标准动作不同时,该轮次被计为关键轮次。在 ALFWorld 上,检测到的关键轮次平均在 77.8% 的失败 rollout 中落在 oracle 关键轮次的 1 轮以内。
- 预防性蒸馏(反向 KL):学生模型的一个冻结副本在获得金标准动作提示的情况下,对学生自己的响应重新打分。这将学生推离已经犯下的错误。
- 恢复蒸馏(前向KL)::在每次转折之后,教师指定一个恢复动作,最多持续 K 轮。带提示的自教师撰写恢复回复,无提示的学生在其上进行训练。前向KL是覆盖质量的,因此它能提升学生几乎从未采样到的动作。
教师只指定动作。词元级目标来自学生自己的带提示分布。
PivotOPD 在智能体基准上表现如何?
使用 1.7B 学生时,PivotOPD 在 ALFWorld 上平均达到 73.7%,比 SDAR 高 5.5 分。它在基于搜索的问答上平均达到 44.5%,比 RLSD 高 5.9 分。在 WebShop 上,它的分数比 RLSD 高 1.2,但成功率高出 14.1(76.6%)。
使用 8B 学生时,它在 ALFWorld 上达到 93.0%,在基于搜索的问答上达到 47.4%,WebShop 成功率达到 81.9%。差距更小,至少 1.8 分。
以 Qwen3-8B 作为其自身的教师时,PivotOPD 仍然在全部 3 个基准上获胜,至少领先 1.5 分,平均领先 3.9 分。
在 SWE-Bench Verified上,由 Nemotron-3-Super 指导的 Nemotron-3.5-SFT 学生从 62.8% 提升到 66.0%。标准 OPD 达到 63.0%,教师得分为 73.0%。
恢复能力最为突出。在 72 个重放的转折性错误中,PivotOPD 有 72.7% 的时间成功恢复,而基础模型为 8.3%,标准 OPD 为 20.3%,仅预防式为 45.8%。它平均需要 9.7 轮恢复,而最优值为 6.2。
Prev</button><button class="btn" id="mtp-next">Next </button></div> </div> <div class="panel" data-p="2"> <div class="tog" id="mtp-tog"><button class="on" data-m="s">Qwen3-1.7B</button><button data-m="l">Qwen3-8B</button></div> <div id="mtp-bench"></div> <p class="muted">取自论文表1的3个随机种子平均值。与最强基线进行比较。PivotOPD在全部8个基准平均分上对抗13个基线均排名第一。</p> <div class="bench"><h6>SWE-Bench Verified 解决率(Nemotron-3.5-SFT 学生模型)</h6><div id="mtp-swe"></div></div> </div> <div class="panel" data-p="3"> <p>72个人工标注的关键性错误,每个策略各重放8次。各策略仍能完成任务的频率是多少?</p> <div id="mtp-rec"></div> <p class="muted">恢复所需平均轮数:PivotOPD 9.7,标准 OPD 12.3,基础模型 13.4,最优 6.2。</p> <button class="btn" id="mtp-case">重放案例研究</button> <div class="case"> <div class="col"><h6>基础模型</h6><div id="mtp-ca"></div></div> <div class="col"><h6 style="color:#76B900">PivotOPD 模型</h6><div id="mtp-cb"></div></div> </div> </div> <div class="ft"><span>来源:<a href="https://arxiv.org/abs/2609.40285" target="_blank" rel="noopener">arXiv 2609.40285</a></span><b>© Marktechpost</b></div> </div> <script> (function(){ var R=document.getElementById('mtp-pivotopd'); function $(s){return R.querySelector(s);} function $$(s){return R.querySelectorAll(s);} function resize(){try{parent.postMessage({mtpPivotOPDHeight:R.offsetHeight+40},'*');}catch(e){}} var shown={}; $$('.tab').forEach(function(b){b.onclick=function(){ $$('.tab'). forEach(function(x){x.classList.remove('on')});b.classList.add('on'); var p=b.getAttribute('data-p'); $$('.panel').forEach(function(x){x.classList.toggle('on',x.getAttribute('data-p')===p)}); if(p==='2')bench(mode); if(p==='3')rec(); setTimeout(resize,50);}); /* panel 1 */ var T=$('#mtp-turns'),cells=[]; for(var i=1;i<=30;i++){var d=document.createElement('div');d.className='t';d.textContent=i;T.appendChild(d);cells.push(d);} var timer; function play(recover){clearInterval(timer);cells.forEach(function(c){c.className='t'});var k=0; timer=setInterval(function(){var c=cells[k];var n=k+1; if(n<10)c.className='t ok';else if(n===10)c.className='t pv'; else if(recover){c.className=n<=12?'t rc':(n<=16?'t ok':'t');} else c.className='t wa'; k++; if(recover&&n===16){clearInterval(timer);$('#mtp-cap').textContent='犯错后的引导式恢复,随后任务完成。回放显示,在2轮引导下成功率为58%。';} if(k>=30){clearInterval(timer);$('#mtp-cap').textContent='无恢复:剩余的20轮被浪费。真实智能体平均浪费18到21轮。';} },90);} $('#mtp-play1').onclick=function(){play(false)};$('#mtp-play2').onclick=function(){play(true)}; function count(){ $$('.stat b[data-c]').forEach(function(b){var t=+b.getAttribute('data-c'),v=0;var iv=setInterval(function(){v+=2;if(v>=t){v=t;clearInterval(iv);}b.textContent=v+'%';},20);});} /* panel 2 */ var S=[ {h:'1. 转折点检测',b:'一个更大的教师模型在事后审视每条 rollout 及其结果,挑选候选轮次,并指明一个黄金动作。当学生的动作与之不同时,该轮即为关键轮。在失败的 ALFWorld rollout 中,检测到的转折点平均在 oracle 的 1 轮以内,占比达77.8%。',f:['<span class="chip">Rollout + 结果</span>','<span class="arr">→</span>','<span class="chip">教师模型</span>','<span class="arr">→</span>','<span class="chip r">关键轮 t</span>','<span class="chip g">Gold action</span>']}, {h:'2. 预防性蒸馏(反向 KL)',b:'被冻结的学生模型(以金色动作提示)成为拥有特权的自我教师。它对学生实际写出的回答重新打分,从而将概率从错误处移开。权重 w_prev 保持很小(0.001)。',f:['<span class="chip">Student response at t</span>','<span class="arr">→</span>','<span class="chip">Self-teacher + hint(gold)</span>','<span class="arr">→</span>','<span class="chip g">Reverse KL update</span>']}, {h:'3. 恢复蒸馏(前向 KL)',b:'在转折点之后,教师为接下来的 K 个回合各指定一个恢复动作。被提示的自我教师写出恢复回答,未被提示的学生模型在其上训练。前向 KL 是质量覆盖型的,因此它能提升学生几乎从不采样的动作。最佳 K:在 ALFWorld 上为 2,在 WebShop 和 Search QA 上为 1。',f:['<span class="chip r">Post-mistake state</span>','<span class="arr">→</span>','<span class="chip">Teacher: recovery action</span>','<span class="arr">→</span>','<span class="chip">Self-teacher writes response</span>','<span class="arr">→</span>','<span class="chip g">Forward KL update</span>']} ]; var si=0; function step(i){si=(i+3)%3;$$('.step').forEach(function(x){x.classList.toggle('on',+x.getAttribute('data-s')===si)}); var s=S[si];$('#mtp-detail').innerHTML='<h5>'+s.h+'</h5><p style="margin:0">'+s.b+'</p><div class="flow">'+s.f.join('')+'</div>';setTimeout(resize,30);} $$('.step').forEach(function(x){x.onclick=function(){step(+x.getAttribute('data-s'))}}); $('#mtp-prev').onclick=function(){step(si-1)};$('#mtp-next').onclick=function(){step(si+1)};step(0); /* panel 3 */ var B={s:[ ['ALFWorld 平均成功率(%)',[['PivotOPD',73.7],['SDAR',68.2],['OPID',61.3],['RLSD',60.7],['GRPO',42. 7]]], ['基于搜索的QA平均准确率(%)',[['PivotOPD',44.5],['RLSD',38.6],['SOD',38.2],['GRPO',37.7]]], ['WebShop成功率(%)',[['PivotOPD',76.6],['OPID',68.0],['RLSD',62.5],['GRPO',57.0]]]], l:[ ['ALFWorld平均成功率(%)',[['PivotOPD',93.0],['RLSD',90.8],['Skill-SD',88.6],['GRPO',35.3]]], ['基于搜索的QA平均准确率(%)',[['PivotOPD',47.4],['OPID',45.6],['OPSD',43.3],['GRPO',37.5]]], ['WebShop成功率(%)',[['PivotOPD',81.9],['SDAR',79.7],['RLSD',78.9],['GRPO',75.0]]]]}; function bars(el,rows,max){el.innerHTML=rows.map(function(r){return '<div class="row'+(r[0]==='PivotOPD'?' me':'')+'"><span class="lb">'+r[0]+'</span><span class="tr"><span class="bar" data-w="'+(r[1]/max*100)+'"></span></span><span class="v">'+r[1].toFixed(1)+'</span></div>'}).join(''); requestAnimationFrame(function(){setTimeout(function(){el.querySelectorAll('.bar').forEach(function(b){b.style.width=b.getAttribute('data-w')+'%'})},40)});} var mode='s'; function bench(m){mode=m;var W=$('#mtp-bench');W.innerHTML='';B[m].forEach(function(g){var d=document.createElement('div');d.className='bench';d.innerHTML='<h6>'+g[0]+'</h6><div></div>';W.appendChild(d);bars(d.lastChild,g[1],100);}); bars($('#mtp-swe'),[['教师',73.0],['PivotOPD',66.0],['标准OPD',63.0],['学生',62.8]],100);setTimeout(resize,60);} $$('#mtp-tog button').forEach(function(b){b.onclick=function(){$$('#mtp-tog button').forEach(function(x){x.classList.remove('on')});b.classList.add('on');bench(b.getAttribute('data-m'));}}); /* panel 4 */ function rec(){bars($('#mtp-rec'),[['PivotOPD',72.7],['仅前一步',45.8],['标准OPD',20.3],['基线',8.3]],100);setTimeout(resize,60);} var CA=[['第1-2回合:冰箱里没有鸡蛋',''],['第3回合:从冰箱拿西红柿','bad'],['第4回合:走向微波炉',''],['第5回合:把西红柿移到微波炉','bad'],['第6-30回合:始终没找到鸡蛋','bad'],['✕ 失败','bad']]; var CB=[['第1-2回合:冰箱里没有 鸡蛋',''],['第3回合:从冰箱拿西红柿','bad'],['第4回合:开始恢复,走向桌子','good'],['第5回合:把西红柿放到一旁','good'],['第6回合:从桌子上拿鸡蛋','good'],['第7-11回合:冷却鸡蛋,把它移到微波炉','good'],['✓ 成功','good']]; function fill(el,arr){el.innerHTML=arr.map(function(a){return '<div class="ln '+a[1]+'">'+a[0]+'</div>'}).join('');} function caseplay(){fill($('#mtp-ca'),CA);fill($('#mtp-cb'),CB);var a=$$('#mtp-ca .ln'),b=$$('#mtp-cb .ln');var k=0;var iv=setInterval(function(){if(a[k])a[k].classList.add('show');if(b[k])b[k].classList.add('show');k++;if(k>7)clearInterval(iv);},380);setTimeout(resize,60);} $('#mtp-case').onclick=caseplay; fill($('#mtp-ca'),CA);fill($('#mtp-cb'),CB);$$('#mtp-pivotopd .ln').forEach(function(x){x.classList.add('show')}); count(); window.addEventListener('load',resize);window.addEventListener('resize',resize);setTimeout(resize,300); })(); </script> </body></html> ">PivotOPD 与其他智能体蒸馏方法相比表现如何?
| 指标 | PivotOPD | OPSD(标准 OPD) | OPID | SDAR | RLSD |
|---|---|---|---|---|---|
| 核心思想 | 在教师检测到的关键转折处进行预防与恢复 | 在每个响应上使用特权自教师 | 基于策略内事后分析的分层技能 | 将 OPSD 作为经 sigmoid 门控的辅助损失 | 自蒸馏决定更新幅度,RLVR 决定更新方向 |
| 使用教师撰写的恢复响应进行训练 | 是(前向 KL) | 否 | 否 | 否 | 否 |
| ALFWorld 平均值,Qwen3-1.7B | 73.7 | 12.4 | 61.3 | 68.2 | 60.7 |
| 搜索式问答平均值,Qwen3-1.7B | 44.5 | 36.8 | 37.5 | 37.1 | 38.6 |
| WebShop 成功率,Qwen3-1.7B | 76.6 | 10.1 | 68.0 | 57.0 | 62.5 |
| ALFWorld 平均值,Qwen3-8B | 93.0 | 46.7 | 83.7 | 83.8 | 90.8 |
| 代码 | 即将发布 | GitHub | GitHub | 未公开 | 未公开 |
分数来源: PivotOPD 表 1.
训练需要多少成本,你能运行它吗?
PivotOPD 只改变训练过程,因此推理不会带来任何额外开销。在 ALFWorld 上使用 1.7B 学生模型、4 块 H100 GPU 的情况下,当 = 100 时,相对 GRPO 的开销为 12.4%。 K = 1 时,这一开销跳升至 94.2%,而当 K = 2 时跳升到 94.2%,因为后续的恢复轮次需要环境重放。选定的预算在 ALFWorld 上为 K = 2,在 WebShop 和基于搜索的问答上为 K = 1。
关键要点
- 超过一半的失败智能体轨迹取决于 1 个早期、可恢复的错误。
- 标准 OPD 几乎无法改善这些失败:51% 到 49%。
- PivotOPD 能从 72.7% 的重放错误中恢复,而 OPD 仅为 20.3%。
- 在 ALFWorld、WebShop 和 Search QA 上对比 13 个基线取得最佳平均成绩。
- 0 推理开销,但代码尚未发布。
欢迎查看 论文 和 项目页面。所有功劳归于该项目的研究人员。另外,欢迎在 Twitter 上关注我们,别忘了加入我们的 150k+ML SubReddit 并订阅 我们的新闻通讯。等等!你在用 telegram 吗? 现在你也可以在 telegram 上加入我们了。