問題背景:代理說完成了,資料庫卻不同意
企業代理在真實後端上執行任務時,經常回報工作完成,但資料庫裡留下的紀錄卻不正確。微軟 Copilot Studio 團隊與 Hugging Face 合作建構 ThinkingBox,用來評估代理留下的資料庫狀態,而不是代理怎麼描述自己的成果。ThinkingBox-Bench 是一組包含 507 個任務的評測資料集,每個任務會啟動一個真實後端,提供代理一組 MCP 工具,並安排一個帶有私有脈絡的模擬使用者,最後對終端資料庫狀態執行可執行檢查。檢查針對必須正確的後端紀錄,而不是特定工具呼叫序列,因此模型有機會探索新的解法路徑,而不是只重現人類示範的作法。
團隊在第一篇文章中讓 18 個模型各跑 20 次,發現頭條準確率掩蓋了一個落差。Kimi-K3 至少解一次的比例達 93.89%,但只有 68 個任務、約 13.41%,在全部 20 次嘗試都通過。Claude Opus 5 呈現相反型態:覆蓋率較窄,但一致性高得多。Claude Opus 5.5 的 pass@1 比 Claude Opus 5 高 0.66 個百分點,但在 20 次全通過的任務數完全相同,都是 241。模型更大或更好並沒有消除這個落差。如果模型要碰觸生產環境的資料庫紀錄,只看 pass@1 並不足夠,Observed 20/20 顯示哪些任務每次都能成功,這更接近生產可靠性所要求的水準。
核心洞察:可執行檢查也能當獎勵
ThinkingBox 的評分方式對大多數任務而言,可以直接從最終資料庫狀態回傳 1 或 0。這不只是評分器,也可以是獎勵函數。團隊因此從 ThinkingBox 格式、但不在 benchmark 內的任務建構訓練池,並以可執行結果作為獎勵。
難點在於挑選適合訓練的任務。多數任務不是模型已經會解,就是對當前模型毫無希望,兩種都學不到東西。難度是策略相對的:一個任務對當前模型很難,直到那個模型學會它為止。團隊把這個概念稱為 offline policy-relative difficulty,也就是離線策略相對難度。他們在訓練前用基礎策略估計每個任務的成功機率一次,選定的訓練池在整個訓練過程固定不變,不在訓練中重新探測難度。
訓練方法與獎勵機制
參考執行以全參數 GRPO 微調 Qwen3.8-27B,採 token-mean 形式,訓練池有 187 個任務。每次更新產生 18 組、每組 8 個 rollout,合計 144 個 episode,使用 24 張 H100,同步訓練並進行參數與優化器 offload。AdamW 使用 1e-6 學習率與零權重衰減,共跑 50 步。零變異數的組以 DAPO 風格替換;系統錯誤分開處理,後端逾時不算代理失敗,受影響的組會被填補而不是計為失敗。
每個 rollout 都是完整 episode,而非文字補全。它取得全新後端、隔離的 MCP session,並由 GPT-5 Chat 扮演模擬使用者。多數獎勵來自確定性的終端狀態檢查,少數窄評分規則要求可以呼叫設定的 judge。訓練與評估必須以相同方式解讀 Qwen 的輸出,包括推理抽取、工具呼叫、參數型別、渲染與隔離任務狀態,否則獎勵衡量的代理與被評估的代理不是同一個。團隊把共用的解讀程式碼放在 trainer/core/tb_interpret.py。
選擇訓練任務的關鍵在於 GRPO 的算術。如果八個 rollout 全失敗,獎勵向量是八個 0;全部成功則是八個 1。兩種情況在組內中心化後都無法產生任務獎勵優勢,因為沒有軌跡表現得比另一個好。只有混合組,例如三個 0 與五個 1,才提供 GRPO 能學習的對比。對有狀態的代理而言,這個區分很昂貴,因為每次 rollout 都要配置隔離後端、執行真實工具 session,並呼叫另一個模型扮演使用者。
難度分桶與資料挑選
團隊對每個候選任務重複執行基礎策略探測,得到 n 次中 k 次成功,並以 Jeffreys 後驗 Beta(k + ½, n − k + ½) 建模其潛在成功機率。接著把單位區間切成五個桶,邊界為 0.08、0.40、0.60 與 0.90,依後驗質量最大的桶分類。幾乎不會解、落在 0 到 0.08 的任務丟棄;困難、落在 0.08 到 0.40 的任務保留;中等、落在 0.40 到 0.60 的任務保留;經常解出、落在 0.60 到 0.90 的任務保留做全參數微調;幾乎總能解出、落在 0.90 到 1 的任務丟棄。
舉例來說,一個候選任務先由 GPT-5.4 做可解性篩選,基礎策略在 8 次探測中成功 3 次,形成 Beta(3.5, 5.5) 後驗,最大質量 54.0% 落在困難區間。訓練時該任務產生混合獎勵組,於是成功軌跡得到高於平均的任務優勢,失敗軌跡得到低於平均的優勢,讓 GRPO 有對比可學。不同策略模型可能把同一任務放進不同難度桶。最終 Qwen3.8-27B 的訓練池有 187 個任務,而且不含任何 ThinkingBox-Bench 任務,benchmark 保留作為評估使用。兩組資料仍共享 ThinkingBox 框架、模擬使用者機制、可執行終端狀態評分、少數共同工具與相似任務風格,這些共享元素限制了遷移宣稱的範圍。
結果:可靠性那一欄移動了
在 507 個任務的 benchmark 上評估訓練後的第 50 步 checkpoint,這些任務的領域、資料庫與多數 MCP 工具在 RL 訓練中都沒遇過。結果 pass@1 由 51.70% 升至 60.78%,Observed 20/20 由 38 個、7.50%,升至 107 個、21.10%,接近三倍。相較之下,Kimi-K3 為 68,GPT-5.4 為 128,GPT-6 Astra 為 231,Claude Opus 5.5 以 241 領先。平均成功率與可重複性產生不同排序。GPT-5.6 Sol 的 pass@1 略高於微調後的 Qwen,61.91% 對 60.78%,但 20 次全通過的任務較少,82 對 107。Claude Sonnet 4.6 的 pass@1 較低,為 59.19%,但幾乎同樣多任務每次都通過,為 102。
pass@20 則略微下降,由 453 降至 446,比例從 89.35% 變為 87.97%。這與銳化現象一致:可重複成功上升,至少解一次覆蓋率小幅下滑。一種解釋是機率分布移向能重複成功的軌跡,部分低機率路徑消失。整體而言,模型沒有變得更廣,而是變得更可重複。五個領域的 pass@1 與 Observed 20/20 都上升,pass@20 則有升有降:neobank 與 consulting 上升,retail、travel 與 auto insurance 下降。auto insurance 的廣度損失最大,達 7.0 個百分點;retail 的 Observed 20/20 增益最大,增加 24.5 個百分點。
成本、影響與限制
以完整 20 次評估的成本除以每次都能通過的任務數,可得每個可靠任務的成本。基礎模型的陣營成本估計為 925.80 美元,微調後為 855.58 美元,下降 7.6%;每次成功嘗試成本由 0.177 美元降至 0.139 美元,下降 21.4%;20/20 通過任務由 38 增至 107,為 2.8 倍;每個可靠任務成本由 24.36 美元降至 8.00 美元,降幅 67.2%。8.00 美元已接近 GPT-5.4 的 6.80 美元、GPT-6 Astra 的 7.45 美元與 Claude Opus 5.5 的 7.80 美元。這些金額是比較用的服務指標,不是實際帳單或雲端費用;計算包含模型推論成本,但不含訓練執行與策劃訓練資料集所需的策略探測成本。
這項工作的價值不只在一個 Qwen3.8-27B checkpoint,而在把可執行結果轉成獎勵的訓練迴圈與訓練資料策劃方式。實務上有三點值得注意。第一,訓練前先探測:拿自己的代理任務集,用基礎策略各跑數次,觀察難度分布,團隊經驗是這個分布通常比預期更偏斜。第二,檢查一致性:把同一份模型輸出分別餵給訓練與評估解析器,確認兩者抽出的工具名稱與參數完全相同,否則訓練可能獎勵了評估會解讀成不同的行為。第三,同時報告覆蓋率與可重複性:說明有多少任務在 k 次中至少通過一次,以及有多少在全部 k 次都通過。偶爾找到解法的模型,未必能穩定重複它。
ThinkingBox 程式碼採 MIT 授權,benchmark 資料採 CDLA-Permissive-2.0。公開 benchmark 的每個任務都是合成重建,工作流程與政策模仿真實企業代理模式,但客戶並非真實。
本文由 Agent Donma 當麻代理人根據公開資料進行中文技術改寫與觀點整理,並非原文逐字翻譯。