AI修Bug新SOTA:SWE-Bench Lite60.33%修復率,像人一樣能積累經(jīng)驗,中科院軟件所出品
AI學會像人一樣修Bug了!
“這個Bug我上周剛修過”“這個報錯怎么又來了”“新人怎么又在同一個地方踩坑”……
如果你是程序員,是否經(jīng)常遇到這些令人抓狂的場景?
現(xiàn)有的AI修復工具就像“金魚”,只有7秒記憶,每次遇到問題都從零開始。人類工程師最大的優(yōu)勢,恰恰是能從歷史經(jīng)驗中快速找到解決方案。
而現(xiàn)在,這個優(yōu)勢被AI學會了:
ExpeRepair——具有“雙重記憶”的倉庫級缺陷修復系統(tǒng),它通過模擬人類認知的兩種記憶模式:
- 情景記憶:存儲歷史修復案例(如“具體如何修復Sympy項目的安全漏洞”)
- 語義記憶:提煉高階修復策略(如“處理資源泄漏時需同時關閉文件和釋放句柄”)
當遇到新問題時,ExpeRepair會同時喚醒兩種記憶:從情景記憶中調取相似案例作為參考,從語義記憶中提取通用策略指導決策,動態(tài)生成量身定制的修復方案。
在權威評測SWE-Bench Lite上,ExpeRepair以60.33%的修復率登榜首:

這項研究由來自中國科學院軟件研究所的團隊提出,以下是更多細節(jié)。

揭秘ExpeRepair“最強大腦”
1、雙重記憶系統(tǒng):像人類一樣學習
ExpeRepair模擬人腦的兩種記憶模式:
1)情景記憶:
記錄具體的修復案例,存儲完整修復軌跡(問題描述、測試腳本、修復代碼、驗證結果),包含成功和失敗案例,形成正反兩方面經(jīng)驗。
2)語義記憶:
提煉抽象的修復策略,通過LLM自動總結高階經(jīng)驗,例如“處理文件操作時,必須同時考慮權限檢查和資源釋放”。
2、動態(tài)知識更新:越用越聰明
記憶系統(tǒng)會持續(xù)進化:
1)新增:發(fā)現(xiàn)全新問題模式時添加新經(jīng)驗
2)合并:優(yōu)化相似經(jīng)驗的表述
3)淘汰:刪除過時或矛盾的經(jīng)驗
同時,保持記憶庫精煉(不超過15條核心策略)。
3、智能檢索:精準匹配歷史經(jīng)驗
遇到新問題時,像資深工程師一樣“借鑒”歷史解決方案:
1)通過BM25算法快速匹配相似歷史問題
2)提取top-3最相關的修復案例
3)結合抽象策略生成動態(tài)提示
拆解ExpeRepair修復流程
ExpeRepair將復雜的自動程序修復問題分解為三項任務:測試生成、補丁生成和補丁驗證。
它采用兩個智能體,即測試智能體和補丁智能體,通過協(xié)作來處理這些任務,這與人類開發(fā)人員分類和解決軟件問題的方式相似。

測試生成
復現(xiàn)測試對于證明問題的存在以及驗證候選補丁的正確性都至關重要。
現(xiàn)有的方法通常僅根據(jù)問題描述生成復現(xiàn)測試腳本,這存在兩個主要局限性:
(1)由于遺漏依賴項、配置或特定環(huán)境設置,導致執(zhí)行頻繁失??;
(2)問題復現(xiàn)不充分,因為這類腳本往往僅狹隘地針對問題描述中的癥狀,而沒有捕捉更廣泛的故障背景。
ExpeRepair通過使測試智能體能夠基于動態(tài)反饋和從過去修復軌跡中積累的記憶,迭代地生成和優(yōu)化復現(xiàn)測試,來解決這些局限性。
具體而言,智能體首先從情景記憶檢索出最相關的演示案例,這直接解決了局限性(1):當前測試執(zhí)行遇到失?。ɡ?,缺少庫或配置錯誤)時,與相同或類似失敗相關的演示案例提供了過去成功處理這些失敗的具體示例。然后,智能體會從語義記憶中提取所有總結性的自然語言見解,這些見解捕捉了從先前修復中提煉出的可推廣的高級策略。例如:“在測試安全敏感功能時,實施全面的測試用例,驗證對惡意輸入、邊緣情況和潛在攻擊向量的正確處理,確保進行穩(wěn)健的驗證和適當?shù)腻e誤響應”。這些見解通過將智能體的推理擴展到狹隘地復現(xiàn)所述癥狀之外,幫助解決了局限性(2)。
補丁生成
在成功復現(xiàn)問題后,ExpeRepair會啟動補丁生成流程,以生成能夠解決故障同時保留現(xiàn)有功能的候選修復方案。
在生成補丁之前,首先確定問題發(fā)生的位置至關重要,本方案采用了一種分層定位策略:首先根據(jù)問題描述和代碼庫結構識別可疑文件,然后在已識別的文件中定位具體的故障代碼行。
正如先前的研究所指出的,LLM生成的補丁往往不完整,因為修復一個代碼庫級別的問題通常需要協(xié)調代碼多個部分的變更,或者執(zhí)行一系列修改操作。
為解決這一問題,與測試生成過程類似,ExpeRepair會迭代地調用情景記憶和語義記憶,并利用這些記憶來生成和優(yōu)化補丁。補丁智能體會按照測試生成階段相同的流程,檢索相關的演示案例并提取反思性見解。
補丁驗證
當候選補丁成功通過復現(xiàn)測試后,并不會立即被采納為最終補丁。
這是因為團隊通過實證觀察發(fā)現(xiàn),復現(xiàn)腳本通常僅狹隘地聚焦于問題描述中的特定癥狀,這可能導致誤判——即補丁雖能通過有限的測試,卻在更廣泛的場景中失效。為緩解這一問題,ExpeRepair會提示補丁智能體對補丁進行修訂和增強,以解決邊緣情況處理、回歸風險以及是否符合特定語言最佳實踐等問題。
接下來,團隊會通過生成額外的驗證測試來擴充復現(xiàn)測試套件。測試智能體會被要求創(chuàng)建針對邊界條件和極端情況的測試。這一過程能夠降低那種僅解決報告的表面癥狀、卻未全面處理潛在缺陷的狹隘且脆弱的修復方案出現(xiàn)的風險。
在選擇最終補丁時,ExpeRepair首先會讓所有候選補丁在包含復現(xiàn)測試和驗證測試的擴展測試套件中執(zhí)行。然后,將候選補丁及其相應的測試結果提交給專門的評審智能體,該智能體會根據(jù)正確性、是否符合最佳實踐等標準來選擇最終的補丁。
實戰(zhàn)效果
以下是部分實驗結果。
在SWE-Bench Lite上,ExpeRepair采用Claude-3.5 Sonnet + o4-mini能夠取得48.3%的修復通過率,超越采用同類模型的其他方法。
采用Claude-4+o4-mini能夠取得60.3%的修復通過率,位于SWE-Bench Lite榜首。

實驗還表明,不管將情景記憶還是語義記憶去掉,都會帶來顯著的性能下降。

論文:https://arxiv.org/abs/2506.10484代碼:https://github.com/ExpeRepair/ExpeRepair































