AI 自動(dòng)修 bug,解決率達(dá) 44%!這是全球開(kāi)源模型的最新最強(qiáng)水平。
來(lái)自螞蟻的開(kāi)源新模型,在 SWE-bench Lite 上超越所有開(kāi)源方案,性能媲美閉源模型。
具體表現(xiàn)如下,在 SWE-bench Lite 上:
所有開(kāi)源模型方法(Open Weight Model)中排名第一;
所有開(kāi)源系統(tǒng)方法(Open Source Syestem)中排名第六;
總體排名第 14;
優(yōu)于目前榜單最好開(kāi)源模型“KGCompass”7.33%。
他們首創(chuàng)將倉(cāng)庫(kù)代碼圖模態(tài)融入大模型(Code Graph Model, CGM),讓大語(yǔ)言模型能直接理解代碼圖,更高效修復(fù) bug、補(bǔ)全代碼。
這徹底擺脫對(duì)黑盒模型(如 GPT-4 或 Claude 3.7 等)和復(fù)雜 Agent 工作流程的依賴,實(shí)現(xiàn)更加可控、透明、安全的 SE 自動(dòng)化。
而且,CGM 完全基于開(kāi)源模型。要知道,開(kāi)源模型在 SWE-bench 上的表現(xiàn)通常不夠好,此前幾乎所有 SOTA 級(jí)方案都是基于閉源模型實(shí)現(xiàn)。而 CGM 基于 Qwen 模型,做到了比肩閉源模型的水平。
CGM 僅需 4 步就能快速定位、生成補(bǔ)丁,省去了 Agent 方案中復(fù)雜的編排過(guò)程,效率直線 up。
讓 AI 真正理解大模型代碼庫(kù)
大模型趨勢(shì)以來(lái),AI 編程迅速崛起,尤其是在寫(xiě)函數(shù)這類小任務(wù)上的表現(xiàn)出色,比如在 HumanEval 等基準(zhǔn)測(cè)試上,許多模型的準(zhǔn)確率已經(jīng)超過(guò) 90%。
然而真實(shí)的軟件工程遠(yuǎn)比”寫(xiě)一個(gè)函數(shù)“復(fù)雜得多。像 Bug 修復(fù)、功能增強(qiáng)這樣的任務(wù),通常需要跨文件、跨模塊操作,并要求模型理解項(xiàng)目中復(fù)雜的結(jié)構(gòu)、依賴關(guān)系和類的繼承體系。
現(xiàn)在的主流方法通常是使用基于閉源模型的 Agent。它們可以模擬人類程序員行為,如觀察代碼、調(diào)用工具、多輪交互等完成任務(wù)。
但這類方法也存在幾個(gè)問(wèn)題:
行為路徑不可控,容易積累推理誤差;
依賴 GPT-4、Claude 等閉源模型,難以私有部署或定制;
工程成本高,效率不高。
與此同時(shí),當(dāng)前使用開(kāi)源模型的方案,很難實(shí)現(xiàn) SOTA 級(jí)效果。
為此研究團(tuán)隊(duì)提出:能否只用開(kāi)源模型、不依賴 Agent,解決倉(cāng)庫(kù)級(jí)任務(wù)?CGM 由此而來(lái)。
??圖結(jié)構(gòu)與大模型深度融合
CGM 采用類似 Vision-Language Model(VLM)的跨模態(tài)建模方式。它將傳統(tǒng) LLM 的文本理解能力與代碼倉(cāng)庫(kù)的結(jié)構(gòu)圖(Graph)結(jié)合,形成一種圖-語(yǔ)言多模態(tài)模型。模型核心融合了兩個(gè)模態(tài):
圖模態(tài):將倉(cāng)庫(kù)構(gòu)建為結(jié)構(gòu)化圖,節(jié)點(diǎn)包括函數(shù)、類、文件、包等 7 種類型,邊表示調(diào)用、包含、繼承等依賴;
語(yǔ)言模態(tài):用戶輸入的自然語(yǔ)言描述和代碼提示,驅(qū)動(dòng)模型生成 patch 或回答。
模型輸入為代碼圖和文本形式的 prompt,將在 LLM 中對(duì)結(jié)構(gòu)-語(yǔ)義進(jìn)行雙模態(tài)對(duì)齊。
具體結(jié)構(gòu)融合方法如下:
使用小型編碼器(CodeT5+)對(duì)每個(gè)節(jié)點(diǎn)進(jìn)行編碼,壓縮為單個(gè)“節(jié)點(diǎn) token”,每個(gè)節(jié)點(diǎn)內(nèi)按照至多 512 個(gè) token 的文本塊切分。
通過(guò)一個(gè)適配器(一個(gè)兩層 MLP)將編碼后的節(jié)點(diǎn)表征映射到 LLM 輸入嵌入空間中。相當(dāng)于將 LLM 上下文擴(kuò)展 512 倍,能更好處理海量的代碼倉(cāng)庫(kù)上下文。
使用圖感知注意力掩碼(Graph-aware Attention Mask)。替代 LLM 中原有的因果注意力,使注意力機(jī)制只作用于相鄰節(jié)點(diǎn)間。類似于 GNN 的消息傳遞機(jī)制,能夠讓 LLM 直接感知和利用代碼的結(jié)構(gòu)依賴關(guān)系。
??兩階段訓(xùn)練:結(jié)構(gòu)理解 + 問(wèn)題泛化
基于此模型架構(gòu),團(tuán)隊(duì)通過(guò)兩階段訓(xùn)練讓 LLM 能夠理解代碼圖的拓?fù)浣Y(jié)構(gòu)。
階段一:子圖重構(gòu)預(yù)訓(xùn)練
為了訓(xùn)練 CGM 有效捕捉代碼圖的語(yǔ)義和結(jié)構(gòu)信息,團(tuán)隊(duì)設(shè)計(jì)了一個(gè)“圖生代碼 (Graph-to-Code)”任務(wù)。從大型代碼圖中隨機(jī)采樣出子圖(限制節(jié)點(diǎn)數(shù)量以控制輸出代碼長(zhǎng)度),模型需要根據(jù)這些輸入的子圖(僅包含節(jié)點(diǎn)類型和連接關(guān)系,不含完整的代碼內(nèi)容)來(lái)重建出原始的代碼片段。
然后采用層級(jí)化方法,保持重建代碼的結(jié)構(gòu)一致性和可讀性。按照拓?fù)渑判蚺c行號(hào)順序拼接倉(cāng)庫(kù)上下文:高級(jí)別節(jié)點(diǎn)(如 REPO、PACKAGE)置于輸出序列或文件的起始;文件節(jié)點(diǎn)通過(guò)拓?fù)渑判虼_定順序;文件內(nèi)節(jié)點(diǎn)(如 CLASS、FUNCTION)則按行號(hào)順序拼接。
階段二:噪聲增強(qiáng)微調(diào)
此階段使用真實(shí)的 GitHub 問(wèn)題-修復(fù)補(bǔ)丁數(shù)據(jù)對(duì) CGM 進(jìn)行微調(diào)。
模型學(xué)習(xí)基于兩項(xiàng)輸入生成代碼補(bǔ)丁:(i) 一個(gè)相關(guān)的代碼子圖;(ii) 一段文本提示,指明根據(jù)補(bǔ)丁可能需要修改的實(shí)際文件。為了提升模型的魯棒性,特意在提示中引入了 10% 的噪聲輸入:例如,提示中可能包含一個(gè)實(shí)際上無(wú)需修改的不相關(guān)文件,或者遺漏至少一個(gè)本應(yīng)被修改的關(guān)鍵文件。在訓(xùn)練中引入這種受控的噪聲有助于模型更好地泛化到實(shí)際輸入信息不完整或包含干擾的場(chǎng)景。
??推理階段:Graph-RAG 框架替代 Agent
最后,為了進(jìn)一步提升實(shí)際應(yīng)用能力,CGM 構(gòu)建了一個(gè)無(wú) Agent 輕量化框架 Graph-RAG。
它還原了人類程序員 bug 修復(fù)工作流,但比現(xiàn)有 Agent 方案效率更高。
核心模塊數(shù)量從 10 個(gè)進(jìn)一步精簡(jiǎn)到了 4 個(gè):改寫(xiě)器 → 檢索器 → 重排器 → 生成器(CGM 模型)。
改寫(xiě)器(Rewriter):改寫(xiě)問(wèn)題描述,提取關(guān)鍵詞與相關(guān)文件;
檢索器(Retriever):通過(guò)語(yǔ)義與結(jié)構(gòu)檢索,從代碼圖中抽取連通子圖;
重排器(Reranker):排序檢索結(jié)果,選擇最關(guān)鍵文件用于生成;
生成器(Reader):結(jié)合子圖與提示生成最終修復(fù)代碼。
基于以上,CGM 在多個(gè)測(cè)試基準(zhǔn)中取得了領(lǐng)先成績(jī)。具體如下 ——
實(shí)驗(yàn)結(jié)果
研究團(tuán)隊(duì)在多個(gè)主流基準(zhǔn)上系統(tǒng)評(píng)估了 CGM 的性能,涵蓋兩個(gè)主要任務(wù)類別:(1)代碼修復(fù)和(2)代碼補(bǔ)全。
倉(cāng)庫(kù)級(jí)別的代碼修復(fù)
在 SWE-bench Lite Leaderboard 上,CGM 以 44.00% 的結(jié)果排名開(kāi)源權(quán)重榜單第一。
在 SWE-bench Verified 上,CGM 相比于最佳開(kāi)源基線提升了 10.20%,至 50.40%;
對(duì)于 Java 項(xiàng)目,CGM 在 SWE-bench-java Verified 上達(dá)到 14.29%,則相比于最佳開(kāi)源基線提升了 4.4%。
這些結(jié)果表明 CGM 能夠處理跨語(yǔ)言、跨項(xiàng)目的大規(guī)模倉(cāng)庫(kù)級(jí) Bug 修復(fù)任務(wù),展現(xiàn)出強(qiáng)大的結(jié)構(gòu)理解與泛化能力。
倉(cāng)庫(kù)級(jí)別的代碼補(bǔ)全
在復(fù)雜代碼生成任務(wù)中,CGM 在 ComplexCodeEval 和 CrossCodeEval 上也顯著領(lǐng)先于同尺寸開(kāi)源模型,特別是在需要跨文件推理和補(bǔ)全的場(chǎng)景下效果突出。
此外,研究團(tuán)隊(duì)在不同基座模型上(CodeLlama-7B 和 DeepSeek-Coder-7B)分別部署了 CGM,并與近期 RAG 系統(tǒng)進(jìn)行比較。結(jié)果顯示,CGM 具備很好通用性,可以適配多種基座模型,并且表現(xiàn)超越傳統(tǒng) RAG 方法。
總結(jié)來(lái)看,CGM 不依賴復(fù)雜 Agent 系統(tǒng),首次實(shí)現(xiàn)了在大模型中融合代碼圖模態(tài),讓 AI 像人類一樣 get 倉(cāng)庫(kù)里文本和代碼之間的復(fù)雜依賴關(guān)系,“真正理解一個(gè)項(xiàng)目”。
更關(guān)鍵的是,它基于開(kāi)源模型就能實(shí)現(xiàn),不局限于特定模型。為企業(yè)和開(kāi)發(fā)者提供了一個(gè)靈活、透明且可控的方案。
??最后,CGM 的技術(shù)論文、核心代碼、模型權(quán)重與訓(xùn)練數(shù)據(jù)均已開(kāi)源,感興趣的同學(xué)可進(jìn)一步了解詳情。
技術(shù)論文:https://arxiv.org/abs/2505.16901
開(kāi)源代碼:https://github.com/codefuse-ai/CodeFuse-CGM
模型權(quán)重:https://huggingface.co/codefuse-ai/CodeFuse-CGM-72B
訓(xùn)練數(shù)據(jù):https://huggingface.co/datasets/codefuse-ai/CodeGraph
??團(tuán)隊(duì)此前工作:
Code LLM綜述:Awesome-Code-LLM(TMLR)https://github.com/codefuse-ai/Awesome-Code-LLM
Graph+LLM前序研究:GALLa(ACL 2025)https://github.com/codefuse-ai/GALLa
高效注意力架構(gòu):Rodimus(ICLR 2025)https://arxiv.org/abs/2410.06577
代碼多任務(wù)微調(diào)框架:MFTCoder(KDD 2024)https://arxiv.org/abs/2311.02303