RGFL: Reasoning Guided Fault Localization for Automated Program Repair Using Large Language Models
本文提出了 RGFL,一种用于基于大语言模型的自动化程序修复的创新型推理引导故障定位方法,该方法利用层次化推理模块和两阶段排序方案,显著提高了项目级代码库上的文件级和元素级定位准确性,从而提升了端到端的修复成功率。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
想象一下,你是一位试图修理一台损坏机器的高级侦探,而这台机器位于一座巨大的、多层结构的工厂里。这台机器是一个计算机程序,而那个“损坏的零件”就是一个漏洞(Bug)。由于工厂规模如此之大(拥有数百万页的蓝图),你不可能阅读每一页蓝图来寻找错误。你需要一种方法,能够精准地缩小范围,定位到出错的具体房间和具体的工具。
这篇论文介绍了一种名为 RGFL(推理引导的故障定位)的新方法,旨在帮助人工智能(特别是大语言模型,即 LLM)成为更出色的侦探。
以下是其工作原理的拆解,使用了简单的类比:
问题所在:“信息过载”陷阱
在过去,当 AI 尝试修复代码时,经常会被信息淹没。
- 旧方法: 想象一下,你递给侦探一叠 1,000 页的蓝图,并对它说:“找到那根破裂的水管。”侦探可能会根据哪张蓝图看起来与漏水描述最“相似”来进行猜测(例如:“它提到了水,所以一定是厨房”)。这就像是在进行关键词匹配。
- 结果: 侦探可能会选中厨房的蓝图,但漏水点实际上是在浴室。AI 修错了地方,导致机器依然处于损坏状态。
解决方案:“先思考,后猜测”策略
RGFL 改变了游戏规则,它强制要求 AI 在挑选嫌疑对象之前先进行思考和解释。
- 审讯(推理): 与其只是扫描蓝图,不如让 AI 一次只观察一个特定的房间(文件)或一个特定的工具(函数)。它会问自己:“这个工具是做什么用的?它与报告中描述的泄漏有什么关系?”
- 类比: 侦探不再只是看着一把扳手的图片并说“这看起来像个水管工具”,而是拿起扳手说:“这把扳手是用来拧紧控制水压的阀门的。如果压力不对,这很可能就是罪魁祸首。”
- 排序: AI 会为每一个候选对象生成一段书面解释。然后,它会将这些解释与漏洞报告进行对比,看哪一个在逻辑上最合理。
- 论文的观点: 这种“推理”步骤比单纯的关键词匹配要好得多。它能帮助 AI 理解问题的“因果关系”,而不仅仅是表面细节。
结果:大海捞针
研究人员在真实的软件项目(如著名的 SWE-bench 数据集)上测试了该方法。以下是他们的发现:
- 更好的文件定位: 当在工厂中寻找正确的“房间”(文件)时,RGFL 找到正确文件的频率远高于以往的方法。
- 数据统计: 在一次测试中,旧方法找到正确文件的概率为 71%,而 RGFL 为 85%。
- 更好的工具定位: 一旦找到了正确的房间,RGFL 在寻找需要修复的具体“工具”(代码元素)方面也表现得更为出色。
- 数据统计: 旧方法找到精确工具的概率为 36%,而 RGFL 则达到了 69%。
- 修复更多漏洞: 由于 AI 观察的位置更加准确,它实际修复了更多的损坏程序。
- 数据统计: 使用 RGFL 后,成功修复的漏洞数量比现有的最佳方法提升了近 13%。
一个意外的发现:有时“少即是多”
研究人员还进行了一项特别实验,以观察如果给 AI 提供“完美”的信息(明确告诉它哪个文件、哪个工具以及哪一行代码出错了)会发生什么。
- 发现: 即使他们告诉了 AI 精确的文件,AI 有时仍然会失败。
- 反转: 在某些情况下,告诉 AI 应该修改哪一行具体的代码反而会让它感到困惑。这就像是告诉一位厨师:“请把盐撒在第三粒米上。”厨师会过度关注那一粒米,从而忽略了整道菜。
- 教训: 有时,告诉 AI“问题在这个特定的房间里”并让它自行处理细节,比精确到微观层面的微观管理效果更好。
总结
这篇论文证明,如果你要求 AI 解释其关于某段代码为何可能损坏的思考过程,它就会变成一个更出色的侦探。它不再基于表面相似性进行猜测,而是开始寻找真正的诱因。这使得它能更快地找到正确的代码并修复更多的软件漏洞。
该论文并未声称:
- 它并不声称适用于每种编程语言(他们仅测试了 Python 和 Java)。
- 它并不声称这是解决所有软件错误的“万灵药”(即使有了正确的定位,有些漏洞对 AI 来说仍然过于困难)。
- 它并不声称该技术已准备好用于医疗或关键安全系统;这是一项针对开源软件项目的研究性研究。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。