讓AI管理大型代碼庫,開發(fā)者福音來了 | 阿里/新加坡國立/西安交大聯(lián)合出品
代碼生成和補(bǔ)全任務(wù)做不完了?!
不如試試讓大語言模型(Large Language Models, LLMs)來幫忙。
不過,如果是處理大規(guī)模、多文件的代碼庫,LLMs就可能犯了難。這時候,往往需要需要Retrieval-Augmented Code Generation (RACG)系統(tǒng)來檢索相關(guān)的代碼信息。
現(xiàn)有解決方案,如基于語義相似度的檢索和手動設(shè)計的工具與API,雖然在特定任務(wù)上有效,但在泛化能力和普適性方面存在局限。
為了緩解現(xiàn)有RACG方法的通用性缺陷,來自新加坡國立大學(xué)、阿里巴巴、西安交通大學(xué)的研究人員提出了CodexGraph,一個以代碼圖數(shù)據(jù)庫為媒介,連接了語言模型和代碼庫的系統(tǒng)。
研究團(tuán)隊在三個有代表性的學(xué)術(shù)benchmarks對CodexGraph進(jìn)行了評測,同時也基于ModelScope-Agent,將CodexGraph實(shí)現(xiàn)在了五個真實(shí)代碼應(yīng)用場景。
實(shí)驗和現(xiàn)實(shí)實(shí)踐顯示出了CodexGraph的有效性和通用性。
研究方法
CodexGraph通過代碼圖數(shù)據(jù)庫接?界? ,創(chuàng)新性地將語?模型與代碼庫連接,以克服現(xiàn)有?法的不?。
該系統(tǒng)的?作流程主要包括以下?個步驟 :
首先,構(gòu)建代碼圖數(shù)據(jù)庫。
使?靜態(tài)分析技術(shù),根據(jù)預(yù)定義的Schema,將代碼庫中的代碼符號(如模塊、 類、 函數(shù)等)和它們之間的關(guān)系映射為圖數(shù)據(jù)庫中的節(jié)點(diǎn)和邊。
其次,代碼結(jié)構(gòu)感知查詢。
利?graph query language的靈活性,同時結(jié)合圖數(shù)據(jù)庫的結(jié)構(gòu)特性,實(shí)現(xiàn)對代碼圖的復(fù)雜查詢和深度檢索。
第三, “Write then translate? 策略。
Primary LM agent ?先分析代碼問題,?成?然語?查詢。
然后,專門的translation LM agent將這些查詢翻譯為為格式化的graph query language。
第四,迭代式pipeline。
通過迭代的?式,LM agent根據(jù)?戶問題和已獲取的信息,逐步優(yōu)化查詢和檢索結(jié)果。
實(shí)驗
實(shí)驗部分,CodexGraph在CrossCodeEval、 EvoCodeBench和SWE-bench三個具有代表性的代碼庫級基準(zhǔn)測試上進(jìn)?了評估。
這些測試覆蓋了跨?件代碼補(bǔ)全、 代碼?成和?動化GitHub問題解決等多個?? 。
實(shí)驗結(jié)果顯示,CodexGraph在所有基準(zhǔn)測試中均展現(xiàn)出了優(yōu)異且穩(wěn)定的性能,驗證了代碼圖數(shù)據(jù)庫作為語?模型和代碼庫之間的接?界?的有效性。
原論?的分析進(jìn)?步指出,CodexGraph在處理不同難度的推理任務(wù)時,單?查詢與多重查詢策略的效果存在差異。
在CrossCodeEval中,多重查詢策略更有效;?在SWE- bench中,單?查詢策略表現(xiàn)更佳。
此外 ,去除Cypher LM agent會顯著增加primary LM agent的推理負(fù)擔(dān),導(dǎo)致性能下降。
這表明Cypher LM agent在減輕primary LM Agent的推理壓?中發(fā)揮了關(guān)鍵作?。
真實(shí)應(yīng)?場景?例
基于ModelScope-Agent框架 ,CodexGraph的實(shí)際應(yīng)?價值在多個場景中得到了體現(xiàn),如:
- 代碼聊天助?(Code Chat)
- 代碼調(diào)試?具(Code Debugger)
- 單元測試?成器(Code Unit tester)
- 代碼?成器(Code Generator)
- 代碼注釋?具(Code Commenter)
- ……
這些應(yīng)?展?了CodexGraph如何在?產(chǎn)環(huán)境中幫助開發(fā)者解決實(shí)際問題 ,提?代碼開發(fā)的效率和質(zhì)量。
總結(jié)
以圖數(shù)據(jù)庫作為媒介,CodexGraph為語?模型與代碼庫提供了?個新的交互?式。
它不僅提升了語?模型對復(fù)雜代碼庫的理解能?,還增強(qiáng)了整體的代碼檢索和導(dǎo)航的準(zhǔn)確性。
它的出現(xiàn)為?動化軟件?程領(lǐng)域,尤其是在?臨RACG挑戰(zhàn)時,帶來了新的解決?案 ,展?了在多樣化代碼任務(wù)和現(xiàn)實(shí)世界應(yīng)?中的?泛潛?和實(shí)際價值。
隨著技術(shù)的不斷發(fā)展,CodexGraph有望在未來?持更多編程語? ,并進(jìn)?步優(yōu)化其?作流程和索引構(gòu)建效率。
代碼鏈接 :
https://github.com/modelscope/modelscope-agent/tree/master/apps/codexgraph_agent
arXiv鏈接 :