又是一个让程序员狂欢的研究!来自 OpenHands、耶鲁、南加大和斯坦福的研究团队刚刚发布了LocAgent—— 一个专门用于代码定位的图索引 LLM Agent 框架,直接把代码定位准确率拉到了 92.7% 的新高度。该研究已被 ACL 2025 录用。
论文标题:LocAgent: Graph-Guided LLM Agents for Code Localization论文链接:https://arxiv.org/abs/2503.09089代码链接:https://github.com/gersteinlab/LocAgent
一、痛点很真实:代码定位到底有多难?
相信每个程序员都有过这样的经历:看到一个 bug 报告,满脸问号地想「这到底要改哪里?」。传统方法要么靠关键词匹配(太粗糙),要么直接把整个代码库丢给 LLMs(太低效),要么让 Agent 盲目遍历目录(太笨拙)。
问题的核心在于:自然语言描述的问题和真正需要修复的代码位置之间,往往隔着好几层调用关系。比如用户反馈「XSS 漏洞」,但实际需要修改的可能是某个深层的验证工具函数。
换言之,代码定位指的是在大型代码库中精确找到需要修改的代码位置,在软件开发与维护中,准确地定位代码问题是提高开发效率的关键(图 1 展示了四种常见的代码修复场景)。
图 1:给定一个代码库(左)和问题描述(中,包含四种场景的示例),代码定位需要识别出需要修改的相关代码位置(右),包括具体的文件、类和函数。LocAgent 旨在让 LLM Agent 自动完成这一过程。
自然语言中的问题描述(如错误报告)往往与真正的故障根因存在显著的语义差异与结构距离(如图 2 所示)。这不仅要求模型能够深入理解自然语言编写的错误报告,还需具备在庞大代码库中跨越层级结构和复杂依赖关系进行推理和追踪的能力。
图 2: 图中红色节点表示问题描述中明确提及的函数,黄色节点表示实际需要修改(修补)的函数。任务难度定义为代码图中从提及函数到目标修补函数之间的最短路径长度(最少跳数),图示例中任务难度为 2 跳。
二、LocAgent:给 LLM 装上「代码地图」
该研究团队的解决方案相当巧妙:首先他们把整个代码库解析成一张图,包含文件、类、函数之间的包含、调用、继承、导入关系。然后该团队为 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:
SearchEntity:该工具基于层次化实体索引,使用关键词搜索代码库中相关实体。当在上层索引中未能找到匹配项时,系统会自动使用下一层索引进行搜索,从精确匹配到模糊搜索,以查找最接近的匹配项。对于检索到的每个实体,SearchEntity 会返回该代码片段的摘要(如图 4,有折叠级别、预览级别和完整代码三级,可根据需要展开)。
图 4: 为高效的 Agent 代码交互而设计的不同输出格式示例。
RetrieveEntity:当 Agent 确定了某个代码实体很可能就是目标时,可以用此工具提取该实体的完整信息。当输入实体 ID,RetrieveEntity 输出该实体的文件路径、起止行号、完整代码内容等详细属性。TraverseGraph:该工具在代码图上执行类型感知的广度优先搜索。Agent 可以指定起始的实体 ID,以及希望遍历的方向、步数(hops)、实体类型和关系类型等参数。工具会在图中从起点出发按照要求走指定步数,返回遍历到的子图结构。通过设置不同的类型过滤,Agent 可以灵活地探索比如「沿调用关系向下追踪两步」或「查看从某类出发的继承层次」等等。值得一提的是,TraverseGraph 将返回的子图格式化成一种树状结构文本(见图 5),以便 LLM 更容易理解关系拓扑。
图 5:TraverseGraph 工具输出示例。
2.3 Agent 驱动的推理阶段
LocAgent 在提示设计上采用了「逐步思考」(Chain-of-Thought, CoT) 的策略,引导 LLM Agent 将代码定位任务分解为一系列步骤,模拟人类调试思路一步步逼近目标。整个问题求解过程可以概括为以下阶段:
问题理解与关键词提取:Agent 首先对输入的 issue 描述进行分析,划分出不同方面的信息,然后提取出与问题相关的关键词。这些关键词相当于为后续搜索指明了初步方向。链接关键词到代码实体:针对每个提取的关键词,Agent 调用 SearchEntity 工具在代码索引中查找匹配的代码实体。多跳推理,生成故障链路:接下来,Agent 会尝试串联线索,从报错表征推导故障原因。它先确定问题触发的初始入口点(例如触发错误的 API 或函数),然后以这些点为起点,在代码图上进行迭代探索:调用 TraverseGraph 沿调用关系或依赖关系向相关方向搜索;用 RetrieveEntity 查看某些关键节点的实现细节;必要时再次 SearchEntity 引入新的关键词。通过多轮交替使用这些工具,Agent 逐步构建起一条从问题症状到潜在根因的逻辑路径。锁定目标代码:在形成对问题的全面理解后,Agent 根据「故障链路」中暴露的可疑环节,定位出所有可能需要修改的目标代码实体(可能是若干个函数或类)。随后,Agent 对这些候选实体按相关性进行排序输出,并给出它们的文件路径以及简要的原因说明。
整个 LocAgent 的使用对用户来说非常简洁:只需输入自然语言的问题描述, LLM Agent 就会如上所述自主地完成一系列搜索、遍历、读取操作,最后给出代码定位结果。
三、实验结果:真香警告
LocAgent 在真实数据集上的表现和分析结果令人瞩目。研究中使用了既有的基准数据集(SWE-Bench Lite)以及团队新构建的 Loc-Bench,对比了多种基线方法的代码定位效果。
(1)代码定位效果出色
SWE-Bench Lite 是从 GitHub issue 中构建的仓库级代码修复数据集,也常用于代码定位评估,包含 300 个问题及其对应的修复代码,其中大部分为 bug 报告。基于该基准,LocAgent 实现了目前最优的代码定位准确率,显著优于现有方法。
相比传统的向量检索方法有显著提升:BM25 在文件级 Acc@5 上仅为 61.7%,而先进的代码嵌入模型如 CodeRankEmbed 也仅达到 84.7%;而 LocAgent 准确率高达 92.7%,在函数级定位中也同样显著优于这些方法。多步推理的 Agent 类方法整体上胜过基于固定流程的方法。基于固定流程的方法(如 Agentless)往往只能依据字面匹配找到有限的候选,而引入了 Agent 逐步探索后,能够考虑更广的范围,定位效果更好。在文件、模块、函数三个粒度上,LocAgent 全面超越了基于 GPT-4o 或 Claude-3.5 的现有 Agent 系统。使用 Claude-3.5 时,LocAgent 在 SWE-Bench Lite 文件级 Acc@5 达到 94%,在函数级定位上同样优于其他方法。LocAgent 搭配 Qwen2.5-32B (微调) 模型的性能几乎与 Claude-3.5 持平:在 SWE-Bench Lite 文件级 Top-5 准确率上,前者为 92.7%,后者约 94.2%,差距很小。而如果使用 Qwen2.5-7B (微调) 小模型,虽然准确率略有下降(约 88.3%,但仍超过绝大多数 baseline),其表现已能够逼近 GPT-4o 的效果。
(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 体验又要迎来一次重大升级了!
《www自慰被发现www》,《w3u7903ejky2ywls》美女隐私秘㊙️视频免费看
“一同看GⅤ入口”
精品Pron㊙️一区二区入口
……
06月01日
“男女洗澡互摸私密部位”江苏南通一公墓数十个墓盖被掀开
↓↓↓
06月01日,北江可能发生特大洪水 珠江防总、珠江委将应急响应级别提升至Ⅱ级,动漫❌c🐻黄扒衣服做妓女,附近学生24小时服务内容,成版one安装包苹果,一起草🌿久久蜜桃乌龙
06月01日,《全球冷暖 中国之道》:共绘人类命运共同体的绿色蓝图,浓精喷进老师黑色丝袜在线观看,ACG本子※ACG绅士里番,虞书欣被❌狂揉,玩弄银龙王粉嫩的小奶头小说
06月01日,王浩任中共浙江省委书记,扒开老师❌狂揉❌桃花岛动漫,欧亚做爰XXXⅩ性欧美小说,JanpanHD❌❌❌女同,猛男特大粗黑Gay男同志
06月01日|云南正式进入5G-A商用时代 发布十大应用场景|女警察被❌吸乳羞羞视频|亚洲AV无码秘桥本有菜|美女㊙️免费裸体视频漫画|一边憋尿一边被TK
06月01日|财政部:2023年中国一般公共预算收入超21万亿元|艾伦三笠同人本子211|黄昏和约尔洗澡无删减|❌❌视频老师大白兔|bdsm柔奴bdsmtvpee手铐
06月01日|“爱国知识分子的杰出典范——钱学森生平事迹展”在宁夏大学展出|精品无码久久国产2022|撕开👙摸美女奶头和屁股爽电视|娇妻边打电话边被躁BD在|16位妓女撒尿视频大全……
06月01日,南方降雨再度增多 北方大部以晴朗升温为主,美女脱个精光露出奶让变态玩视频,直男快递员的粗直Gay,免费无遮挡🔞视频网站黄漫,羞羞漫画❌破解版
06月01日,塞尔维亚泽蒙-博尔察大桥被称为“中国桥”,99鲁鲁精品㊙️一区二区三区,精品一区X❌❌呦交,老师好紧开裆蕾丝内裤动漫原神,杨钰莹被按在床狂躁
06月01日|沙特点球大战不敌韩国,曼奇尼提前退场|東京熱app免费下载|Japanese❌❌❌日本|美女打乳钉全程无遮挡|把女仆🌸吊起来揉搓双乳手游
06月01日,情牵两岸滇台同行 台湾网络新媒体人“寻宝”云南,中国公厕偷拍网站,性巴克app❤网站免费版下载,国产精品🈲719.cc,18禁❌❌女奥特曼被捏胸
06月01日,中新健康丨中疾控:得过甲流仍有可能得乙流,Free❌❌❌21HD,动漫做打扑克视频网站,免费看黄网站☀入口动漫,扒开老师❌狂揉❌电影
06月01日,广东省农信联社原主任苏宝玉接受审查调查 ,全黄裸体片西施,白鹭与白浊h文神里绫华,英雄联盟金克丝脚底图片,曰本Av高潮潮喷无码影视91
06月01日|郑林栋:激活大湾区融通发展的“一湾春水”|女同被❌狂揉大胸羞羞|调教母狗美妇母女|一级A片女处破7女视频|英雄联盟本子h18资源
06月01日|RCEP全面生效一周年 外贸企业享惠水平持续提升|国语对白做受❌❌❌按摩|双男主被❌到爽🔞流肌肉国产|玛奇玛被❌爆|18🈲小泬破白浆啪啪国外
06月01日|美国大选独立竞选人小肯尼迪宣布暂停竞选并支持特朗普|云曦被强行打开双腿灌满|小泽玛利亚av无码无删换脸|桃子形容女性哪个部位|男c男🔞黄㊙️❌B站
皇额娘推了熹娘娘原来是这个推,赵丽颖辛芷蕾合体走红毯|首届钱江源公路自行车赛收官|白丝校🌸久久美乳|无码日本H肉黄动漫软件|原神涩涩×🔞❌黄漫下载|明日香被扒开腿猛❌
监制:邓金木
策划:赖晗
主创:唐征宇 林箴贺 陈佛烘 颜亦阳 陈林韵
编辑:王家菁、段圣祺