← 最新论文
💬 NLP

PatchRecall: Patch-Driven Retrieval for Automated Program Repair

本文提出了 PatchRecall,一种结合代码库检索与历史问题驱动的混合检索方法,旨在在自动化程序修复中平衡高召回率与文件精简度,从而在不显著增加检索文件数量的前提下提升修复效果。

原作者: Mahir Labib Dihan, Faria Binta Awal, Md. Ishrak Ahsan

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

原作者: Mahir Labib Dihan, Faria Binta Awal, Md. Ishrak Ahsan

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

这篇论文讲的是如何教电脑更聪明地修软件 Bug

想象一下,你是一家大型图书馆(也就是一个巨大的代码库)的管理员。现在,有一位读者(也就是开发者AI 助手)拿着一张纸条,上面写着:“书架第三排那本关于‘分页’的书里有个错别字,请帮我改过来。”

1. 以前的难题:大海捞针 vs. 噪音干扰

以前的做法(传统检索):
就像让一个刚入职的实习生去查目录。实习生看到“分页”两个字,就把图书馆里所有带“分页”、“页码”、“翻页”字眼的书都抱过来,堆在读者面前。

  • 问题: 图书馆里有几万本书,实习生可能抱来了 50 本,结果真正需要改的那本只藏在其中。
  • 后果: 读者(AI 模型)看着这堆书,脑子都乱了(噪音太大),要么找不到目标,要么被无关的书干扰,改错了地方。

另一个极端:
如果只给读者 1 本书,万一猜错了,那就彻底修不好(漏掉目标)。

这就陷入了一个两难:给的书太少,怕漏掉;给的书太多,怕吵死人。

2. 论文的新招:PatchRecall(补丁回忆法)

这篇论文提出了一个叫 PatchRecall 的新方法,它像是一个经验丰富的老图书管理员,结合了两种智慧:

策略一:直接查目录(代码库检索)

就像传统方法一样,根据读者说的“分页”关键词,去图书馆里找相关的书。这是基于文本的搜索

策略二:翻翻“旧账本”(基于历史的检索)—— 这是核心创新!

老管理员会想:“以前有人也报过‘分页’的问题,当时他们改了哪几本书?”

  • 他翻开过去的记录(历史 Issue 和补丁),发现以前修“分页”Bug 时,大家通常只改了 admin/views.pypagination.py 这两本书。
  • 于是,他把这些曾经被修改过的书也列进候选名单。

策略三:综合打分(混合排序)

老管理员把两份名单合在一起:

  1. 一份是“关键词匹配”的书。
  2. 一份是“历史经验”的书。

然后他给每本书打分:

  • 如果一本书既符合关键词,又是以前修过 Bug 的书,分数最高,排在最前面。
  • 最后,他只把分数最高的前几本书(比如前 3 本)交给读者。

结果: 读者拿到的书很少(精简),但真正需要改的那本一定在里面高召回率)。

3. 为什么要这么做?(实验发现)

研究人员在 SWE-bench(一个专门用来测试修 Bug 能力的“考试库”)上做了实验,发现了一个有趣的现象:

  • 80% 以上的 Bug,其实只需要修改 1 个文件!
  • 但是,以前的方法为了保险起见,经常把几十本不相关的书都推给 AI,导致 AI 被“信息过载”淹没了。

PatchRecall 就像是一个精准的过滤器,它利用“历史经验”告诉 AI:“别瞎猜了,以前修这种问题,通常就是动这几块地方。”

4. 总结:这对我们意味着什么?

这就好比你在家里找钥匙:

  • 旧方法: 把家里所有可能有钥匙的抽屉(客厅、卧室、厨房、书房)全部打开,把里面的东西全倒在地上找。
  • PatchRecall 方法: 先问自己“上次钥匙掉哪了?”(历史经验),再结合“我现在在哪个房间”(当前描述),直接打开最可能的那两个抽屉,迅速找到钥匙。

这篇论文的价值在于:
它证明了在让 AI 修软件时,“找对地方”比“找很多书”更重要。通过巧妙地结合“现在的描述”和“过去的经验”,PatchRecall 让 AI 修 Bug 的成功率更高,而且不会让 AI 因为信息太多而“死机”。

简单来说,就是用“老经验”来辅助“新搜索”,让修 Bug 变得更准、更快、更聪明。

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

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

试用 Digest →