← 最新论文
🤖 AI

On the Role of Fault Localization Context for LLM-Based Program Repair

该研究通过大规模实证分析表明,在基于大语言模型的自动程序修复中,文件级定位是提升修复效果的关键因素,而盲目增加上下文(尤其是行级)往往因噪声放大导致性能下降,最优策略应结合高层语义理解与精确的行级定位。

原作者: Melika Sepidband, Hung Viet Pham, Hadi Hemmati

发布于 2026-04-08
📖 1 分钟阅读☕ 轻松阅读

原作者: Melika Sepidband, Hung Viet Pham, Hadi Hemmati

原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明

这篇论文探讨了一个非常有趣的问题:当人工智能(LLM)试图帮程序员修电脑代码里的 Bug 时,我们应该给这个 AI 看多少“背景资料”?

想象一下,你是一位超级天才的修车师傅(AI),你的任务是修好一辆抛锚的赛车(有 Bug 的代码)。为了修好它,你需要知道车哪里坏了。

这篇论文就是研究:到底该给你看多少张图纸、多少段视频,才能让你最快、最准地修好车?

1. 核心发现:不是“资料越多越好”

以前大家觉得,给修车师傅看的资料越全越好(比如把整辆车的说明书、所有零件的图纸都给他)。但这篇论文通过大量实验发现:给得太多,反而会把师傅搞晕,让他修错地方。

作者把“背景资料”分成了三个层级,就像看地图一样:

  • 文件级(File-level): 相当于告诉你“故障出在发动机舱还是轮胎"。
  • 元素级(Element-level): 相当于告诉你“故障出在火花塞还是油泵"。
  • 行级(Line-level): 相当于告诉你“故障出在火花塞的第 3 根电线"。

2. 三个层级的“修车秘籍”

📂 第一层:文件级(看大方向)—— 越全越好!

  • 发现: 如果只给师傅看坏掉的那个零件(比如只给火花塞),他可能修不好,因为他不知道这个零件和谁连着。
  • 比喻: 就像你修电脑,如果只给看坏掉的“显卡”,你可能不知道它和“电源”或“主板”的供电关系。
  • 结论: 给师傅看相关的整个零件包(文件),修好的概率会暴涨 15 到 17 倍!而且,用AI 智能搜索找出的相关零件包,比用死板的规则(比如“只要连线的都算”)找出来的更好、更省钱。

🔧 第二层:元素级(看具体部件)—— 看情况,别贪多

  • 发现: 在已经知道是哪个零件包的前提下,再给看具体的“火花塞”或“油泵”(函数/类),有时候有帮助,有时候没用。
  • 比喻: 如果你已经知道是发动机的问题,再给你看具体的“活塞”图纸,可能有用;但如果给你看一堆不相关的“排气管”图纸,反而干扰你。
  • 结论:AI 智能理解去挑相关的部件,比用死板的结构图(比如调用关系)挑出来的要好。但如果文件选对了,这一层加不加其实差别不大。

📝 第三层:行级(看具体代码行)—— 越少越好,越准越好!

  • 发现: 这是最反直觉的!给师傅看具体的“第几行代码”周围的几十行(比如前后各 10 行),反而经常把师傅搞砸
  • 比喻: 想象你在做手术,医生告诉你“切这里”,然后还硬塞给你看手术刀周围 10 厘米的皮肤、血管、甚至旁边的骨头。这些无关的噪音会让医生分心,甚至切错地方。
  • 结论: 对于具体的代码行,“精准定位”比“扩大范围”重要得多。如果不确定具体哪一行坏了,干脆别给行级信息,只给文件信息,效果反而比强行给一堆乱糟糟的代码行要好。

3. 最佳修车方案:聪明的组合拳

论文发现,最完美的修车策略不是“全给”或“全不给”,而是**“宽窄结合”**:

  • 宏观上(文件/元素):宽泛的、智能搜索来的背景资料。让 AI 理解整个系统的运作逻辑(就像给修车师傅看整辆车的结构图)。
  • 微观上(代码行):精准的、最小的修改点。告诉 AI“就在这儿动刀”,不要给周围一堆废话(就像只给修车师傅看那个坏掉的螺丝,别给他看整个引擎盖)。

最佳公式:

AI 智能找出的相关文件 + AI 智能找出的相关部件 + 精准定位的坏代码行 = 修车成功率最高

4. 为什么有时候给多了反而坏事?

论文通过案例分析发现,给太多资料会导致 AI 犯两种错:

  1. 过度联想(Over-generalization): 看到一堆资料,AI 觉得“既然这里有问题,那整个系统可能都要改”,结果把简单的修螺丝变成了重新设计整车。
  2. 被带偏(Distraction): 资料里混入了不相关的代码,AI 被这些“噪音”吸引,去修了那些本来没坏的地方。

总结

这篇论文告诉我们,在训练 AI 修代码时,不要盲目地堆砌资料

  • 文件层面:广,用 AI 智能去搜相关的。
  • 代码行层面:,越精准越好,千万别给无关的“上下文”把 AI 搞晕。

这就好比教人解题:给他看相关的知识点(文件)很有用,但别把整本教科书都塞给他,只要告诉他具体哪一步算错了(精准行)就够了。

您所在领域的论文太多了?

获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。

试用 Digest →