大家好,我是 PaperAgent,不是 Agent!
Meta FAIR & Meta TBD Lab & 卡內基等:朝著「超級智慧軟體工程 Agent」邁出了第一步。
SSR(Self-play SWE-RL) 首次讓大模型在「零人類標註」的情況下,僅靠自生成 Bug + 自修復的左右互搏,就能在 SWE-bench 系列 benchmark 上穩定碾壓人類資料基線
為什麼這件事很重要?
Figure 1 展示了 SSR 的核心循環:
> 左:Bug-Injection Agent 生成含測試補丁的「Bug 制品」;右:Bug-Solving Agent 僅透過「測試補丁的逆」作為規格說明進行修復;二者共享同一套 LLM 權重,用 RL 同時更新。
方法精要
3.1 最小假設——「裸倉庫」即可
輸入:一個打好依賴的 Docker 鏡像 不需要現成測試命令、Issue 描述、測試解析器、甚至語言類型標籤 所有測試發現/解析/運行命令,都由 Injection Agent 現場探索出來
3.2 Bug 制品(Artifact)長什麼樣?
bug_inject.diff | |
test_weaken.diff | |
test_script.sh | |
test_parser.py | {test_id: pass/fail} 的 JSON,供 RL 獎勵計算 |
test_files.txt |
Figure 2 給出一個 test_weaken.diff 及其逆補丁——這就是Solver 端唯一收到的「規格說明書」:
3.3 自博弈訓練流程
Injection 角色 策略:程式碼整體刪除 or git history 反 revert 獎勵:r<sub>inject</sub> = ⎩⎨⎧ −1.0 −α 1−(1+α)s 一致性失敗 Bug 不可解(s=0)或太簡單(s=1) 理想難度(0<s<1) 目標:把 solve-rate s 拉到 ~0.2(理論最優見論文 §B)
Solver 角色 只看到「逆測試補丁」+ 報錯倉庫 獎勵:二進位制,全部測試通過 +1,否則 -1 失敗嘗試 → 直接當成高階 Bug餵給下一輪自己,形成「錯題本」
參數共享 + 同時 RL 更新兩個角色梯度一起回傳,讓模型同時學會「造難」和「解難」。
實驗結果
4.1 主結果
Figure 8 顯示在整個 150-step 訓練軌跡上,SSR 穩定自我提升,並全程壓制人類資料基線:
| 35.7 % | ||||
| 32.2 % |
> 註:人類資料 RL = 同款鏡像 + 自然語言 Issue + 人工測試腳本;SSR 完全沒有這些。
4.2 消融實驗
Figure 9 給出三把 ablation 小刀:
Injection-Only 或 Repair-Only 都會掉分 → 必須雙角色一起練 Bug 植入策略: 直接瞎改 → collapse 到一行 trivial 改值 Removal+History 融合 git 反 revert → 最逼真、分最高 Solver 反饋 給 Injection 獎勵帶來的提升微弱;真正關鍵的是線上共同演化的分佈,而不是單點雜訊訊號。
理論洞察: challenger 的「最優解」
論文在 Appendix B 用博弈論證明:
只要 challenger 的動作空間夠大(例如可以改測試),就能構造偽隨機 fail的 dominant strategy,讓 solver 永遠只能達到目標 solve-rate p*≈0.2,無法真正學到修復能力。 緩解方案:把 challenger 錨定在真實、多樣的程式碼庫上,並限制其策略空間不偏離「自然 Bug」——SSR 正是這樣做的。
最後
Self-play SWE-RL 第一次把「左右互搏」從圍棋、象棋搬到真實軟體倉庫,用零標註的方式讓模型自己製造課程、自己攻克難關,並持續拉出學習曲線。雖然離真正的「超級智慧」還有距離,但它給出了可落地的路徑:
> 讓 Agent 在無盡的真實程式碼裡自己「打怪升級」,而不是背誦人類的 Debug 筆記。
https://github.com/facebookresearch/cwmhttps://arxiv.org/pdf/2512.18552Toward Training Superintelligent Software Agents through Self-Play SWE-RL延伸閱讀
動手設計 AI Agents:(編排、記憶、外掛、workflow、協作)
每天一篇大模型 Paper 來鍛鍊我們的思維~已經讀到這了,不妨點個👍、❤️、↗️三連,加個星標⭐,不迷路哦~