How Do LLMs Read Bug Reports? An Empirical Study of Attention in LLMs for Automated Program Repair
本文提出了首个实证研究,证明了成功的基于大语言模型的自动化程序修复依赖于对缺陷报告中多样化诊断组件的弥散性注意力,而失败则是由于对元数据的过度局部化注意力所致,从而强调了注意力分配失当是导致修复不一致性的关键因素。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
侦探的困境:为什么 AI 有时会错过线索
想象你是一名正在试图破解谜团的侦探。你的笔记本里写满了线索:目击者的陈述、一张模糊的照片、一份嫌疑人名单,以及一张犯罪现场地图。为了破案,你需要阅读每一页,将点与点连接起来,并弄清楚哪些线索才是真正重要的。现在,想象你雇佣了一名超级聪明的机器人侦探来做同样的工作。你把笔记本交给它,它瞬间就写出了解决方案。但奇怪的地方在于:有时这个机器人能完美地解决谜团,而有时它却彻底失败了——即便你给它的是完全相同的笔记本!
这就是**大语言模型(LLMs)与自动化程序修复(Automated Program Repair)**的世界。LLM 就像那些超级聪明的机器人;它们是基于海量文本和代码训练出来的 AI 系统。它们可以写故事、回答问题,甚至修复计算机程序中的漏洞(bug)。“自动化程序修复”只是一个高级术语,指的是要求 AI 查看一段损坏的软件及其问题描述,然后编写代码来修复它。但开发者们注意到了一些令人沮丧的现象:这些 AI 侦探并不稳定。它们可能轻而易举地修复一个漏洞,却在旁边一个几乎完全相同的漏洞面前败下阵来。科学家们想知道:为什么? 是 AI 仅仅在瞎猜,还是它看错了线索?本论文深入研究了 AI 的“大脑”,旨在观察它在尝试修复程序时究竟在关注什么。
论文的核心发现:AI 看向哪里至关重要
在这项研究中,研究人员决定通过一场“找不同”的游戏来观察 AI 的注意力。他们从流行的软件项目中提取了 319 个真实的漏洞(使用 Python 和 Java 编写),并要求三个不同的 AI 模型来修复它们。其中一些模型是大型、昂贵的闭源模型(如专有的 claude-4-sonnet),另一些则是开源模型(如 gpt-oss-20b 和 qwen-3-32b)。
为了弄清楚 AI 在思考什么,研究人员使用了一种巧妙的技巧,称为扰动分析(perturbation analysis)。想象你有一份蛋糕的食谱,你想知道哪种原料最重要。你可以尝试在没有面粉的情况下烤一次蛋糕,或者在没有糖的情况下烤一次,看看哪种情况会让蛋糕彻底失败。研究人员对漏洞报告也做了同样的操作。他们拿出一份漏洞报告——通常包含“发生了什么错”、“如何让它再次报错”、“使用了哪个版本的软件”以及“代码长什么样”等部分——然后他们秘密地一次删除一个部分。接着,他们要求 AI 再次尝试修复该漏洞。如果 AI 的修复方案在删除某个部分后发生了很大变化,这意味着 AI 确实非常关注那个部分。如果修复方案保持不变,则说明 AI 并不在意那个部分。
“弥散型” vs. “局部型” 注意力模式
研究人员发现了 AI 观察线索的两种截然不同的方式,而这些模式揭示了修复是否成功的关键。
1. “弥散型”侦探(胜出者):
当 AI 成功时,它的表现像一名细致入微的侦探。它将其注意力分散在漏洞报告的许多不同部分。它查看了漏洞描述(发生了什么的叙述)、堆栈轨迹(stacktrace)(指向精确代码行的技术错误日志)以及测试用例(代码应当如何表现的示例)。研究人员称之为弥散性注意力(diffused attention)。这就像 AI 正在阅读整本笔记本,将目击者的故事与地图和照片联系在一起。
- 结果: 当 AI 这样做时,它修复漏洞的可能性大大增加。事实上,研究发现,“弥散性注意力”与成功之间存在强关联。
2. “隧道视野”侦探(失败者):
当 AI 失败时,它的表现像是一个患有“隧道视野”的侦探。它会对一个微小的、无关紧要的细节产生痴迷,并忽略其他一切。通常,它会固着于版本信息(例如“软件版本 1.2.3”或“操作系统:Linux”)。这就像一名侦探忽略了凶器和目击者,反而把所有时间都花在盯着嫌疑人的鞋码上看。
- 结果: 当 AI 过度关注这些枯燥的元数据细节时,它通常会修复失败。研究表明,“局部性注意力”(即只关注单一事物)是修复失败的一个强烈信号。
AI 与人类在重要性判断上达成共识吗?
研究人员还想知道,AI 观察的线索是否与人类开发人员观察的线索一致。为了找出答案,他们请了 4 名经验丰富的开发人员阅读了 100 份相同的漏洞报告,并标记出他们认为最重要的部分。
结果喜忧参半:
- 好消息: 当 AI 成功 时,它通常观察的是人类认为重要的部分。AI 与人类在顶级线索(如漏洞描述)上的吻合度约为 54%。
- 坏消息: 当 AI 失败 时,它经常忽略人类的顶级线索,转而关注错误的东西(如版本号)。研究发现,AI 的注意力与人类的注意力越匹配,修复成功的概率就越高。
本论文排除了什么
需要注意的是本研究 并未 发现什么。研究人员检查了“漏洞难度”是否是导致失败的主要原因。他们观察了“简单”、“中等”和“困难”级别的漏洞。他们发现,虽然更难的漏洞确实更难修复,但 仅凭漏洞难度本身并不能解释为什么 AI 会失败。即使是在简单的漏洞上,如果 AI 产生了“隧道视野”并忽略了正确的线索,它仍然会失败。这表明问题不仅仅在于漏洞太难,而是在于 AI 有时看向了错误的地方。
总结
这篇论文表明,让 AI 更擅长修复代码的秘诀不仅仅是给它更多的数据或让它变得更聪明。关键在于教它如何阅读。研究表明,成功的修复发生在 AI 将注意力分散到整个故事中——包括症状、错误日志和预期行为——而不是卡在像软件版本这样枯燥的细节上。
通过理解 AI 会遭受“隧道视野”的影响,开发者现在可以设计更好的指令(提示词),以强制 AI 去观察正确的线索。这就像是教一名侦探不要盯着嫌疑人的鞋子看,而是要去观察凶器。研究人员甚至创建了一个新的带有专家标注的人类漏洞报告数据集,以帮助训练未来的 AI 模型去关注正确的事物,从而有望让它们成为修复运行我们世界的软件时更可靠的伙伴。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。