斯坦福等開源代碼定位AI Agent,極大提升開發、維護效率
斯坦福大學、耶魯大學、南加州大學等研究人員聯合開源了,專用于代碼定位的智能體LocAgent。
在軟件開發和維護領域,代碼定位是開發者日常工作中的核心任務之一,需要開發者根據問題描述,例如,錯誤報告、功能請求或性能問題等,快速、準確地找到需要修改的代碼片段。
但傳統代碼定位方法在處理復雜代碼庫時,面臨復雜代碼庫導航困難,問題描述與代碼實體之間的語義鴻溝,多跳推理的困難等。而LocAgent可以有效解決這些難題,能自動、快速精準定、遍歷代碼。
開源地址:https://github.com/gersteinlab/LocAgent?tab=readme-ov-file
LocAgent的核心在于其“圖基代碼”表示,能將代碼庫解析為一個有向異構圖,從而捕捉代碼的層次結構和依賴關系。
在這個圖中,節點代表代碼庫中的實體,包括文件、類、函數等,而邊則表示這些實體之間的關系,例如文件之間的導入關系、函數之間的調用關系以及類之間的繼承關系,還能夠揭示出隱藏在代碼中的復雜依賴關系。
LocAgent首先會解析代碼庫中的每個文件,識別出其中的類、函數等代碼元素,并將它們作為節點加入到圖中。隨后,會分析這些代碼元素之間的關系,并將這些關系作為邊添加到圖中。
例如,如果一個函數調用了另一個函數,那么在圖中就會有一條從調用函數指向被調用函數的邊。通過這種方式,LocAgent能夠構建出一個全面且詳細的代碼庫圖表示,為后續的代碼定位任務提供了堅實的基礎。
LocAgent還通過稀疏層次實體索引來增強其搜索能力。這種索引機制為圖中的每個節點創建了多個索引,包括基于實體ID的索引、基于實體名稱的索引以及基于BM25算法的倒排索引。
這些索引能幫助LocAgent在幾秒鐘內快速定位到與問題描述相關的代碼實體,即使在大型代碼庫中也能保持高效的性能。
在構建了圖基代碼表示之后,LocAgent框架的下一步是如何利用這一結構化索引進行高效的代碼搜索。為此,LocAgent引入了基于Agent的代碼搜索,可以通過一系列工具來探索代碼庫,并找到與問題描述相關的代碼片段。
LocAgent為Agent提供了三種主要的工具,這些工具共同支持Agent在代碼庫中的高效搜索和推理。首先是SearchEntity工具,允許Agent通過關鍵詞搜索代碼庫中的相關實體。
當Agent接收到一個自然語言描述的問題時,它會首先提取出問題中的關鍵詞,然后利用SearchEntity工具在代碼庫的索引中查找與這些關鍵詞相關的代碼實體。這不僅能夠處理精確匹配的關鍵詞搜索,還能通過模糊搜索找到與輸入關鍵詞相關的代碼片段,從而為Agent提供更廣泛的搜索范圍。
第二個工具是TraverseGraph,允許Agent從一個給定的實體出發,沿著圖中的關系進行多跳遍歷。這一工具的設計靈感來自于代碼庫中復雜的依賴關系,很多時候,問題的根源可能隱藏在與問題描述中提到的代碼片段相隔數層的其他代碼中。
通過TraverseGraph工具,Agent可以沿著調用鏈、繼承鏈等關系逐步深入代碼庫,探索問題的潛在源頭。TraverseGraph工具支持自定義遍歷方向和跳數,使得Agent能夠靈活地探索代碼庫中的復雜依賴關系,從而更全面地理解問題的上下文。
第三個工具是RetrieveEntity,用于檢索指定實體的完整屬性。當Agent通過SearchEntity和TraverseGraph工具定位到可能相關的代碼實體后,需要獲取這些實體的詳細信息,以便進一步分析和判斷。RetrieveEntity能夠提供實體的完整代碼內容、文件路徑、行號等關鍵信息,為Agent的推理提供了充分的依據。
本文轉自 AIGC開放社區 ,作者:AIGC開放社區
原文鏈接:??https://mp.weixin.qq.com/s/nQwYTXShMcsXFPLnMiRMvQ??
