
一、项目概述
LocAgent是由斯坦福大学、耶鲁大学和南加州大学等机构联合开发的代码问题定位框架。它通过将代码库解析为有向异构图,结合大型语言模型(LLM)的多跳推理能力,能够高效地搜索和定位代码库中相关的代码实体。这种基于图表示的方法不仅捕捉了代码的层次结构和复杂依赖关系,还显著提升了代码问题定位的准确性和效率。

二、技术原理
(一)基于图表示和大型语言模型(LLM)的多跳推理
LocAgent将代码库解析为有向异构图,节点代表代码库中的实体(如文件、类、函数),边代表实体之间的关系(如导入、调用、继承)。这种图结构能够捕捉代码的层次结构和复杂的依赖关系。基于LLM的推理能力,LocAgent可以进行多跳推理,即使问题描述中没有直接提到受影响的代码片段,也能通过图中的关系链找到隐藏在多层依赖中的问题源头。
(二)高效搜索工具
LocAgent提供了一套基于Agent的代码搜索工具,包括SearchEntity、TraverseGraph和RetrieveEntity。SearchEntity可以根据关键词搜索代码库中的相关实体;TraverseGraph可以从给定实体出发,沿着图中的关系进行多跳遍历;RetrieveEntity可以检索指定实体的完整属性,包括代码内容、文件路径和行号等。
(三)稀疏层次索引
LocAgent构建了稀疏层次索引,包括基于实体ID的索引、基于实体名称的索引和基于BM25算法的倒排索引。这些索引能够快速定位与问题描述相关的代码实体,即使在大型代码库中也能保持高效的性能。
三、主要功能
(一)快速定位问题代码
LocAgent可以根据自然语言描述的问题,快速定位到代码库中需要修改的具体文件、类、函数或代码行。这一功能极大地减少了开发者在调试和理解代码上花费的时间,提高了开发效率。
(二)多类型问题支持
LocAgent支持多种类型的软件开发和维护任务,包括错误修复、功能添加、性能优化和安全漏洞修复。无论是在修复已知错误,还是在添加新功能时,LocAgent都能提供有效的支持。
(三)多跳推理能力
LocAgent的多跳推理能力使其能够处理复杂的代码依赖关系。即使问题的根源隐藏在多层依赖之下,LocAgent也能通过逐步推理找到问题的源头,而不仅仅是停留在表面的代码片段。
(四)高效搜索与索引
通过构建稀疏层次索引,LocAgent能够在大型代码库中快速定位相关代码实体。这使得开发者能够在短时间内找到需要修改的代码片段,而无需手动浏览整个代码库。
四、应用场景
(一)错误修复
LocAgent可以根据错误报告快速找到问题代码的位置,减少调试时间。开发者只需输入错误描述,LocAgent就能定位到相关的代码片段,帮助开发者快速修复错误。
(二)功能添加
在现有代码库中添加新功能时,LocAgent可以帮助开发者找到与新功能相关的代码片段,确定最佳的插入点。这使得开发者能够更高效地进行功能扩展,而无需花费大量时间寻找合适的代码位置。
(三)性能优化
LocAgent可以定位到性能瓶颈相关的代码片段,并提供优化建议。开发者可以通过LocAgent快速找到影响性能的代码位置,从而有针对性地进行优化。
(四)安全漏洞修复
LocAgent能够快速找到与安全漏洞相关的代码片段,帮助开发者修复漏洞。这对于提高软件的安全性至关重要,尤其是在面对复杂的代码库时。
(五)代码维护与重构
LocAgent可以帮助开发者找到需要重构的代码片段,并提供详细的上下文信息。这使得代码维护和重构变得更加高效,减少了潜在的错误和风险。
五、快速使用
(一)环境搭建
git clone git@github.com:gersteinlab/LocAgent.git
cd LocAgent
conda create -n locagent python=3.12
conda activate locagent
pip install -r requirements.txt
(二)图索引生成
python dependency_graph/batch_build_graph.py \
--dataset 'czlll/Loc-Bench' \
--split 'test' \
--num_processes 50 \
--download_repo
(三)导出索引目录
export GRAPH_INDEX_DIR='{INDEX_DIR}/{DATASET_NAME}/graph_index_v2.3'
export BM25_INDEX_DIR='{INDEX_DIR}/{DATASET_NAME}/BM25_index'
(四)启动 LocAgent
python auto_search_main.py \
--dataset 'czlll/SWE-bench_Lite' \
--split 'test' \
--model 'azure/gpt-4o' \
--localize \
--merge \
--output_folder $result_path/location \
--eval_n_limit 300 \
--num_processes 50 \
--use_function_calling \
--simple_desc
六、结语
LocAgent作为斯坦福大学、耶鲁大学和南加州大学等机构联合推出的代码问题定位框架,凭借其基于图表示和LLM的多跳推理能力,在代码问题定位领域展现出了巨大的潜力和应用价值。它不仅能够快速准确地找到需要修改的代码片段,还支持多种类型的软件开发和维护任务,极大地提高了开发效率。
七、项目地址
GitHub仓库:https://github.com/gersteinlab/LocAgent
arXiv技术论文:https://arxiv.org/pdf/2503.09089
(文:小兵的AI视界)