機(jī)器之心報(bào)道
編輯:吳昕
Agentless+開(kāi)源模型,也能高質(zhì)量完成倉(cāng)庫(kù)級(jí)代碼修復(fù)任務(wù),效果媲美業(yè)界 SOTA 。
一、Agentless 、44% 與 NO.1
說(shuō)到 AI 寫(xiě)代碼的實(shí)力,大家最關(guān)心的還是一個(gè)問(wèn)題:能不能真修 bug ?
首個(gè)全自動(dòng) AI 軟件工程師 Devin 一出場(chǎng)就引爆了技術(shù)圈,其江湖地位也在權(quán)威基準(zhǔn) SWE-Bench 上被進(jìn)一步坐實(shí)——
獨(dú)立解決了 13.86% 的問(wèn)題,遠(yuǎn)遠(yuǎn)甩開(kāi) GPT-4 僅有的 1.7% ,Claude2 也不過(guò) 4.8% 。
沒(méi)過(guò)多久,Genie 又在同一測(cè)試中直接將得分拉升至 30.08% ,曾一度登頂全球最強(qiáng) AI 程序員。
SWE-Bench 為何能贏得工業(yè)界、學(xué)術(shù)界和創(chuàng)業(yè)團(tuán)隊(duì)廣泛關(guān)注?因?yàn)椋鼔蛘鎸?shí)。
這套由普林斯頓大學(xué)提出的測(cè)試集,任務(wù)全部來(lái)自真實(shí)的 GitHub 項(xiàng)目——
問(wèn)題要么是開(kāi)發(fā)者在生產(chǎn)環(huán)境中遇到的 bug ,要么是功能開(kāi)發(fā)中的典型需求,難度大、上下文復(fù)雜,最大程度地還原了程序員在真實(shí)開(kāi)發(fā)中的工作狀態(tài)。
換句話說(shuō),能在 SWE-Bench 上拿高分的模型,必須具備一個(gè)經(jīng)驗(yàn)豐富軟件工程師的復(fù)雜技能和經(jīng)驗(yàn),而這些恰恰是傳統(tǒng)代碼生成 benchmark 中很難覆蓋的。
考慮到 SWE-Bench 難度太高,團(tuán)隊(duì)也提出了稍微簡(jiǎn)單些的子集 SWE-Bench Lite ,即便如此,難度仍舊很高。
現(xiàn)有業(yè)界 SOTA 全部基于閉源模型,排行榜上的主力選手也大多是「豪華組合」:
閉源大模型(如 GPT-4o、Claude3.5 )+ Agent 架構(gòu)(如 SWE-Agent ),靠大體量和復(fù)雜調(diào)度系統(tǒng)「堆」出來(lái)能力。
近日,螞蟻集團(tuán)另辟蹊徑,給出一個(gè)完全不同的新解法:代碼圖模型 CGM( Code Graph Model ),基于開(kāi)源模型實(shí)現(xiàn)了能與閉源媲美的性能——
在 SWE-BenchLite 公開(kāi)排行榜上,CGM 能成功解決 44% 的問(wèn)題,秒殺所有開(kāi)源模型,位列第一;開(kāi)源系統(tǒng)排名第六。
秒殺所有開(kāi)源模型,位列第一
開(kāi)源系統(tǒng)排名第六。
SWE-BenchLite測(cè)試平臺(tái)上的結(jié)果
具體而言,此次開(kāi)源的 CGM 在 SWE-Bench 上實(shí)現(xiàn)了三項(xiàng)突破——
首先,打破閉源壟斷。首次使用開(kāi)源的千問(wèn)大模型,就能做到媲美 SOTA 的性能,并同步開(kāi)放訓(xùn)練用的代碼圖數(shù)據(jù)。
其次,摒棄了復(fù)雜 Agent 架構(gòu),僅用 4 步輕量級(jí) GraphRAG 流程,即可完成高效問(wèn)題定位與修復(fù)。
第三,首創(chuàng)性地讓大模型能直接讀懂倉(cāng)庫(kù)級(jí)的代碼圖結(jié)構(gòu),鏈接了代碼和圖兩個(gè)模態(tài),讓模型充分理解倉(cāng)庫(kù)級(jí)上下文。
目前,CGM 已正式開(kāi)源,模型、代碼、數(shù)據(jù)集均可在 HuggingFace 與 GitHub 獲取:
- 論文:
- https://arxiv.org/abs/2505.16901
- 模型:
- https://huggingface.co/codefuse-ai/CodeFuse-CGM-72B
- 代碼:
- https://github.com/codefuse-ai/CodeFuse-CGM
- 數(shù)據(jù):
- https://huggingface.co/datasets/codefuse-ai/CodeGraph
事實(shí)上,CGM 的戰(zhàn)績(jī)從來(lái)不輸強(qiáng)敵。
早在 2024 年 10 月,它就以 35.67% 的問(wèn)題解決率拿下 SWE-Bench Lite 開(kāi)源榜首;
兩個(gè)月后再度登頂,解決率升至 41.67% 。
而這次最新版本再次刷新紀(jì)錄,解決率來(lái)到 44%,實(shí)現(xiàn)了對(duì)開(kāi)源賽道的「連續(xù)三殺」。
二、LLM+Agent 架構(gòu)?看起來(lái)很美
寫(xiě)代碼,可以說(shuō)是 AI 大模型的「天賦技能」。ChatGPT 大火后,各種 AI 代碼助手加速融入程序員的日常工作。
2023 年 9 月,螞蟻推出 AI 代碼助手 CodeFuse ,稱要支持整個(gè)軟件開(kāi)發(fā)生命周期,涵蓋設(shè)計(jì)、需求、編碼、測(cè)試、部署、運(yùn)維等關(guān)鍵階段。
經(jīng)過(guò)兩年發(fā)展, CodeFuse 已逐步構(gòu)建起較為完整的生態(tài)體系,其中,用于處理倉(cāng)庫(kù)級(jí)別任務(wù)的 CGM( Code Graph Model )成為關(guān)鍵支點(diǎn)之一。
現(xiàn)實(shí)開(kāi)發(fā)中,真正考驗(yàn)代碼模型的不是寫(xiě)幾個(gè)函數(shù),而是像 Issue 修復(fù)、代碼審查這類倉(cāng)庫(kù)級(jí)任務(wù)。一個(gè)大型項(xiàng)目動(dòng)輒成千上萬(wàn)行代碼,上千個(gè)文件、成百上千個(gè)函數(shù),類與模塊之間繼承、調(diào)用關(guān)系錯(cuò)綜復(fù)雜——?jiǎng)右恍校赡軤恳黄?此浦桓囊粋€(gè)函數(shù),實(shí)則要理清一整片森林。
為了解決這類復(fù)雜任務(wù),當(dāng)前業(yè)內(nèi)主流路徑是基于 LLM Agent 架構(gòu)。
例如,用戶問(wèn)「如何增加刪除按鈕」、「密碼驗(yàn)證邏輯在哪個(gè)函數(shù)中」,系統(tǒng)會(huì)自動(dòng)調(diào)度多個(gè) Agent 各司其職,同時(shí)對(duì)倉(cāng)庫(kù)內(nèi)的代碼進(jìn)行切片、embedding 計(jì)算、語(yǔ)義檢索等操作,最終召回相關(guān)代碼并生成響應(yīng)或修改建議。
但這種方案,除了模型的可獲取性受限,在真實(shí)場(chǎng)景中卻暴露出不少「隱藏 bug」。
首先,軟件開(kāi)發(fā)任務(wù)往往比較復(fù)雜。
「如何添加一個(gè)刪除按鈕」這一看似簡(jiǎn)單的需求,背后包含多個(gè) agent(「節(jié)點(diǎn)」)。節(jié)點(diǎn)越多,越不可控。任何一個(gè)出錯(cuò)(例如錯(cuò)判了文件位置、召回了無(wú)關(guān)代碼)都會(huì)影響后續(xù)流程,造成誤差積累。
而且,agent 越多,執(zhí)行路徑越長(zhǎng),通信與計(jì)算成本也水漲船高。
其次,訓(xùn)練數(shù)據(jù)跟不上系統(tǒng)復(fù)雜度。
像 SWE-bench 這樣的評(píng)測(cè)數(shù)據(jù)集,雖然真實(shí)、權(quán)威,但提供的是端到端的樣本——只標(biāo)注了起點(diǎn)(問(wèn)題)和終點(diǎn)(修復(fù)),中間 agent 們「怎么拆解任務(wù)、怎么協(xié)作」的路徑信息往往缺失。
換句話說(shuō),任務(wù)精細(xì)化了,但數(shù)據(jù)卻仍是粗粒度的,訓(xùn)練難度反而上升。
再者,語(yǔ)言模型「線性讀代碼」的方式本身就存在局限。
傳統(tǒng)做法通常把整個(gè)文件「鋪平」為一長(zhǎng)串 token ,忽略了代碼天然的結(jié)構(gòu)性。而代碼倉(cāng)庫(kù)本質(zhì)上更像一張圖——函數(shù)之間調(diào)用、類之間繼承、模塊之間依賴,結(jié)構(gòu)復(fù)雜但規(guī)律明確。
想讓大模型真正具備倉(cāng)庫(kù)級(jí)別的理解力,一個(gè)可行的技術(shù)路徑就是把結(jié)構(gòu)直接喂進(jìn)去。
三、「結(jié)構(gòu)感知」的 Agentless 路線
是否可以在不依賴 agent 的情況下,使用開(kāi)源大模型高效完成倉(cāng)庫(kù)級(jí)代碼任務(wù)?螞蟻全模態(tài)代碼算法團(tuán)隊(duì)找到了答案,提出 CGM( Code Graph Model )架構(gòu)——
不依賴繁復(fù)的 agent 調(diào)度,而是首創(chuàng)將代碼倉(cāng)庫(kù)圖結(jié)構(gòu)作為模態(tài)輸入,直接融入大模型中,一舉捕獲函數(shù)調(diào)用、模塊依賴、類繼承等復(fù)雜關(guān)系。
這相當(dāng)于給大模型戴上一副「工程眼鏡」,讓原本隱而不顯的代碼實(shí)體(文件、類、函數(shù)、變量等)的各種關(guān)系,立刻清晰可見(jiàn)。
而這一能力的實(shí)現(xiàn),離不開(kāi)三個(gè)關(guān)鍵突破。
1、多粒度代碼圖譜建模,捕捉結(jié)構(gòu)信息
CGM 會(huì)將代碼倉(cāng)庫(kù)建模為圖數(shù)據(jù)結(jié)構(gòu)。為捕捉倉(cāng)庫(kù)圖結(jié)構(gòu)信息,團(tuán)隊(duì)首先利用程序分析技術(shù)將整個(gè)代碼倉(cāng)庫(kù)轉(zhuǎn)換為對(duì)應(yīng)代碼圖(如圖1)。代碼圖中的節(jié)點(diǎn)類型和邊類型如下:
- 節(jié)點(diǎn)類型:涵蓋 7 類代碼實(shí)體( REPO / PACKAGE / FILE / TEXTFILE/ CLASS / FUNCTION / ATTRIBUTE )
- 邊類型:包含 5 種依賴關(guān)系( contains / calls / imports / extends /implements )
圖1倉(cāng)庫(kù)代碼圖
在代碼圖中,contains 邊捕捉了代碼實(shí)體之間的層次依賴,其余邊類型則捕捉了代碼實(shí)體之間的語(yǔ)義依賴。在構(gòu)建代碼圖時(shí),也包含對(duì)復(fù)雜依賴的處理。
- 繼承:支持解析多重繼承(基于 CHA 算法)。
- 調(diào)用:保守解析動(dòng)態(tài)調(diào)用,確保語(yǔ)義依賴完整。
這一建模方式目前已支持 Python 和 Java 。
通過(guò)建模,原本零散的代碼會(huì)被組織成一個(gè)有結(jié)構(gòu)、有方向的網(wǎng)絡(luò)。CGM 能像程序員第一次閱讀陌生倉(cāng)庫(kù)時(shí)那樣,迅速在腦海中生成一張「代碼依賴圖譜」,看清誰(shuí)調(diào)用誰(shuí)、誰(shuí)影響誰(shuí)。
2、兩階段訓(xùn)練,結(jié)構(gòu)-語(yǔ)義雙模態(tài)對(duì)齊
有了圖結(jié)構(gòu),接下來(lái)就要教會(huì) LLM「讀懂」它:不僅理解單個(gè)節(jié)點(diǎn)的語(yǔ)義,還能在圖結(jié)構(gòu)上進(jìn)行高效推理,從而實(shí)現(xiàn)結(jié)構(gòu)和語(yǔ)義的深度融合。
首先,用 CodeT5+ 編碼每個(gè)節(jié)點(diǎn)的語(yǔ)義信息,并通過(guò)適配器將其映射到大模型輸入空間,確保大模型能讀懂節(jié)點(diǎn)文本內(nèi)容(語(yǔ)義對(duì)齊);
其次,將圖的鄰接矩陣轉(zhuǎn)化為一個(gè)圖感知注意力掩碼( Graph-awareAttentionMask ),替換掉 LLM 中處理節(jié)點(diǎn) token 時(shí)的標(biāo)準(zhǔn)因果注意力掩碼。
這一改動(dòng)巧妙地模擬了圖神經(jīng)網(wǎng)絡(luò)中的「消息傳遞」機(jī)制,讓注意力計(jì)算只關(guān)注圖中相鄰節(jié)點(diǎn)之間信息流動(dòng),從而讓 LLM 能夠直接感知和利用代碼的結(jié)構(gòu)依賴關(guān)系。
訓(xùn)練過(guò)程包括預(yù)訓(xùn)練與微調(diào)兩階段,分別夯實(shí)「理解力」與「泛化能力」:
- 子圖重構(gòu)預(yù)訓(xùn)練,是根據(jù)輸入子圖重構(gòu)源代碼,建立從代碼圖到 LLM 語(yǔ)義帶格式的空間的映射,夯實(shí)結(jié)構(gòu)與語(yǔ)義融合基礎(chǔ);
- 噪聲增強(qiáng)微調(diào),此階段使用真實(shí)的 GitHub 問(wèn)題-修復(fù)補(bǔ)丁數(shù)據(jù)對(duì) CGM 進(jìn)行微調(diào)。為了提升模型的魯棒性,團(tuán)隊(duì)特意在提示中引入了10% 的噪聲輸入。例如,提示中可能包含一個(gè)實(shí)際上無(wú)需修改的不相關(guān)文件,或者遺漏至少一個(gè)本應(yīng)被修改的關(guān)鍵文件。在訓(xùn)練中引入這種受控的噪聲有助于模型更好地泛化到實(shí)際輸入信息不完整或包含干擾的場(chǎng)景。
3、GraphRAG 框架:R4 鏈路高效生成補(bǔ)丁
為了把能力用起來(lái),團(tuán)隊(duì)還設(shè)計(jì)了輕量化的 GraphRAG 框架。
相比于現(xiàn)有的 Agentless 框架,GraphRAG 進(jìn)一步將核心模塊數(shù)量從 10 個(gè)精簡(jiǎn)到 4 個(gè)關(guān)鍵模塊——
改寫(xiě)器( Rewriter )、檢索器( Retriever )、重排器( Reranker )和生成器( Reader )。
模塊之間順序執(zhí)行、高效協(xié)同,還原程序員日常修 bug 的思維路徑與操作鏈路,在真實(shí)場(chǎng)景中高效、準(zhǔn)確地定位問(wèn)題并生成修復(fù)補(bǔ)丁。
當(dāng)然,對(duì)于有 SWE 需求的企業(yè)而言,CGM 的吸引力遠(yuǎn)不止榜單成績(jī)。
在保障核心數(shù)據(jù)安全可控的同時(shí),CGM 為企業(yè)帶來(lái)了更大的自由度——
不僅規(guī)避了隱私泄露風(fēng)險(xiǎn),也免去了持續(xù)支付高昂 API 費(fèi)用的負(fù)擔(dān)。企業(yè)可以基于自身業(yè)務(wù)需求,對(duì)模型進(jìn)行深度定制和優(yōu)化部署。
像 DeepSeek-V3 這樣的開(kāi)源高性能大模型已成為不少私有化部署的首選,CGM 架構(gòu)也會(huì)吸引有上述需求企業(yè)的注意力。
正如 OpenAI CEO SamAltman 所言:「2025 年底前,軟件工程將發(fā)生翻天覆地的變化。」CGM,無(wú)疑是這場(chǎng)變革中,擲地有聲的一步。
如果你對(duì)螞蟻全模態(tài)代碼算法團(tuán)隊(duì)早期提出的代碼大模型與代碼圖研究感興趣,歡迎進(jìn)一步閱讀:
- 最全代碼大模型綜述(TMLR):
https://github.com/codefuse-ai/Awesome-Code-LLM
- 代碼圖模型早期研究GALLa(ACL 2025):
https://github.com/codefuse-ai/GALLa
- 多任務(wù)代碼微調(diào)框架MFTCoder(KDD 2024):
https://github.com/codefuse-ai/MFTCoder
- 高效注意力架構(gòu)Rodimus*(ICLR 2024):
https://github.com/codefuse-ai/rodimus
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.