LocAgent:一款开源的辅助代码定位的程序员工具

LocAgent是什么?

LocAgent 是由斯坦福大学、耶鲁大学和南加州大学等机构联合开发的代码定位框架。它通过将代码库解析为有向异构图,捕捉代码的结构和依赖关系,从而帮助开发者快速准确地找到需要修改的代码部分。

GoPfVBRbYAMAm7r.webp

核心技术

  • 图基代码表示:LocAgent 将代码库解析为一个有向异构图,其中节点代表代码库中的实体(如文件、类、函数等),边则表示这些实体之间的关系(如文件之间的导入关系、函数之间的调用关系以及类之间的继承关系)。这种图结构能够揭示隐藏在代码中的复杂依赖关系,为后续的代码定位任务提供了坚实的基础。

  • 多跳推理机制:基于大型语言模型(LLM)的多跳推理能力,LocAgent 可以穿透多层依赖关系,定位问题代码的根源。例如,在处理复杂的代码库时,即使目标代码没有在问题描述中明确提及,LocAgent 也能通过图结构进行推理,找到相关的代码实体。

  • 稀疏层次索引:LocAgent 通过稀疏层次实体索引来增强其搜索能力。这种索引机制为图中的每个节点创建了多个索引,包括基于实体 ID 的索引、基于实体名称的索引以及基于 BM25 算法的倒排索引。这些索引能够帮助 LocAgent 在几秒钟内快速定位到与问题描述相关的代码实体,即使在大型代码库中也能保持高效的性能。

主要功能

  • 快速定位问题代码:根据自然语言描述的问题(如错误报告、功能请求、性能问题或安全漏洞),LocAgent 能够快速定位到代码库中需要修改的具体文件、类、函数或代码行。

  • 多类型问题支持:LocAgent 支持多种类型的软件开发和维护任务,包括错误修复、功能添加、性能优化和安全漏洞修复。

  • 智能依赖分析:自动追踪代码实体间的复杂调用关系。

性能表现

  • 在 SWE-Bench-Lite 数据集上,LocAgent 使用 Qwen2.5-32B 模型时,文件级定位准确率达到了 92.7%,相比 Claude-3.5 的 86.13% 有显著提升。

  • 在 Loc-Bench 数据集上,LocAgent 实现了 84.59% 的 Acc@5 和 87.06% 的 Acc@10 文件级定位准确率。

  • LocAgent 的成本效益也非常高,使用 Qwen2.5-7B 模型时,每个样本的成本仅为 0.05 美元,相比 Claude-3.5 的 0.66 美元,成本降低了约 86%。

应用场景

  • 错误修复:快速定位导致错误的代码位置,减少调试时间。

  • 功能添加:帮助开发者找到需要添加新功能的代码位置。

  • 性能优化:定位影响性能的代码部分,进行优化。

  • 安全漏洞修复:快速找到安全漏洞相关的代码,及时修复。

技术原理

图基代码表示

  • LocAgent 将代码库解析为有向异构图,节点代表代码实体(文件、类、函数等),边表示调用、继承等依赖关系。这种结构能捕捉复杂代码库的层次结构和语义关联。

多层索引检索体系

  • 实体 ID 索引:支持精确匹配(如搜索特定类或方法)。

  • 语义模糊索引:基于 BM25 算法,允许自然语言查询(如“处理订单支付的逻辑”)。

  • 结构特征索引:通过代码骨架特征(如函数参数列表)支持“按结构找相似”。

三大智能工具

  • SearchEntity:通过关键词触发智能扫描,结合 NLP 提取核心实体并返回匹配结果。

  • TraverseGraph:沿调用链、继承链等关系进行多跳遍历,穿透复杂依赖关系。

  • RetrieveEntity:检索实体的完整属性(代码内容、文件路径等),辅助深度分析。

LocAgent 的使用方法

环境准备

安装依赖:LocAgent 依赖于 Python 环境,需要安装 Python 3.8 及以上版本。此外,还需要安装一些 Python 包,如 torch、transformers 等。可以通过以下命令安装:

pip install -r requirements.txt

下载代码库:LocAgent 支持多种数据集,如 SWE-Bench_Lite 和 Loc-Bench 等。可以根据需求选择合适的数据集,并将其下载到本地。例如:

git clone https://github.com/czlll/SWE-bench_Lite.git

代码库解析

生成图索引:LocAgent 需要将代码库解析为有向异构图,并生成图索引。可以通过以下命令完成:

python parse.py --dataset czlll/SWE-bench_Lite --repo_path ./SWE-bench_Lite --index_dir ./index

其中,--dataset 指定数据集名称,--repo_path 指定代码库路径,--index_dir 指定生成的图索引保存路径。

启动 LocAgent

运行脚本:启动 LocAgent 进行代码定位,可以使用以下命令:

python run.py --localize --dataset czlll/SWE-bench_Lite --repo_path ./SWE-bench_Lite --index_dir ./index --use_function_calling True

其中,--localize 表示启动定位过程,--use_function_calling 启用 LLM 的函数调用功能。

评估结果

评估定位结果:定位完成后,结果将保存在 JSONL 文件中。可以使用 LocAgent 提供的评估工具对结果进行评估。例如:

python evaluation/run_evaluation.py --result_file ./results.jsonl

其中,--result_file 指定定位结果文件路径。

Github项目:https://github.com/gersteinlab/LocAgent

收藏

相关文章

最新工具
OPPO小布助手网页版
OPPO小布助手网页版

网址是xiaobu.coloros.com ,融合满血版Deep...

OldPicRestore
OldPicRestore

一个免费的老照片修复工具,可修复老照片中的损坏、模糊和褪色问题,...

HaiSnap
HaiSnap

一个适合小白用户快速开发简单应用的零代码开发平台。用户只需描述需...

OpenCut
OpenCut

一款智能音视频剪辑工具,具备去水印、视频转GIF、音频提取、人声...

Singify
Singify

一款FineShare推出的在线AI音乐与歌曲生成器,可将文本、...

iFable AI
iFable AI

一个结合了冒险棋盘游戏、《龙与地下城》和视觉小说叙事元素的角色扮...

Replit Ghostwriter
Replit Ghostwriter

一款由Replit公司推出的 AI 编程助手,内置于 Repli...

夸克浏览器AI助手
夸克浏览器AI助手

一个功能强大的浏览器插件。支持多种浏览器,包括Chrome、Ed...

达医智影
达医智影

阿里巴巴达摩院医疗AI实验室自研的智能读片产品。它通过常规的胸部...

Noiz.io
Noiz.io

一款AI驱动的YouTube 视频摘要工具,可以快速提取视频的关...