熱門資訊> 正文
2025-06-27 16:32
AI自動修bug,解決率達44%!這是全球開源模型的最新最強水平。
來自螞蟻的開源新模型,在SWE-bench Lite上超越所有開源方案,性能媲美閉源模型。
具體表現如下,在SWE-bench Lite上:
他們首創將倉庫代碼圖模態融入大模型(Code Graph Model, CGM),讓大語言模型能直接理解代碼圖,更高效修復bug、補全代碼。
這徹底擺脫對黑盒模型(如GPT-4或Claude 3.7等)和複雜Agent工作流程的依賴,實現更加可控、透明、安全的SE自動化。
而且,CGM完全基於開源模型。要知道,開源模型在SWE-bench上的表現通常不夠好,此前幾乎所有SOTA級方案都是基於閉源模型實現。而CGM基於Qwen模型,做到了比肩閉源模型的水平。
CGM僅需4步就能快速定位、生成補丁,省去了Agent方案中複雜的編排過程,效率直線up。
大模型趨勢以來,AI編程迅速崛起,尤其是在寫函數這類小任務上的表現出色,比如在HumanEval等基準測試上,許多模型的準確率已經超過90%。
然而真實的軟件工程遠比」寫一個函數「複雜得多。像Bug修復、功能增強這樣的任務,通常需要跨文件、跨模塊操作,並要求模型理解項目中複雜的結構、依賴關係和類的繼承體系。
現在的主流方法通常是使用基於閉源模型的Agent。它們可以模擬人類程序員行為,如觀察代碼、調用工具、多輪交互等完成任務。
但這類方法也存在幾個問題:
與此同時,當前使用開源模型的方案,很難實現SOTA級效果。
為此研究團隊提出:能否只用開源模型、不依賴Agent,解決倉庫級任務?CGM由此而來。
CGM採用類似Vision-Language Model(VLM)的跨模態建模方式。它將傳統LLM的文本理解能力與代碼倉庫的結構圖(Graph)結合,形成一種圖-語言多模態模型。模型核心融合了兩個模態:
模型輸入為代碼圖和文本形式的prompt,將在LLM中對結構-語義進行雙模態對齊。
具體結構融合方法如下:
使用小型編碼器(CodeT5+)對每個節點進行編碼,壓縮為單個「節點token」,每個節點內按照至多512個token的文本塊切分。
通過一個適配器(一個兩層MLP)將編碼后的節點表徵映射到LLM輸入嵌入空間中。相當於將LLM上下文擴展512倍,能更好處理海量的代碼倉庫上下文。
使用圖感知注意力掩碼(Graph-aware Attention Mask)。替代LLM中原有的因果注意力,使注意力機制只作用於相鄰節點間。類似於GNN的消息傳遞機制,能夠讓LLM直接感知和利用代碼的結構依賴關係。
基於此模型架構,團隊通過兩階段訓練讓LLM能夠理解代碼圖的拓撲結構。
階段一:子圖重構預訓練
爲了訓練CGM有效捕捉代碼圖的語義和結構信息,團隊設計了一個「圖生代碼 (Graph-to-Code)」任務。從大型代碼圖中隨機採樣出子圖(限制節點數量以控制輸出代碼長度),模型需要根據這些輸入的子圖(僅包含節點類型和連接關係,不含完整的代碼內容)來重建出原始的代碼片段。
然后採用層級化方法,保持重建代碼的結構一致性和可讀性。按照拓撲排序與行號順序拼接倉庫上下文:高級別節點(如REPO、PACKAGE)置於輸出序列或文件的起始;文件節點通過拓撲排序確定順序;文件內節點(如CLASS、FUNCTION)則按行號順序拼接。
階段二:噪聲增強微調
此階段使用真實的GitHub問題-修復補丁數據對CGM進行微調。
模型學習基於兩項輸入生成代碼補丁:(i) 一個相關的代碼子圖;(ii) 一段文本提示,指明根據補丁可能需要修改的實際文件。爲了提升模型的魯棒性,特意在提示中引入了10%的噪聲輸入:例如,提示中可能包含一個實際上無需修改的不相關文件,或者遺漏至少一個本應被修改的關鍵文件。在訓練中引入這種受控的噪聲有助於模型更好地泛化到實際輸入信息不完整或包含干擾的場景。
最后,爲了進一步提升實際應用能力,CGM構建了一個無Agent輕量化框架Graph-RAG。
它還原了人類程序員bug修復工作流,但比現有Agent方案效率更高。
核心模塊數量從10個進一步精簡到了4個:改寫器→檢索器→重排器→生成器(CGM模型)。
改寫器(Rewriter) :改寫問題描述,提取關鍵詞與相關文件;
檢索器(Retriever) :通過語義與結構檢索,從代碼圖中抽取連通子圖;
重排器(Reranker) :排序檢索結果,選擇最關鍵文件用於生成;
生成器(Reader) :結合子圖與提示生成最終修復代碼。
基於以上,CGM在多個測試基準中取得了領先成績。具體如下——
研究團隊在多個主流基準上系統評估了 CGM 的性能,涵蓋兩個主要任務類別:(1)代碼修復和(2)代碼補全。
在SWE-bench Lite Leaderboard上,CGM以44.00%的結果排名開源權重榜單第一。
在SWE-bench Verified上,CGM相比於最佳開源基線提升了10.20%,至50.40%;
對於Java項目,CGM在SWE-bench-java Verified上達到14.29%,則相比於最佳開源基線提升了4.4%。
這些結果表明CGM能夠處理跨語言、跨項目的大規模倉庫級Bug修復任務,展現出強大的結構理解與泛化能力。
在複雜代碼生成任務中,CGM在ComplexCodeEval和CrossCodeEval上也顯著領先於同尺寸開源模型,特別是在需要跨文件推理和補全的場景下效果突出。
此外,研究團隊在不同基座模型上(CodeLlama-7B和DeepSeek-Coder-7B)分別部署了CGM,並與近期RAG系統進行比較。結果顯示,CGM具備很好通用性,可以適配多種基座模型,並且表現超越傳統RAG方法。
總結來看,CGM不依賴複雜Agent系統,首次實現了在大模型中融合代碼圖模態,讓AI像人類一樣get倉庫里文本和代碼之間的複雜依賴關係,「真正理解一個項目」。
更關鍵的是,它基於開源模型就能實現,不侷限於特定模型。為企業和開發者提供了一個靈活、透明且可控的方案。
最后,CGM的技術論文、核心代碼、模型權重與訓練數據均已開源,感興趣的同學可進一步瞭解詳情。
團隊此前工作:
https://github.com/codefuse-ai/Awesome-Code-LLM
https://github.com/codefuse-ai/GALLa
https://arxiv.org/abs/2410.06577
https://arxiv.org/abs/2311.02303
本文來自微信公眾號 「量子位」(ID:QbitAI),作者:明敏 ,36氪經授權發佈。