博客 / 詳情

返回

SWE-smith規模化生成軟件工程訓練數據

image

1. 破解軟件工程領域AI的數據瓶頸

     近年來,大型語言模型(LM)Agent在自動化軟件工程(Software Engineering, SE)任務方面取得了顯著進展。然而,在能力飛速提升的背後,開源社區與掌握海量私有數據的專有模型之間正形成一道日益擴大的鴻溝。其核心癥結在於:高質量、大規模訓練數據的嚴重稀缺已成為制約開源模型發展的根本瓶頸。為了確保開放研究在這一關鍵領域保持競爭力,我們必須建立一種能夠 democratize(大眾化)數據生產的基礎設施。

     當前的數據收集方法在可擴展性上存在顯著侷限。以權威基準測試SWE-bench為例,雖然其提供的數據質量極高,但其生成過程卻難以規模化。這些數據集的實例規模最多僅為數千個,且通常來源於十餘個代碼庫,策展過程需要數百小時的人力投入,並且其配套的執行環境佔用了數TB的存儲空間。這些高昂的成本使得遵循其模式來創建大規模訓練集變得不切實際。另一方面,直接從GitHub抓取數據雖能獲得海量實例,但這些數據缺乏執行環境和可靠的測試驗證,導致模型無法進行真正基於執行結果的深度學習。

image

     為了突破這一困境,我們引入了SWE-smith——一個旨在從根本上解決數據瓶頸的創新性解決方案。SWE-smith提出了一套全新的、可擴展的流程,能夠為任意Python代碼庫自動合成成千上萬個高質量的訓練任務實例。將深入探討SWE-smith的架構、核心方法論及其對軟件工程AI領域的深遠影響。為了真正釋放開源軟件工程代理的潛力,我們必須採用一種全新的、可擴展的數據生成範式,而SWE-smith正是這一範式的具體實現。

SWEsmithLandsacpe

2. SWE-smith概述:一種“環境優先”的可擴展新範式

    SWE-smith的核心思想是通過顛覆傳統的數據收集流程來實現大規模擴展。它將數據生成過程從“先找任務,後配環境”逆轉為“先建環境,後造任務”,從而在效率、成本和規模上實現了數量級的突破。

核心理念對比

為了更清晰地理解這一範式轉移,下表對比了傳統方法與SWE-smith的根本差異:

SWE-bench 傳統方法

SWE-smith 創新範式

任務優先,環境在後

環境優先,任務在後

首先從GitHub的拉取請求(PRs)中篩選出符合條件的任務實例,然後為每一個獨立的任務實例構建其特定的歷史版本執行環境。這一流程導致每個任務都需要一個獨立的Docker鏡像,造成了巨大的存儲開銷和人力成本,難以擴展。

首先為整個代碼庫的最新版本構建一個統一、穩定、可共享的執行環境(Docker鏡像)。然後,在這個標準化的環境中,通過自動化技術合成成百上千個任務實例。這一流程從根本上解決了存儲和人力瓶頸。

image

image


工作流程圖解

SWE-smith通過一個高度自動化的流水線,將一個GitHub代碼庫轉化為海量的訓練數據。其完整工作流程可分為以下五個關鍵步驟:

1. 環境構建: 首先,系統接收一個GitHub代碼庫。利用SWE-agent這一自動化代理,系統在100步內自動嘗試安裝代碼庫依賴並運行其測試套件。隨後,僅需開發者進行約7分鐘的輕量級人工核實,確認安裝與測試指令無誤後,即可創建一個標準化的、可供後續所有任務共享的Docker鏡像環境。

2. 任務合成: 在構建好的統一環境中,SWE-smith運用多種“故障注入”策略,向代碼庫中引入潛在的錯誤。這些策略包括利用LM生成修改、進行程序化的代碼修改等,從而創造出大量能夠導致現有測試失敗的任務實例候選項。

3. 驗證與篩選: 系統對每一個任務候選項應用補丁,並運行完整的測試套件。只有那些能夠穩定復現“失敗-通過”(Fail-to-Pass, F2P)測試場景的候選項——即導致至少一個原本通過的測試變為失敗——才會被篩選保留,成為一個有效的任務實例。

4. 問題陳述生成: 對於每一個通過驗證的有效任務,系統利用LM自動生成一個逼真的、模擬真實GitHub Issue風格的問題描述。這使得合成的任務在形式上與真實世界的軟件工程挑戰高度一致。

5. 訓練數據生成: 最後,使用一個專家模型(如Claude 3.7 Sonnet)在SWE-agent系統中解決這些合成的任務。系統會記錄下專家模型解決問題的完整操作序列,即“專家軌跡”(expert trajectories),這些軌跡最終構成了用於微調學生模型的高質量訓練數據。

image

通過這一範式的轉變,SWE-smith為其在數據生成規模、成本控制和執行效率上的巨大優勢奠定了堅實的基礎。接下來,我們將深入剖析其各個核心技術組件。

Docker鏡像

docker pull registry.cn-hangzhou.aliyuncs.com/megadotnet/jyangballin.swesmith.x86_64 && docker tag registry.cn-hangzhou.aliyuncs.com/megadotnet/jyangballin.swesmith.x86_64 jyangballin/swesmith.x86_64

3. 核心架構與工作流程詳解

本章節將逐一剖析SWE-smith流水線的關鍵技術環節,從可擴展環境的創建到多樣化任務的合成,再到最終訓練數據的生成,詳細闡述其實現細節與設計考量。

image

3.1. 環境構建:奠定可擴展性的基石

SWE-smith的可擴展性始於其創新的環境構建流程。該流程的核心是**“一次構建,處處複用”**。

具體而言,對於一個給定的GitHub代碼庫,系統首先利用SWE-agent代理,在不超過100個操作步驟的限制內,自動探索並執行安裝依賴和運行測試套件所需的一系列指令。這個自動化過程極大地減少了人工介入的需要。

隨後,開發者僅需進行一個極其輕量化的驗證環節。通過檢查SWE-agent的執行軌跡,開發者花費大約7分鐘即可核實正確的安裝與測試指令。確認無誤後,一個包含完整開發環境和測試套件的標準化Docker鏡像便被創建出來。這一模式的戰略價值在於,它徹底摒棄了傳統方法中為每個任務實例創建獨立環境的低效做法。通過為每個代碼庫創建一個統一的、共享的執行環境,SWE-smith不僅將人力成本降至最低,更關鍵的是,它極大地壓縮了存儲開銷,為後續生成成千上萬個任務實例鋪平了道路。

image

3.2. 任務實例合成:多樣化的“故障注入”策略

在統一的環境中,SWE-smith採用四種互補的核心策略來自動合成任務實例,即向健康的代碼庫中“注入故障”。這些策略確保了生成任務的多樣性和真實性。

LM生成 (LM Generation)

該策略利用大型語言模型(LM)的編程能力來創造微妙且符合邏輯的錯誤。

LM修改 (LM Modify): 向LM提供一個代碼庫中現有的函數,並明確提示其引入一個會導致邏輯錯誤的細微修改。例如,改變計算順序、錯誤處理邊界條件或調整循環判斷符。

LM重寫 (LM Rewrite): 僅向LM提供函數的頭部定義(簽名)和文檔字符串(docstring),要求其從零開始重新實現該函數。在這個過程中,LM可能會自然地引入與原始實現不完全一致的邏輯,從而產生潛在的錯誤。

程序化修改 (Procedural Modification)

這是一種完全自動化且零成本的故障注入方法,通過直接操作代碼的抽象語法樹(Abstract Syntax Tree, AST)來引入錯誤。這種方法可以精確地進行多種可控的轉換,具體示例包括:

• 移除一個if條件判斷或一個for/while循環。

• 將一個二元運算符(如 +)更改為另一個(如 -)。

• 交換if/else語句塊中的執行邏輯。

• 移除一個變量賦值語句等十餘種轉換。

組合故障 (Combine Bugs)

該策略旨在創建更復雜的任務,這些任務通常需要編輯代碼庫的多個部分才能解決。它通過聚合來自同一文件或同一模塊的多個單一故障候選項來實現。例如,將兩個獨立的、由LM生成或程序化修改產生的函數級錯誤組合成一個單一的、更具挑戰性的任務實例。

反轉PR (Invert PRs / PR Mirror)

此策略旨在模擬真實世界中的軟件迴歸問題,即過去修復的漏洞再次出現。其工作原理如下:

1. 系統向LM提供一個已經合併到代碼庫中的拉取請求(PR)的代碼變更(.diff文件)。

2. LM的任務是在代碼庫的當前最新版本中,智能地“撤銷”這些變更,相當於將修復補丁反向應用。

image

值得強調的是,與SWE-bench檢出舊版commit的做法不同,SWE-smith的“PR鏡像”策略始終在統一的、最新的執行環境中操作。這確保了所有合成的任務都與標準化的Docker環境完全兼容,從而維持了整個流程的可擴展性。

3.3. 基於執行的驗證:確保任務的有效性

image

任務合成僅僅是第一步,確保這些合成的“故障”是有效且可復現的至關重要。為此,SWE-smith引入了嚴格的基於執行的驗證流程。

對於每一個由上述策略生成的候選補丁,系統會自動將其應用到代碼庫中,並運行完整的測試套件。只有滿足以下條件的補丁才會被保留為有效的任務實例:

必須導致至少一個原本能夠通過的測試失敗。 這種“通過到失敗”(Pass-to-Fail)的轉變被記錄為“Fail-to-Pass”(F2P)測試。

這個驗證步驟確保了每個生成的任務都有一個明確、可衡量的“失敗”狀態,為後續AI代理的解決過程提供了清晰的目標。為了保證整個數據生成流水線的高效運轉,單個測試套件的執行時長被限制在兩分鐘以內,超時將被視為無效候選項。

3.4. 問題陳述生成:模擬真實世界場景

image

一個高質量的訓練實例不僅需要可執行的代碼故障,還需要一個模擬真實場景的問題描述。SWE-smith通過一個巧妙的LM調用流程,為每個合成的故障自動生成高質量、類似真人編寫的GitHub Issue。

該流程向LM提供了三項關鍵輸入信息:

1. 故障補丁(.diff): 描述了引入錯誤的代碼變更。

2. 一個隨機F2P測試的源代碼: 提供了一個具體的失敗場景。

3. 測試執行輸出: 應用故障補丁後,運行測試時產生的錯誤日誌和堆棧跟蹤。

基於這些信息,LM被要求生成一份包含復現代碼的、風格自然的GitHub Issue文本。這使得訓練數據不僅在技術上有效,在交互形式上也高度逼近軟件工程師在實際工作中遇到的場景。

以上四個環節構成了一個高效、自動化的數據生產線。這條生產線所產出的數據在規模、效率和最終應用效果上均取得了卓越的成果,我們將在下一章節中詳細展示。

4. 成果與影響:數據規模、效率與模型性能

SWE-smith不僅是一個理論框架,更是一個經過實踐驗證、成果斐然的工具包。本章將通過量化數據,展示其在數據集規模、資源效率以及對提升AI代理性能方面的巨大影響。

4.1. 數據集分析:規模與多樣性的飛躍

image

通過SWE-smith流程,我們創建了一個規模空前的軟件工程訓練數據集。其核心指標如下:

數據集規模: 包含 50,137個 任務實例。

代碼庫覆蓋: 橫跨 128個 真實的、多樣化的GitHub代碼庫。

數量級優勢: 其任務實例總數比所有先前相關工作的總和還要大一個數量級。

創建成本與效率

SWE-smith的效率同樣令人矚目。整個龐大數據集的創建僅耗費了約 20小時 的人工審核時間(主要用於驗證環境安裝指令)和 1360美元 的總計算成本。這證明了其作為一種大規模數據生產工具的經濟可行性。

image

故障策略產出分析

不同的故障注入策略在產出率和任務特性上表現各異,下表總結了各項關鍵指標:

策略名稱

產出率 (%)

實例數

F2P測試中位數

編輯行數中位數

組合故障 (Combine Bugs)

96.9%

10,092

15

11

LM修改 (LM Modify)

56.0%

17,887

4

3

程序化修改 (Procedural Modification)

40.2%

15,641

7

5

LM重寫 (LM Rewrite)

35.0%

4,173

4

24

PR鏡像 (PR Mirror)

33.8%

2,344

3

14

總計

50.1%

50,137

6

5

從表中可以觀察到,“組合故障”策略的產出率最高,因為它聚合了已經驗證過的單一故障。而“PR鏡像”和“LM重寫”策略雖然產出率較低,但它們產生的任務在編輯行數上更多,通常也更接近真實世界軟件開發的複雜性。

4.2. 與現有數據集的對比分析

下表將SWE-smith與其它主流的開源軟件工程訓練數據集進行了直觀對比,凸顯了其在多個維度上的領先地位。

數據集

任務數

代碼庫數

是否可執行

數據來源

環境大小

R2E

0.25k

137

合成

270 GBs

R2E-gym

4.6k

10

合成

4 TBs

SWE-bench-extra

6.38k

2k

真實

-

SWE-bench-train

19k

37

真實

-

SWE-fixer

115k

856

真實

-

SWE-gym

2.4k

11

真實

6 TBs

SWE-smith

50k

128

兩者皆有

295 GBs

分析與解讀

上表清晰地顯示,SWE-smith在可執行任務實例的數量和覆蓋的代碼庫廣度上擁有絕對優勢。更值得注意的是其在存儲效率上實現的巨大突破。由於採用了“環境優先”的共享環境範式,SWE-smith為5萬個任務實例構建的環境總大小僅為295GB。相比之下,若使用SWE-bench的“一任務一環境”方法創建同等規模的數據集,預計需要50到150TB的存儲空間。這意味着SWE-smith的存儲效率提升了約500倍。這一數量級的效率提升,直接解決了以往大規模可執行數據集對於學術界和獨立研究者而言門檻過高的核心痛點。

4.3. SOTA模型訓練成果:SWE-agent-LM-32B的卓越表現

SWE-smith數據集的最終價值體現在其訓練AI代理的能力上。我們使用該數據集訓練了SWE-agent-LM-32B模型,並取得了突破性成果。

訓練過程

1. 專家軌跡生成: 我們使用強大的Claude 3.7 Sonnet模型作為“專家”,在SWE-smith生成的任務上運行SWE-agent系統,成功解決了5,016個任務,並記錄下完整的解決軌跡。

2. 模型微調: 我們使用這5,016條高質量的專家軌跡,對Qwen 2.5 Coder Instruct 32B模型進行了微調,最終得到了SWE-agent-LM-32B

性能突破

在權威的軟件工程基準測試SWE-bench Verified(一個為確保可靠性而經過人工精選的子集)上,SWE-agent-LM-32B取得了40.2%的Pass@1解決率。這一成績在當時創造了所有開源模型的新紀錄,達到了業界領先水平(State of the Art, SOTA)。

數據量與性能關係

實驗結果有力地證明了SWE-smith數據的有效性,並揭示了清晰的“縮放定律”(scaling law)。隨着用於訓練的專家軌跡數量從100條增加到5,000條,模型的解決率也從14.3%穩步提升至40.2%。這表明,SWE-smith不僅提供了大量的訓練數據,而且這些數據的質量足以驅動模型性能的持續提升。

image

這些成果不僅驗證了SWE-smith數據的質量和其方法論的成功,更揭示了一系列關於如何有效開發軟件工程代理的深刻洞見,為我們下一章的深入探討做好了鋪墊。

5. 深度洞察與發現

SWE-smith的龐大數據集不僅是訓練模型的“燃料”,更是一個獨特的“實驗室”。它使我們能夠系統性地進行消融實驗,研究和驗證影響軟件工程AI代理性能的多個關鍵因素,從而提煉出寶貴的洞見。

5.1. 訓練數據源對模型性能的影響

image

通過對比使用不同來源的訓練數據所產生的模型性能,我們得出了兩個核心結論:

不同故障類型的效能差異: 實驗表明,源自“反轉PR”(PR Mirror)策略的專家軌跡在訓練中最有效。這符合預期,因為該策略生成的任務最接近真實世界的軟件開發和迴歸場景。同時,值得注意的是,由“LM重寫”和“程序化修改”這兩種純合成策略生成的軌跡,也能訓練出具有高度競爭力的模型。這有力地證明了合成數據在模擬真實任務、提升模型解決實際問題能力方面的巨大潛力。

LM生成的問題陳述同樣有效: 對比實驗顯示,使用LM自動生成的問題陳述來訓練模型,其最終效果與使用從真實PR中提取的原始問題陳述相當。這一發現具有重大意義,因為它驗證了問題陳述生成環節的自動化是完全可行的,從而極大地增強了整個數據生成流程的可擴展性和效率,擺脱了對真實問題文本的依賴。

5.2. 數據多樣性的價值

數據來源的多樣性,特別是代碼庫的廣度,對模型的泛化能力至關重要。在一項控制變量實驗中,我們將訓練樣本的總量固定為700條專家軌跡,但改變這些軌跡的來源。

結果顯示,當這700條樣本來源的代碼庫數量從5個增加到100個時,模型的最終性能呈現出顯著的對數級增長。這一發現清晰地表明,讓模型接觸更廣泛、更多樣化的代碼庫,有助於其學習到更通用的問題解決方法,從而提升其在未知項目上的表現。

5.3. 模型專業化潛力

SWE-smith不僅能訓練通才模型,還為培養“領域專家”模型提供了可能。我們進行了一項針對性實驗,以SymPy(一個流行的Python科學計算庫)為例。

實驗中,我們使用專門在SymPy代碼庫上合成的數據對模型進行微調。結果發現,經過“專業化”訓練後,模型在解決SymPy相關的任務時性能顯著提升(解決率從33.3%躍升至42.4%),而其在其他代碼庫上的通用性能僅有輕微的下降。

這一發現揭示了一條為特定項目、公司內部軟件棧或特定技術領域定製高效能AI代理的可行路徑。企業或開發團隊可以利用SWE-smith為自己的核心代碼庫生成專屬訓練數據,從而打造出高度專業化的“AI結對程序員”。

這些發現為未來優化AI代理的訓練策略、提升模型性能和拓展應用場景提供了寶貴的經驗證據。接下來,我們將對SWE-smith的整體貢獻進行總結,並展望其未來的發展方向。

6. 結論

   SWE-smith是一套創新且可高度擴展的流程,它通過“環境優先,任務在後”的新範式,成功解決了開源軟件工程代理面臨的訓練數據瓶頸。通過生成一個包含超過5萬個任務實例、橫跨128個真實GitHub代碼庫的龐大數據集,SWE-smith為領域發展提供了關鍵的基礎設施。其直接成果——訓練出的SWE-agent-LM-32B模型在權威基準測試中達到了開源模型的頂尖(SOTA)性能——無可辯駁地證明了該方法的有效性和所生成數據的卓越質量。

image

展望未來,SWE-smith的發展將聚焦於以下幾個關鍵方向:

1. 跨語言擴展: 當前SWE-smith的工作流程主要以Python為中心。未來的一個核心目標是將其成熟的收集策略擴展到Java、JavaScript、C++等其他主流編程語言。這不僅是為了培養多語言能力的AI代理,更是邁向一個能夠為任何主流軟件生態系統生成定製化、超專業化AI代理的未來,從而深刻變革企業級軟件的維護與開發模式。

2. 探索更先進的訓練技術: 本文主要展示了監督式微調的應用。然而,SWE-smith生成的海量帶有即時執行反饋的任務實例,為更先進的訓練方法提供了理想的土壤。未來的工作將探索利用這些數據進行強化學習(Reinforcement Learning),這被視為是解鎖智能體真正的自主推理與複雜問題解決能力的關鍵路徑,使其超越簡單的故障修復,邁向更高層次的軟件工程任務。

SWE-smith為以真正可擴展的方式訓練和發展下一代軟件工程智能體提供了基礎性的數據和設施。我們堅信開放合作是推動技術進步的最佳途徑,因此,SWE-smith的所有資產,包括數據收集流程、任務實例、專家軌跡和訓練模型,均已開源,以促進整個社區的共同進步。



今天先到這兒,希望對AI,雲原生,技術領導力, 企業管理,系統架構設計與評估,團隊管理, 項目管理, 產品管理,信息安全,團隊建設 有參考作用 , 您可能感興趣的文章:
微服務架構設計
視頻直播平台的系統架構演化
微服務與Docker介紹
Docker與CI持續集成/CD
互聯網電商購物車架構演變案例
互聯網業務場景下消息隊列架構
互聯網高效研發團隊管理演進之一
消息系統架構設計演進
互聯網電商搜索架構演化之一
企業信息化與軟件工程的迷思
企業項目化管理介紹
軟件項目成功之要素
人際溝通風格介紹一
精益IT組織與分享式領導
學習型組織與企業
企業創新文化與等級觀念
組織目標與個人目標
初創公司人才招聘與管理
人才公司環境與企業文化
企業文化、團隊文化與知識共享
高效能的團隊建設
項目管理溝通計劃
構建高效的研發與自動化運維
某大型電商雲平台實踐
互聯網數據庫架構設計思路
IT基礎架構規劃方案一(網絡系統規劃)
餐飲行業解決方案之客户分析流程
餐飲行業解決方案之採購戰略制定與實施流程
餐飲行業解決方案之業務設計流程
供應鏈需求調研CheckList
企業應用之性能實時度量系統演變

如有想了解更多軟件設計與架構, 系統IT,企業信息化, 團隊管理 資訊,請關注我的微信訂閲號:

_thumb_thumb_thumb_thumb_thumb_thumb

作者:Petter Liu
出處:http://www.cnblogs.com/wintersun/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。 該文章也同時發佈在我的獨立博客中-Petter Liu Blog。

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.