又是一个让程序员狂欢的研究!来自 OpenHands、耶鲁、南加大和斯坦福的研究团队刚刚发布了 LocAgent—— 一个专门用于代码定位的图索引 LLM Agent 框架,直接把代码定位准确率拉到了 92.7% 的新高度。该研究已被 ACL 2025 录用。
相信每个程序员都有过这样的经历:看到一个 bug 报告,满脸问号地想「这到底要改哪里?」。传统方法要么靠关键词匹配(太粗糙),要么直接把整个代码库丢给 LLMs(太低效),要么让 Agent 盲目遍历目录(太笨拙)。
问题的核心在于:自然语言描述的问题和真正需要修复的代码位置之间,往往隔着好几层调用关系。比如用户反馈「XSS 漏洞」,但实际需要修改的可能是某个深层的验证工具函数。
换言之,代码定位指的是在大型代码库中精确找到需要修改的代码位置,在软件开发与维护中,准确地定位代码问题是提高开发效率的关键(图 1 展示了四种常见的代码修复场景)。
图 1:给定一个代码库(左)和问题描述(中,包含四种场景的示例),代码定位需要识别出需要修改的相关代码位置(右),包括具体的文件、类和函数。LocAgent 旨在让 LLM Agent 自动完成这一过程。
自然语言中的问题描述(如错误报告)往往与真正的故障根因存在显著的语义差异与结构距离(如图 2 所示)。这不仅要求模型能够深入理解自然语言编写的错误报告,还需具备在庞大代码库中跨越层级结构和复杂依赖关系进行推理和追踪的能力。
图 2: 图中红色节点表示问题描述中明确提及的函数,黄色节点表示实际需要修改(修补)的函数。任务难度定义为代码图中从提及函数到目标修补函数之间的最短路径长度(最少跳数),图示例中任务难度为 2 跳。
该研究团队的解决方案相当巧妙:首先他们把整个代码库解析成一张图,包含文件、类、函数之间的包含、调用、继承、导入关系。然后该团队为 LLM Agent 提供简洁统一的图原语接口,以支持离效探索代码库。该方法通过将代码库解析为异构图表示,让大语言模型能够像使用地图一样高效地在代码中「移动」,实现多跳推理,逐步接近目标代码。
图 3:LocAgent 框架概览
如图 3 所示,LocAgent 首先将代码库解析为一个异构图表示,图中包含多种类型的代码实体及其依赖关系。在此基础上,系统构建了分层稀疏索引,用于支持高效的内容检索与结构化探索。借助这些索引,LocAgent 能够结合图结构与工具接口,执行由 Agent 驱动的逐步搜索过程,精准完成代码定位任务。
2.1 代码表示构建过程
代码图表示构建:为统一表示代码库中的结构与语义信息,LocAgent 基于抽象语法树(AST) 对代码库进行解析,构建一个异构有向图 作为结构化索引,详细表示了代码目录、文件、类、函数之间的包含、调用、导入和继承关系,使得隐式依赖显性化,便于 LLM 高效推理。
这种图结构的优势在于:即使两个代码片段分处不同模块,只要存在调用或继承关系,在图上它们就会变得「邻近」。比如,以往基于目录导航的方法会认为远隔两个子目录的模块毫不相干,但如果模块 A 函数调用了模块 B,在 LocAgent 的图中 A 和 B 会通过调用边直接连接,使它们在该图结构上靠近。对于代码定位任务,这种「邻近」至关重要,因为许多问题不是局限在单个文件夹内部,而是通过调用链跨越多个模块。
2.2 提供工具接口供 Agent 查询
构建好代码图后,LocAgent 提供了统一的工具接口,让 LLM Agent 能够方便地查询图结构和代码内容。主要包括以下三个 API:
图 4: 为高效的 Agent 代码交互而设计的不同输出格式示例。
图 5:TraverseGraph 工具输出示例。
2.3 Agent 驱动的推理阶段
LocAgent 在提示设计上采用了「逐步思考」(Chain-of-Thought, CoT) 的策略,引导 LLM Agent 将代码定位任务分解为一系列步骤,模拟人类调试思路一步步逼近目标。整个问题求解过程可以概括为以下阶段:
整个 LocAgent 的使用对用户来说非常简洁:只需输入自然语言的问题描述, LLM Agent 就会如上所述自主地完成一系列搜索、遍历、读取操作,最后给出代码定位结果。
LocAgent 在真实数据集上的表现和分析结果令人瞩目。研究中使用了既有的基准数据集(SWE-Bench Lite)以及团队新构建的 Loc-Bench,对比了多种基线方法的代码定位效果。
(1)代码定位效果出色
SWE-Bench Lite 是从 GitHub issue 中构建的仓库级代码修复数据集,也常用于代码定位评估,包含 300 个问题及其对应的修复代码,其中大部分为 bug 报告。基于该基准,LocAgent 实现了目前最优的代码定位准确率,显著优于现有方法。
(2)多任务场景下的泛化能力
由于 SWE-Bench Lite 数据集过于偏重 Bug 类型,团队打造了新的 Loc-Bench 基准,用于全面评估方法在多样化软件维护任务中的定位能力。Loc-Bench 共包含 560 个真实 GitHub issue,覆盖 Bug 修复、功能新增、安全漏洞与性能优化四大类,任务类型更加均衡,贴近实际工程场景。
这个研究最让人兴奋的地方在于:开源模型经过微调后,也能达到商用大模型的效果。他们提供了两个版本,1. Qwen2.5-7B 微调版:性能媲美 GPT-4o,单次处理成本仅 $0.05;2.Qwen2.5-32B 微调版:逼近 Claude-3.5 水平,成本节省 86%。这对于需要大规模部署的企业来说,这简直是降本增效的神器。
具体而言,微调的 Qwen2.5-7B 模型,LocAgent 在 Loc-Bench 四类场景下的平均文件级 Acc@5 为 76.8%,函数级 Acc@15 为 46.9%,已接近 SWE-Agent 搭配 Claude-3.5 的表现(后者函数级约 45.4%)。进一步将 LocAgent 与 Claude-3.5 结合后,文件级平均准确率可提升至 81.1%,在四类任务中几乎全面超越其他方法。
研究团队验证了一个关键点:更准确的代码定位直接提升问题解决率。在 GitHub 问题自动修复任务中,使用 LocAgent 的 Pass@10 成功率比基线方法提升了 12%。这意味着这项技术不仅仅是个「定位工具」,而是能实实在在提升整个软件维护流程效率的利器。
该团队进一步从不同角度展开分析,探讨其在复杂任务中的稳定性、成本效率、关键组件作用以及对下游应用的实际价值。
(1)难度分级实验与多跳鲁棒性
为了深入了解 LocAgent 的能力,该团队还按照任务的难度对性能进行了分析。该团队将「难度」用代码图上函数距离(hop 数)来衡量:即 Issue 描述中提及的函数与实际需要修改的函数之间的最短路径。直观地说,hop=0 表示 Issue 直接提到了需要改的函数名;hop=1 表示目标函数是 Issue 中提到的函数之间有直接关系,hop 数越大则定位难度越高。
实验发现:随着 hop 数增加,所有方法的定位准确率都在下降。毕竟关联越不直观,模型需要推理的链路就越长。不过,不同方法的鲁棒性差异明显:Agent 类方法在高难度下的性能下降幅度明显小于检索类方法。特别是 LocAgent 借助图结构索引,在 hop 数增加时仍能保持相对较高的准确率,表现出较好的鲁棒性。
相比之下,传统检索方法在需要两跳以上时几乎失效,在函数级定位上即使目标函数名字就出现在查询里,有时都找不到(因为它们往往把查询当做整体,无法拆解处理细节)。
(2)效果与成本比较
借助结构化图索引与工具调用,LocAgent 仅需 6~9 轮交互即可完成一次代码定位任务,推理过程高效。此外,该团队利用开源模型取得了媲美商用大模型的结果,同时大幅降低推理成本,具备实际落地部署的可行性。
具体来看,使用 Claude-3.5 等商用 API 模型时,每个 Issue 的平均处理成本约为 $0.66;而使用本地部署的 Qwen2.5-32B 模型,成本降至约 $0.09,降低了 86%。若进一步采用 7B 的小模型,处理成本可低至 $0.05,仍能保持优于大多数方法的性能。从函数级准确率与成本的比值来看,微调后的 Qwen-2.5-7B 是性价比最高的方案,其效率优于所有商用模型;Qwen-2.5-32B 次之,也显著优于 Claude-3.5。这表明,结合 LocAgent 框架,开源模型不仅具备性能竞争力,更具部署经济性。
(3)应用效果:高质量定位显著提升问题解决率
为评估代码定位在实际软件维护任务中的影响,该团队进一步分析了 LocAgent 在自动解决 GitHub 问题中的效果。结果表明,随着定位准确率的提升,问题解决成功率显著提高,说明更精准的定位结果能够显著增强自动化代码修改的质量与稳定性。该发现验证了 LocAgent 不仅在定位本身表现优秀,也能有效推动下游任务的整体性能,具备实际工程价值。
LocAgent 的成功揭示了一个重要趋势:从「暴力计算」到「智能决策」的范式转变。传统方法要么把整个代码库直接丢给 LLM 进行暴力匹配,要么让 Agent 按照预设规则盲目遍历目录,这些都属于「计算密集型」的解决方案。而 LocAgent 通过图索引等结构化中间表示,将复杂问题进行结构化分解,然后让 LLM 承担更高层次的推理和决策任务。
这种「agentic retrieval」范式的核心在于决策智能化。通过图、树等结构化中间表示,信息变得更易于推理,Agent 能够根据具体问题动态调整搜索策略,而非死板地遵循预设路径。这代表了从「人工设计各种 RAG pipeline」向「让 AI 自主决策如何检索」的转变。
这种结合结构化索引与 LLM 智能体协同设计的范式,很可能成为未来 AI 工程应用的标准模式。不再是让 LLM 做更多计算,而是让 LLM 做更智能的决策 - 程序员的 debugging 体验又要迎来一次重大升级了!
文章来自于“机器之心”,作者“机器之心”。
【开源免费】Browser-use 是一个用户AI代理直接可以控制浏览器的工具。它能够让AI 自动执行浏览器中的各种任务,如比较价格、添加购物车、回复各种社交媒体等。
项目地址:https://github.com/browser-use/browser-use
【开源免费】AutoGPT是一个允许用户创建和运行智能体的(AI Agents)项目。用户创建的智能体能够自动执行各种任务,从而让AI有步骤的去解决实际问题。
项目地址:https://github.com/Significant-Gravitas/AutoGPT
【开源免费】MetaGPT是一个“软件开发公司”的智能体项目,只需要输入一句话的老板需求,MetaGPT即可输出用户故事 / 竞品分析 / 需求 / 数据结构 / APIs / 文件等软件开发的相关内容。MetaGPT内置了各种AI角色,包括产品经理 / 架构师 / 项目经理 / 工程师,MetaGPT提供了一个精心调配的软件公司研发全过程的SOP。
项目地址:https://github.com/geekan/MetaGPT/blob/main/docs/README_CN.md
【开源免费】graphrag是微软推出的RAG项目,与传统的通过 RAG 方法使用向量相似性作为搜索技术不同,GraphRAG是使用知识图谱在推理复杂信息时大幅提高问答性能。
项目地址:https://github.com/microsoft/graphrag
【开源免费】Dify是最早一批实现RAG,Agent,模型管理等一站式AI开发的工具平台,并且项目方一直持续维护。其中在任务编排方面相对领先对手,可以帮助研发实现像字节扣子那样的功能。
项目地址:https://github.com/langgenius/dify
【开源免费】RAGFlow是和Dify类似的开源项目,该项目在大文件解析方面做的更出色,拓展编排方面相对弱一些。
项目地址:https://github.com/infiniflow/ragflow/tree/main
【开源免费】phidata是一个可以实现将数据转化成向量存储,并通过AI实现RAG功能的项目
项目地址:https://github.com/phidatahq/phidata
【开源免费】TaskingAI 是一个提供RAG,Agent,大模型管理等AI项目开发的工具平台,比LangChain更强大的中间件AI平台工具。
项目地址:https://github.com/TaskingAI/TaskingAI
【免费】ffa.chat是一个完全免费的GPT-4o镜像站点,无需魔法付费,即可无限制使用GPT-4o等多个海外模型产品。
在线使用:https://ffa.chat/
【开源免费】XTuner 是一个高效、灵活、全能的轻量化大模型微调工具库。它帮助开发者提供一个简单易用的平台,可以对大语言模型(LLM)和多模态图文模型(VLM)进行预训练和轻量级微调。XTuner 支持多种微调算法,如 QLoRA、LoRA 和全量参数微调。
项目地址:https://github.com/InternLM/xtuner