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