❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发感兴趣,我会每日分享大模型与 AI 领域的开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术!
🥦 AI 在线答疑 -> 智能检索历史文章和开源项目 -> 丰富的 AI 工具库 -> 每日更新 -> 尽在微信公众号 -> 搜一搜:蚝油菜花 🥦
🔍 「调试时间砍半!斯坦福黑科技让代码问题无处藏身」
大家好,我是蚝油菜花。你是否也经历过这些编程至暗时刻——
- 👉 面对万行代码库,错误日志像天书找不到源头
- 👉 接手祖传代码,功能请求不知从哪开始修改
- 👉 性能优化时,在多层调用链里迷路到怀疑人生...
今天要解剖的 LocAgent ,正在重写代码调试规则!这个斯坦福×耶鲁的「代码CT扫描仪」:
- ✅ 多跳推理引擎:像侦探追踪线索般穿透复杂依赖关系
- ✅ 智能图谱构建:把代码库变成可导航的3D关系网
- ✅ 精准外科手术:直接定位到需要修改的特定代码行
已有团队用它1小时解决过去3天的调试难题,接下来将详解这个学术天团如何用图神经网络+大模型颠覆传统调试!
🚀 快速阅读
LocAgent是专为代码定位任务设计的智能框架。
- 功能:支持错误修复、性能优化等多类型代码定位需求
- 原理:通过图表示和多跳推理技术实现精准定位
LocAgent 是什么
LocAgent是由斯坦福大学、耶鲁大学和南加州大学联合开发的代码定位框架。它将代码库解析为有向异构图,通过捕捉代码结构和依赖关系,帮助开发者快速定位需要修改的代码部分。
该框架基于大型语言模型的多跳推理能力,提供高效的代码搜索工具,显著提升代码开发和维护效率。其创新性的图结构表示方法,能够处理复杂代码库中的多层次依赖关系。
LocAgent 的主要功能
- 快速定位问题代码:根据自然语言描述精准定位到具体文件、类或函数
- 多类型问题支持:覆盖错误修复、功能添加、性能优化等场景
- 智能依赖分析:自动追踪代码实体间的复杂调用关系
LocAgent 的技术原理
- 图表示技术:将代码库转化为包含文件、类、函数等实体的有向异构图
- 多跳推理机制:基于大语言模型穿透多层依赖定位问题根源
- 稀疏层次索引:通过BM25等算法实现大型代码库的高效检索
如何运行 LocAgent
LocAgent,这是一个通过图表示来解决代码定位问题的框架。通过将代码库解析为有向异构图,LocAgent 创建了一个轻量级的表示,捕获代码结构及其依赖关系,使 LLM 代理能够通过强大的多跳推理有效地搜索和定位相关实体。
开发环境设置
请按照以下步骤设置您的开发环境:
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
启动 LocAgent
1. 解析代码库(可选但推荐)
您可以选择解析代码库以批量生成图索引:
python dependency_graph/batch_build_graph.py \
--dataset 'czlll/Loc-Bench' \
--split 'test' \
--num_processes 50 \
--download_repo
dataset
: 选择基准数据集(默认为SWE-Bench_Lite
),您可以从['czlll/SWE-bench_Lite', 'czlll/Loc-Bench']
(适用于代码定位)和 SWE-bench 系列数据集如['princeton-nlp/SWE-bench_Lite', 'princeton-nlp/SWE-bench_Verified', 'princeton-nlp/SWE-bench']
中选择。repo_path
: 您计划拉取或已经拉取代码库的目录。index_dir
: 生成的图索引将保存的基本目录。download_repo
: 是否在索引前下载代码库到repo_path
。
2. 导出图索引和 BM25 稀疏索引目录
如果尚未生成,图索引将在定位过程中生成。
export GRAPH_INDEX_DIR='{INDEX_DIR}/{DATASET_NAME}/graph_index_v2.3'
export BM25_INDEX_DIR='{INDEX_DIR}/{DATASET_NAME}/BM25_index'
3. 运行脚本启动 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
localize
: 设置以启动定位过程。merge
: 合并多个样本的结果。use_function_calling
: 启用 LLM 的函数调用功能。如果禁用,将使用 codeact 支持函数调用。simple_desc
: 由于某些 LLM 的限制,使用简化的函数描述。对于使用 Claude 的情况,将其设置为False
以获得更好的性能。
4. 评估
定位后,结果将保存在 JSONL 文件中。您可以使用 evaluation.eval_metric.evaluate_results
评估它们。请参阅 evaluation/run_evaluation.ipynb
以获取演示。
资源
- GitHub 仓库:https://github.com/gersteinlab/LocAgent
❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发感兴趣,我会每日分享大模型与 AI 领域的开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术!
🥦 AI 在线答疑 -> 智能检索历史文章和开源项目 -> 丰富的 AI 工具库 -> 每日更新 -> 尽在微信公众号 -> 搜一搜:蚝油菜花 🥦