跳到內容

Technology

新聞|Agent-Reflex:從真實 MCP 工具錯誤挖反省技能,8B agent 噪音下翻車率砍半

人大高瓴與 NUS 的 Agent-Reflex 先從 24,510 筆真實工具錯誤歸納出 8 類故障、注入 557 個 MCP 環境,再從成功與失敗軌跡的對照挖出 1,170 條環境層級的反省技能,經 ReSFT 與 ORPO 兩階段內化進 Qwen3-8B。整理方法、在五個工具基準與 AgentNoiseBench 上的成績、消融結果,以及跟既有反省與環境擴充方法的差別和限制。

AI
Published: at 09:00 AM
編輯本頁下載圖卡

重點

要解決什麼問題

近年的 agent 訓練大多靠擴充環境:合成可執行的工具、資料庫與可驗證的任務,讓模型在大量環境裡練習。論文認為這些環境有一個理想化假設:工具回傳穩定乾淨,使用者很少介入。

實際部署有兩個落差:

  1. 工具回傳有噪音:MCP 服務會逾時、回 500、回權限錯誤。訓練時沒看過這些情況的 agent,不太會偵測失敗、也不太會恢復。
  2. 使用者會中途糾正:agent 偏離意圖時,真實使用者會出手修正推理或動作。現有的使用者模擬器多半用固定模板,糾正指令的類型與互動風格涵蓋有限。

論文的圖 1 顯示,連 GPT-5.2 與 Claude-4.5-Sonnet 在加入使用者噪音或工具噪音後,成功率都明顯下降。

作者把「反省」當成可以學的 meta-skill:先從執行失敗中明確挖出可轉移的恢復規則,再透過可驗證的訓練逐步內化進策略。

第一階段:RSD,從真實錯誤挖技能

RSD(Environment Reflection Skill Discovery)分成建環境、注入故障、挖技能三步。

建環境

故障從哪來

作者強調故障要從觀察到的錯誤歸納,不自己發明。他們在九個公開 agent 基準(MCP-Atlas、τ³-Bench、AutomationBench、OfficeQA Pro、JobBench、Harvey LAB、GDPval、Workspace-Bench、SkillsBench)上重放 agent,記錄每一筆工具回傳:

故障類別佔比典型訊號恢復方式
伺服器/閘道不可用33.6%500/502/503/504有上限的退避重試,達停止條件後換 endpoint
認證/權限17.9%401/403更新憑證、請求授權或往上通報,原樣重試沒用
逾時14.7%timeout先確認狀態有沒有改變,再重試或縮小請求
資源不存在10.5%404核對識別碼,或用搜尋/列表工具找資源
參數/驗證10.2%400/422修正 schema、型別、必填欄位或列舉值後再試
一般執行例外8.3%工具或操作失敗讀回傳內容,選對應的恢復方式,不盲目重複
速率限制4.5%429退避、遵守配額、批次處理或換允許的服務
網路連線0.3%reset/refused當成暫時性基礎設施故障

注入方式:每個工具回傳位置以 p_inj = 0.2 的機率獨立替換成故障。故障類別均勻抽樣,不照實際比例,讓罕見類別也有足夠樣本可以學恢復。乾淨任務要能驗證解法、加了故障的任務要能驗證恢復,才會保留。

挖技能

最後得到 1,170 條反省 meta-skill,以環境為索引。每條技能是結構化紀錄:觸發條件與支持/反駁的證據、診斷出的故障類別、恢復模板(何時重試、換 endpoint、問使用者或中止),以及可逆性與部分生效的標記。

第二階段:ReSFT,把技能變成訓練資料

ReSFT(Reflective Supervised Fine-Tuning)用 Qwen3-8B 自己當產生器,針對錯誤軌跡做三種取樣:

取樣方式從哪裡開始給模型看什麼存進資料時
SR(自我反省)還原到第一個出錯回合前的狀態歷史 + 對應技能拿掉技能文字,學的是從自己的錯誤狀態局部修復
KR(技能恢復)重設回初始狀態,從原任務重來任務 + 對應技能拿掉技能文字,學的是重新規劃整體路線
UR(使用者糾正)還原到出錯回合歷史 + 模擬使用者的糾正訊息保留使用者訊息,技能本身從未進入上下文

幾個細節:

第三階段:ORPO,強化學習加技能引導的蒸餾

ORPO(On-Policy Reflective Policy Optimization)從 ReSFT 的 checkpoint 開始,結合兩個目標。

噪音環境下的 agent RL

反省引導的 on-policy distillation(OPD)

推論時技能提示完全拿掉,部署的模型不需要存取技能庫。

結果

所有訓練方法都從同一個 Qwen3-8B 出發。每個分數是三次獨立執行的平均。

五個長程工具基準

方法VitaBenchτ²-BenchBFCL V4ACEBenchToolSandbox整體
Qwen3-8B11.426.240.454.069.140.2
Reflexion-8B6.834.542.764.075.444.7
NoisyAgent-8B15.342.835.652.071.543.4
EnvScaler-8B15.837.947.672.580.550.9
Agent-World-8B14.554.651.472.075.653.6
Agent-Reflex-8B17.562.152.978.082.558.6
GPT-5.237.780.062.968.073.364.4
Claude-4.5-Sonnet38.084.773.282.085.072.6

ACEBench 的進步主要來自多回合互動:turn-level 準確率 73.3,step-level 跟最強基線同為 85.0。turn-level 要求一個回合裡每次呼叫都正確,對錯誤傳遞比較敏感。

AgentNoiseBench

AgentNoiseBench 在 τ²-Bench 與 VitaBench 的環境上注入工具噪音(錯誤、不完整、誤導、冗餘、錯誤回傳)與使用者噪音(模糊、離題、矛盾、冗餘、試探邊界)。評分用 Stability-Gated Success:整條軌跡沒被噪音帶偏、答案也正確才算成功,碰巧答對不算。作者表示他們的故障分類、注入方式與環境都跟這個基準無關,訓練時沒用到它的任何環境,所以算是分布外測試。

方法ANB-τ² 平均ANB-Vita 平均整體
Qwen3-8B20.24.412.3
EnvScaler-8B27.19.318.2
NoisyAgent-8B37.614.225.9
Agent-Reflex-8B45.912.329.1
GPT-5.266.545.055.8
Claude-4.5-Sonnet61.041.051.0

在 AgentNoiseBench 的細分軸上,把工具端與使用者端合起來算,rollout 被噪音帶偏的比例:

依論文附錄,差距最大的是誤導性回傳與不完整資訊。這兩類回傳格式正常,不會觸發 schema 檢查,只能從內容裡的證據看出問題。使用者端差距最大的是「認知過載」,也就是指令本身有缺陷、需要重新界定需求的情況。

消融

AgentNoiseBench 上每次拿掉一個元件的結果:

版本ANB-τ²ANB-Vita
完整 Agent-Reflex45.912.3
拿掉 SR41.38.9
拿掉 KR42.410.2
拿掉 UR43.010.9
拿掉 OPD43.79.5
只拿掉信心權重44.510.4

拿掉任何一個元件,兩個設定都會退步。SR 影響最大,作者解讀為察覺失敗與局部修復是反省行為的基礎。保留技能庫但拿掉 OPD 也會明顯退步,表示進步來自 token 層級的反省訊號,光讓模型看過技能不夠。

在 100 步 RL、相同任務池與預算下,ORPO 在 BFCL V4、τ²-Bench 與真實噪音上都優於 GRPO、DAPO、REINFORCE++,也優於同樣有 OPD 訊號的 SEED 與 NoisyAgent RL。訓練獎勵曲線上,ORPO 在 GRPO 與 SEED 趨平後還繼續上升。

跟既有方法差在哪

論文把相關工作依「修正訊號放在哪裡」分類:

路線代表方法修正訊號作者指出的不足
推論時反省Reflexion、Self-Refine、ExpeL推論時的自我批評或檢索經驗,不更新參數批評來自原本失敗的同一個策略;工具回傳格式正常但內容錯時,上下文裡沒有東西能反駁原計畫。Reflexion 與 ExpeL 在 VitaBench 上甚至低於原始 backbone
從修正軌跡學Agent-R、ReflectRL、LoongReflect針對單條軌跡合成修正每次修正只貼合產生它的那一回,累積不成跨 episode 可重用的環境知識
噪音環境訓練NoisyAgent混合乾淨與噪音 rollout,只有 episode 層級的純量獎勵只知道這回合比較難,不知道這個失敗該怎麼恢復
環境擴充EnvScaler、Agent-World、AWM、EnvACE增加可解的環境數量驗證器回 0 只說明失敗,沒說是哪一步出錯、該怎麼修

Agent-Reflex 沿用資料庫支撐的可執行環境,把環境裡的失敗轉成監督訊號:在同樣注入的噪音下比較多個模型的成功與失敗,每個環境挖一次技能,存成可重用的環境層級規則,再用 SFT 與 RL 兩階段內化。ORPO 的估計式直接沿用 SEED,作者說它的貢獻在特權上下文裝什麼:既有做法多半用較大的模型或單一 episode 的事後改寫,ORPO 用的是從實際工具故障挖出的環境技能卡。

限制

作者釋出了 ReSFT 與 ORPO 的訓練資料、完整技能庫、Agent-Reflex-8B checkpoint,以及訓練與評測程式碼。

參考資料

註釋

編輯本頁

Podcast

關於語音摘要

此語音摘要由 Google NotebookLM 提供,不完全代表作者本人對文章的理解。