SWE-Doctor: Guiding Software Engineering Agents with Runtime Diagnosis from Multi-Faceted Bug Reproduction Tests
SWE-Doctor 是一种新型软件工程智能体,它通过利用从多维度缺陷复现测试中获取的运行时诊断信息,来克服直接将这些测试作为生成目标的局限性,从而通过改进补丁生成,在 SWE-bench 基准测试上实现了最先进的解决率。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
想象一下,你有一个非常聪明但有点过于死板的机器人助手(一个 AI 智能体),它的工作是修复软件程序中的错误代码。你给它一条用户的投诉:“当我输入中文字符时,这个按钮不起作用。”机器人的目标是编写一个“补丁”(代码修复)来解决这个问题。
通常,这些机器人会通过猜测、检查测试是否通过、然后再次尝试来试图修复代码。但本论文介绍了一种更聪明的机器人,叫做 SWE-Doctor。
以下是 SWE-Doctor 的工作原理,通过简单的类比进行解释:
问题所在:“单项测试”陷阱
研究人员首先尝试了一个常见的想法:“让我们给机器人一个能证明漏洞存在的测试,并告诉它去修复代码,直到测试变绿(通过)为止。”
他们发现这样做效果并不好,原因有两个:
- “部分修复”问题(Fail-to-Pass): 想象一辆车有两个坏掉的大灯。你给修理工一个只检查左侧大灯的测试。修理工修好了左边的灯,测试变绿了,于是他停止了工作。但右侧的大灯仍然是坏的!机器人只修复了问题的一部分,因为它只盯着一个特定的测试。
- “误导性线索”问题(Fail-to-Fail): 有时,机器人创建的测试本身就以一种奇怪的方式损坏了,与真实问题并不匹配。如果机器人试图仅仅为了让这个特定的错误测试通过而修复代码,它可能会把车弄得更糟,或者完全修错了东西。这就像试图通过听收音机里的静电噪音来修理一个爆胎,这种噪音(测试失败)并不能告诉你实际的问题在哪里。
解决方案:SWE-Doctor
SWE-Doctor 改变了游戏规则。它不再只是说“让这个测试通过”,而是扮演着侦探和医生的角色。
第一步:多维度的检查(多维度 BRT 生成)
与其只写一个测试,SWE-Doctor 会将用户的投诉分解为不同的“维度”或角度。
- 类比: 如果病人说“我肚子疼”,一个糟糕的医生可能只会检查他能不能吃苹果。而一个好医生会检查他能否吃苹果、能否喝水以及能否走路。
- SWE-Doctor 创建了多个不同的测试来检查投诉的每一个部分。这确保了机器人不会在只修复了问题的一个小部分后就停止。
第二步:尸检报告(运行时诊断)
这是最关键的部分。当测试运行并失败时,SWE-Doctor 不仅仅是看着“FAIL(失败)”的标志。它会将代码放在显微镜下(调试器)观察,看看在失败发生时,机器内部究竟发生了什么。
- 类比: 想象一辆车坏了。一个简单的机械师只看仪表盘上的指示灯并进行猜测。SWE-Doctor 则打开引擎盖,在引擎运转时观察,检查油压,并倾听齿轮磨损的具体声音。
- 它会写一份“诊断报告”,说明:“错误发生在这一特定文件、这一精确时刻,因为这个数值是错误的。”它将令人困惑的“FAIL”转化为了一个清晰的、指向问题所在位置的地图。
第三步:引导式手术(补丁生成)
最后,SWE-Doctor 将“多维度检查”的结果和“尸检报告”交给机器人。
- 类比: 与其告诉机器人“修好这辆车”,不如说:“这里有一份所有需要正常工作的清单(检查),以及一张显示哪个齿轮正在磨损的地图(诊断)。请修理这个齿轮,但要确保你不会破坏我们检查过的其他部件。”
- 在提交修复方案之前,SWE-Doctor 会进行最后的检查:“你是修复了清单上的所有内容,还是只修了那个最容易修的部分?”这防止了“部分修复”问题的发生。
结果
研究人员在数千个真实的软件漏洞上测试了 SWE-Doctor(使用名为 SWE-bench 的基准测试)。
- 它表现更好: 在处理最难的问题时,SWE-Doctor 比之前的顶尖机器人多修复了显著比例的漏洞(大约 8% 到 9%)。
- 它能找到独特的解决方案: 它解决了许多其他机器人完全无法解决的问题。
- 它不仅限于 Python: 他们甚至在 Go(另一种编程语言)上测试了它,发现它同样有效,证明了这种“医生”方法并不局限于某种特定的代码类型。
简而言之: SWE-Doctor 阻止了 AI 盲目地为了让单个测试通过而进行猜测。相反,它扮演了一位细致入微的医生,进行多项检查,观察失败时的内部症状,并利用这种深刻的理解来进行完整且准确的修复。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。