NVIDIA 研究人员与普林斯顿大学和马里兰大学合作,提出了 PivotOPD,一种用于多轮 LLM 智能体的同策略蒸馏方法。PivotOPD 同策略蒸馏训练智能体避免其最具破坏性的早期错误,并在错误仍然发生时进行恢复。在 13 个基线对比中,它在 Qwen3-1.7B 和 Qwen3-8B 学生模型的 ALFWorld、WebShop 和基于搜索的 QA 上取得了最佳平均值。结论是:恢复能力是可学习的,而标准 OPD 很少教这一点。

TL;DR

规模:一种训练方法,而非模型。在 Qwen3-1.7B 和 Qwen3-8B 学生模型上测试,另有一个 Nemotron-3.5-SFT 学生模型在 SWE-Bench Verified 上测试。

运行环境:在 NVIDIA H100 节点上训练。增加 0 推理成本,因此训练后的智能体可在其基础模型运行的任何地方运行。

性能:在 13 个基线对比中,3 个随机种子下,全部 8 个逐基准平均值均排名第一。

最佳:从 72.7% 的重放关键错误中恢复,而标准 OPD 为 20.3%。

最差:1.7B 学生模型在 ALFWorld “Look” 任务上为 55.9%,而 SOD 为 83.9%。

底线:最佳:教授仅靠结果奖励的 RL 无法达到的恢复能力。最差:依赖可重放环境,以及其关键点与 oracle 在 77.8% 的失败 rollout 中匹配的教师模型。

多轮智能体中的关键错误是什么?

关键错误是一种会延长完成任务的最短剩余路径,或使任务无法解决的动作。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 很少采样到它。

基于结果强化学习也有同样的盲点:如果每次 rollout 都失败,组相对优势就是 0。

PivotOPD 是如何工作的?

PivotOPD 在基于组的强化学习上增加了 3 个组件,并在单次 PPO 更新中组合。

关键点检测:一个更大的教师模型事后阅读每个 rollout 及其结果。它挑选候选轮次,并为每一轮指定一个黄金动作。当学生的动作与黄金动作不同时,该轮次就被视为关键点。在 ALFWorld 上,检测到的关键点在平均 77.8% 的失败 rollout 中落在 oracle 关键点的 1 轮之内。

预防性蒸馏(反向 KL):学生模型的一个冻结副本在黄金动作提示下,对学生自己的回复重新打分。这推动学生远离已犯下的错误。

恢复蒸馏(前向 KL):在每个关键点之后,教师为最多 K 轮指定一个恢复动作。带提示的自教师写出恢复回复,未带提示的学生在其上训练。前向 KL 是覆盖质量的,因此它能提升学生几乎从不采样的动作。

教师只指定动作。token 级目标来自学生自己的带提示分布。

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 个 oracle 标注的关键错误,每个策略回放 8 次。每个策略最终完成任务的比例是多少?</p>

<div id="mtp-rec"></div>

<p class="muted">恢复所需的平均轮数:PivotOPD 9.7,标准 OPD 12.3,base 13.4,optimal 6.2。</p>

<button class="btn" id="mtp-case">回放案例研究</button>

<div class="case">

<div class="col"><h6>Base 模型</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 中,检测到的关键回合平均有 77.8% 落在 oracle 的 1 个回合以内。',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">黄金动作</span>']},

{h:'2. 预防性蒸馏(反向 KL)',b:'被冻结的学生模型在黄金动作的提示下,成为一个有特权的自我教师。它对学生的实际回答重新打分,从而将概率从错误处移开。权重 w_prev 保持很小(0.001)。',f:['<span class="chip">学生在 t 处的回答</span>','<span class="arr">→</span>','<span class="chip">自我教师 + 提示(黄金动作)</span>','<span class="arr">→</span>','<span class="chip g">反向 KL 更新</span>']},

{h:'3. 恢复蒸馏(前向 KL)',b:'在转折点之后,教师为接下来的 K 个回合中的每一个指定一个恢复动作。带提示的自教师写出恢复响应,无提示的学生在其上训练。前向 KL 是覆盖质量的,因此它会提升学生几乎从不采样的动作。最佳 K:ALFWorld 上为 2,WebShop 和 Search QA 上为 1。',f:['<span class="chip r">错误后状态</span>','<span class="arr">→</span>','<span class="chip">教师:恢复动作</span>','<span class="arr">→</span>','<span class="chip">自教师写出响应</span>','<span class="arr">→</span>','<span class="chip g">前向 KL 更新</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'),[['Teacher',73.0],['PivotOPD',66.0],['Std OPD',63.0],['Student',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],['Prev. only',45.8],['Std OPD',20.3],['Base',8.3]],100);setTimeout(resize,60);}

var CA=[['Turns 1-2: no egg in the fridge',''],['Turn 3: takes tomato from fridge','bad'],['Turn 4: goes to microwave',''],['Turn 5: moves tomato to microwave','bad'],['Turns 6-30: never finds the egg','bad'],['✕ Failure','bad']];

var CB=[['Turns 1-2: no egg in the fridge',''],['Turn 3: takes tomato from fridge','bad'],['Turn 4: recovery begins, goes to table','good'],['Turn 5: sets the tomato aside','good'],['Turn 6: takes egg from table','good'],['Turns 7-11: cools egg, moves it to microwave','good'],['✓ Success','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 与其他智能体蒸馏方法相比如何?

MetricsPivotOPDOPSD (standard OPD)OPIDSDARRLSDCore ideaPrevent and recover at teacher-detected pivotal turnsPrivileged self-teacher on every responseHierarchical skills from on-policy hindsightOPSD as sigmoid-gated auxiliary lossSelf-distillation sets update size, RLVR sets directionTrains on teacher-written recovery responsesYes (forward KL)NoNoNoNoALFWorld avg, Qwen3-1.7B73.712.461.368.260.7Search QA avg, Qwen3-1.7B44.536.837.537.138.6WebShop success, Qwen3-1.7B76.610.168.057.062.5ALFWorld avg, Qwen3-8B93.046.783.783.890.8CodeComing soonGitHubGitHubNot disclosedNot disclosed

分数来源:PivotOPD 表 1。

训练成本是多少,你能运行它吗?

PivotOPD 只改变训练,因此推理不产生额外成本。在 ALFWorld 上使用 1.7B 学生模型、4 张 H100 GPU 时,相比 GRPO 的开销在 K = 1 时为 12.4%。当 K = 2 时,开销跃升至 94.2%,因为后续的恢复轮次需要环境重放。选定的预算为 ALFWorld 上 K = 2,WebShop 和基于 Search 的 QA 上 K = 1。

关键要点

超过一半的失败智能体 rollout 都取决于 1 个早期的、可恢复的错误。

标准 OPD 几乎无法触及这些失败:从 51% 到 49%。

PivotOPD 能从 72.7% 的重放错误中恢复,而 OPD 为 20.3%。

在 ALFWorld、WebShop 和 Search QA 上,对 13 个基线取得最佳平均值。

0 推理开销,但代码尚未发布。

查看论文和项目页面。所有功劳都归功于该项目的研究者。另外,欢迎在 Twitter 上关注我们,别忘了加入我们拥有 150k+ 成员的 ML SubReddit 并订阅我们的 Newsletter。等等!你在 Telegram 上吗?现在你也可以在 Telegram 上加入我们。

[Sponsored] 网络是大多数智能体都缺失的那一个 API。数据库、日历和代码仓库都有 API。开放网络大多没有。TinyFish MCP server 为任何 MCP 客户端提供四个工具:TinySearch、TinyFetch(将完整页面以 markdown 形式获取,包含 JavaScript)、用于登录和表单的 TinyBrowser,以及用于多步骤任务的 TinyAgent。Search 和 Fetch 免费。

The post NVIDIA PivotOPD Teaches Multi-Turn AI Agents to Recover From Pivotal Mistakes appeared first on MarkTechPost。