再看SWE-Bench:論一個好的benchmark是如何推動2025 Agentic編程范式的發展
今天繼續來看下經典的code benchmark之SWE-BENCH的細節, 其由普林斯頓大學和芝加哥大學聯合發表于ICLR 2024,Title: SWE-bench: CAN LANGUAGE MODELS RESOLVE REAL-WORLD GITHUB ISSUES? (SWE-bench:語言模型能解決真實的GitHub問題嗎?)。
這篇文章旨在解決當前語言模型(LMs)在代碼生成領域評估基準過于簡單、無法反映真實世界軟件工程復雜性的問題。為此,作者們提出了一個全新的、極具挑戰性的評估框架——SWE-bench。該框架包含從12個流行的Python項目中提取的2294個真實軟件工程問題(GitHub Issues)。任務要求語言模型在給定一個完整代碼庫和問題描述的情況下,通過編輯代碼來解決問題。
該方法的核心在于其高度的真實性和挑戰性。解決SWE-bench中的問題通常需要模型:
1.理解和協調跨多個文件、類和函數的代碼變更。
2.與執行環境交互。
3.處理超長上下文信息并進行復雜推理。
評估結果顯示,即便是最先進的專有模型(如Claude 2)和經過專門微調的開源模型(SWE-Llama),也只能解決極少數最簡單的問題,最佳模型的解決率僅為1.96%。這表明,當前的語言模型距離成為能夠自主解決實際軟件工程問題的智能體還有很長的路要走。SWE-bench為評估和推動下一代更實用、更智能、更自主的語言模型指明了方向。
一、概述
?Title:SWE-bench: CAN LANGUAGE MODELS RESOLVE REAL-WORLD GITHUB ISSUES?
?URL:?? https://arxiv.org/abs/2310.06770??
?Authors:Carlos E. Jimenez, John Yang, Alexander Wettig, Shunyu Yao, Kexin Pei, Ofir Press, Karthik Narasimhan
?Institutions:普林斯頓大學 (Princeton University), 芝加哥大學 (University of Chicago)
?Code:?? https://swebench.com??
1.Motivation
?現有編程基準例如HumanEval也被刷飽和了:當前流行的代碼生成基準(如HumanEval)大多包含自足的、可以通過幾行代碼解決的問題。這些基準已經飽和,無法有效地區分最先進模型的能力邊界。
?沒有衡量真實軟件工程開發的benchmark:真實的軟件工程任務,如修復一個bug或添加一個新功能,遠比生成一個獨立函數復雜。它需要開發者在龐大的代碼庫中導航,理解不同模塊間的依賴關系,并進行跨文件的修改?,F有基準未能評估模型在這方面的能力。
?代碼編程領域需要更具挑戰性的benchmark:為了推動語言模型在代碼領域的發展,迫切需要一個能夠準確反映其在真實世界應用中能力的挑戰性基準,從而指導未來的研發方向。
2.Methods
論文的核心方法是構建了一個名為SWE-bench的基準測試集,并在此之上評估現有語言模型。構建過程分為三步:數據抓取、屬性篩選和執行驗證,以確保每個任務都是真實、高質量且可驗證的。評估時,模型接收一個GitHub issue和完整的代碼庫作為輸入,任務是生成一個Patch文件(patch)來解決該issue。如果生成的Patch能成功應用并通過所有相關單元測試,則認為任務解決成功。

詳細方法和步驟:
1)基準構建 (Benchmark Construction): 論文提出了一個三階段的流水線來從GitHub上大規模地篩選和構建高質量的任務實例。

image-20250916150618295
?階段一:倉庫選擇和數據抓取 (Repo selection and data scraping):從12個流行的開源Python倉庫(如django, scikit-learn, matplotlib等)中收集了約9萬個拉取請求(Pull Requests, PRs)。選擇流行倉庫是因為它們通常有更好的維護、更清晰的貢獻指南和更全面的測試覆蓋。
?階段二:基于屬性的過濾 (Attribute-based filtering):從抓取的PRs中篩選出滿足以下條件的候選任務:(1) PR是已合并(merged)狀態,表明其解決方案被接受;(2) PR明確地解決了一個或多個GitHub issue;(3) PR對測試文件進行了修改,這通常意味著貢獻者添加了新的測試來驗證問題是否被修復。
?階段三:基于執行的過濾 (Execution-based filtering):對每個候選任務進行嚴格的執行驗證。(1) 驗證代碼庫可以成功安裝;(2) 驗證在應用PRPatch前后,至少有一個測試用例的狀態從失?。╢ail)變為通過(pass)。這一步過濾掉了那些不重要或無法驗證的解決方案,最終得到了2294個高質量的任務實例。
2)任務形式與評估 (Task Formulation and Evaluation):
?模型輸入:一個GitHub issue的文本描述和一個完整的代碼庫快照。
?模型輸出:一個標準的Patch文件(??.patch??格式),描述了為解決問題需要對代碼庫進行的修改。
?評估指標:最終的衡量標準是解決率(Resolution Rate),即成功解決的任務實例所占的百分比。一個任務被視為“成功解決”需要滿足兩個條件:(1) 模型生成的Patch可以無誤地應用到代碼庫中;(2) 應用Patch后,所有相關的單元測試都能通過。
3)SWE-Llama 微調模型: 由于現有模型在處理長上下文和遵循復雜指令方面表現不佳,作者們還微調了CodeLlama模型。
?訓練數據:從另外37個Python倉庫中收集了約19000個issue-PR對作為訓練數據,這些倉庫與評估集中的倉庫沒有交集,以避免數據污染。
?微調方法:使用LoRA技術對CodeLlama-Python的7B和13B版本進行監督微調,使其學會根據issue和相關代碼文件生成對應的“Gold Patch”(gold patch)。
3.Conclusion
?現有LLM在解決真實世界開發任務能力嚴重不足:即使是目前最強大的語言模型(SOTA LMs),在處理真實世界的軟件工程任務時也表現極差。表現最好的Claude 2模型,在使用BM25檢索器提供相關文件的情況下,也僅能解決1.96%的問題。

?SWE-bench是一個有效的“試金石”:該基準成功地揭示了當前模型在復雜推理、長上下文理解和代碼庫級操作方面的巨大差距,為未來的研究設立了一個清晰且具有挑戰性的目標。
?真實世界任務的復雜性被低估:解決這些問題不僅需要代碼生成,還需要代碼定位、理解依賴關系和遵循現有代碼風格等高級技能,這些都是當前模型所欠缺的。
4.Limitation
?目前只有python項目:目前SWE-bench中的所有任務都來自于Python項目。雖然收集流程可以擴展到其他語言,但這需要額外的工作。
?評估只看單元測試,沒看效率和規范等:評估完全依賴于已有的單元測試是否通過。這無法保證模型生成的代碼是高效、可讀或符合項目編碼規范的,也可能存在無法被現有測試捕獲的潛在問題。
?baseline方法比較簡單,沒有agent方法來評估:論文中的實驗主要采用了相對簡單的檢索方法(BM25和Oracle)來為模型提供上下文。未來可以探索更復雜的、基于智能體(agent-based)的交互式方法,但這超出了本文基線評估的范圍。
二、詳細內容
1.SWE-bench任務在不同倉庫的分布

image-20250916150923806
?總結:任務分布廣泛,其中??django??? (850個)、??sympy??? (386個) 和??scikit-learn?? (229個) 貢獻了最多的任務實例,體現了基準的多樣性。
2.SWE-bench任務實例的統計特征

?總結1:任務的上下文非常龐大(平均代碼庫有438K行代碼,3010個文件)。
?總結2:修改的代碼量相對較?。ㄆ骄庉?2.8行,1.7個文件),需要在真實軟件開發過程 中進行“大海撈針”。
3.不同模型在各倉庫上的解決率對比

image-20250916151010243
?總結:所有模型在各個倉庫上的表現趨勢相似,解決率普遍很低。這表明任務的難度是普遍存在的,并非特定于某個倉庫。有趣的是,不同模型解決的問題集合不完全重疊,說明它們的能力有所差異。
4.Claude 2性能與上下文長度的關系

image-20250916151125521
?總結:隨著輸入上下文(代碼文件)的總長度增加,模型的性能顯著下降。這印證了“大海撈針”問題,即在大量無關上下文中定位和修改代碼對模型來說極其困難。
5.任務實例、模型預測與測試結果示例

image-20250916151216411
?說明:給了一個包括模型輸入(指令、issue、代碼)、Gold Patch、模型生成的Patch以及最終的測試結果樣例。
三、總結
總結1: 開創了coding評估的新范式(真實軟件開發任務): SWE-bench成功地將代碼模型的評估從“算法問題求解”提升到了 “真實世界軟件工程問題解決”的層面 。它不再是簡單的代碼生成,而是包含了代碼理解、定位、修改和驗證的完整閉環,極大地提升了評估的真實性和挑戰性。
總結2: 構建了可持續、抗飽和的基準: 其自動化的數據收集和驗證流程,使得SWE-bench可以輕松地從任何git倉庫中持續吸收新的問題補充進來,有效避免了像其他基準一樣快速飽和或被模型訓練數據污染的問題。
總結3: 清晰地揭示了當前AI coding能力的邊界: 指出了當前最先進的語言模型在自主軟件工程方面的嚴重不足,為社區提供了明確的研究方向,即如何提升模型在超長上下文處理、復雜邏輯推理和與工具交互方面的能力。
產業應用價值:
?推動Agentic AI在軟件工程領域的發展:SWE-bench的復雜性天然適合作為AI Agent的試驗場。解決這些問題需要模型規劃步驟、使用工具(如搜索、測試框架)、并根據反饋進行迭代,這正是AI Agent的核心能力?,F在從2025年9月回過頭來看,GPT-5-Codex在SWE-bench都刷到72.8%了,該bench還是顯著的推動了ai coding的發展,特別是推動了Agentic方法在編程任務上的進展。
本文轉載自??NLP PaperWeekly??,作者:NLP PaperWeekly

















