返回首頁

AI 程式代理與強化學習

DiDPO 把程式 diff 拆成信用單元,Qwen2.5-Coder-7B 主要評測平均升至 48.4%

DiDPO 不再把整次代理執行的成敗平均分配給所有 token,而是比對多條軌跡中的相似子 diff。公開的 verl-code 已包含訓練入口與資料配方,但尚無作者模型 checkpoint,實驗也不是完整軟體庫修復。

YSSYguy · CC BY-SA 3.0 · Image source
zh-Hant

現行 RLVR 可用編譯與測試結果為程式代理提供客觀獎勵,但一次編輯常同時修改多個函式或檔案。若把最終成功分數廣播到整條軌跡,修正錯誤的片段與引入無關變更的片段可能收到相同訊號。[DiDPO](https://arxiv.org/abs/2608.07147) 因而把程式變更本身納入信用分配,而非只按照回合或環境狀態分組。

方法先把每次編輯產生的 diff 切成子 diff,再跨同一題的多條 rollout 尋找相似片段作為 anchor。作者設計的 groupability score 在片段語意範圍與可聚合樣本數間取捨,將對齊的子 diff 組成局部比較群,計算 diff-level advantage,最後投影回產生該修改的 token。這個局部訊號再與整條軌跡的 outcome advantage 結合,不需要額外 critic 或增加環境 rollout。

在 Qwen2.5-Coder-7B 上,DiDPO 於論文主要程式生成表的平均分為 48.4%,高於 GRPO 的 42.8%及狀態分組方法 GiGPO 的 44.2%;Qwen3.5-4B 的對應平均為 58.6%,GiGPO 則為 53.7%。訓練採 32 條 rollout、每條最多八個互動步驟;冷啟動資料先由 GPT-5.5 擴增約 7,000 題,再以 Qwen3.6-27B 產生軌跡,篩成約 3,000 條 SFT 樣本。

作者同時開放 Apache-2.0 的 [verl-code](https://github.com/xuc865/verl-code),包含 DiDPO、GRPO、GiGPO、GSPO 與 DAPO 的入口、SFT 資料連結及分析工具。不過儲存庫尚未提供訓練完成的 checkpoint,快速安裝指令仍留有 `<YOUR_REPO_URL>` 佔位字串。更重要的是,實驗主要使用 APPS、HumanEval、MBPP、LiveCodeBench及競賽題;代理動作被限制為 add、delete 或 none,不能直接代表 SWE-bench 類真實儲存庫修復。後續應檢查子 diff 對齊成本、跨檔案重構的穩定性,以及在相同算力下能否獨立重現增益。

來源

  1. DiDPO: Diff-in-Diff Policy Optimization for Coding Agent Training
  2. verl-code: Reinforcement Learning for Multi-turn Coding Agents