← 最新论文
💻 computer science

HAFixAgent: History-Aware Program Repair Agent

本文提出了 HAFixAgent,一种通过引入基于代码 blame 的仓库历史启发式信息来增强修复循环的历史感知程序修复智能体,实验证明其在处理复杂多块漏洞时显著提升了修复成功率、鲁棒性,且未增加额外成本。

原作者: Yu Shi, Hao Li, Bram Adams, Ahmed E. Hassan

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

原作者: Yu Shi, Hao Li, Bram Adams, Ahmed E. Hassan

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

这篇论文介绍了一个名为 HAFixAgent 的新系统,它的核心任务是帮电脑自动修 Bug(程序错误)

为了让你更容易理解,我们可以把写代码和修 Bug 想象成**“侦探破案”**的过程。

1. 以前的侦探是怎么破案的?(背景)

以前的自动修 Bug 系统(就像新手侦探),通常只盯着**“案发现场”**(当前的代码快照)看。

  • 局限性:它们只看现在哪里坏了,却不知道这个错误是怎么来的。这就好比侦探只看到了破碎的窗户,却不知道是谁、在什么时候、为什么扔了石头。
  • 结果:对于简单的错误(比如少写了一个分号),它们还能修好。但对于复杂的错误(比如牵一发而动全身,涉及多个文件、多处修改),它们往往束手无策,因为缺乏背景知识。

2. HAFixAgent 的绝招:拥有“记忆”的侦探(核心创新)

这篇论文的作者们想:“如果侦探不仅能看现场,还能翻阅过去的档案,是不是破案率会更高?”

于是,他们开发了 HAFixAgent。它最大的特点是**“懂历史”**。

  • 它的超能力:当它发现一个 Bug 时,它会去查代码的“户籍档案”(Git 历史记录)。它会问:“这一行代码最后是谁改的?当时为什么要改?改之前是什么样?”
  • 比喻
    • 普通侦探:看到墙上有个洞,直接拿水泥堵上。
    • HAFixAgent:看到墙上有洞,先查档案发现:“哦,原来是上周张三为了装新窗户把墙砸了,但他没把旧砖头补好。”于是它知道不仅要补洞,还要检查窗户结构,甚至把张三留下的隐患一起解决。

3. 他们是怎么验证的?(实验过程)

作者们找来了两个巨大的“题库”:

  • Java 题库 (Defects4J):854 个 Bug。
  • Python 题库 (BugsInPy):501 个 Bug。

他们让 HAFixAgent 和另外两个最先进的“侦探”(RepairAgent 和 BIRCH-feedback)进行比赛。为了公平,大家都用同一个最聪明的“大脑”(DeepSeek-V3.2-Exp 大模型)。

4. 比赛结果如何?(主要发现)

(1) 历史档案真的有用吗?

有用,而且非常有用!

  • 结果:HAFixAgent 比对手修好了多得多的 Bug。
    • 在 Java 题库上,它比最强的对手多修好了 56.6% 的 Bug。
    • 在 Python 题库上,多修好了 38.6%
  • 特别厉害的地方:对于那些**“多文件、多处修改”**的复杂大 Bug(就像连环案),历史档案的作用最大。如果没有历史,普通侦探面对这种复杂案件直接“死机”(成功率 0%),而 HAFixAgent 依然能保持 40%-56% 的成功率。

(2) 查档案会不会太慢或太贵?

不会。

  • 作者担心:查档案会不会让侦探思考时间变长,或者消耗更多算力(钱)?
  • 结果:并没有显著增加成本。查档案就像侦探顺手翻了一页书,并没有耽误太多时间,反而因为方向更准,避免了在错误的道路上浪费更多时间。

(3) 如果线索给错了怎么办?(鲁棒性)

  • 场景:有时候,告诉侦探“窗户在左边”,其实窗户在右边(故障定位不准)。
  • 结果:普通侦探一旦线索错了就彻底迷路。但 HAFixAgent 因为有“历史记忆”,即使线索有点偏差,它也能通过回忆过去的改动模式,猜出大概哪里出了问题,依然能修好。这就像老侦探即使记错了门牌号,也能通过“这家人通常住在哪条街”的经验找到人。

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

这篇论文告诉我们,在修 Bug 时,不要只看“现在”,要懂得看“过去”

  • 对于开发者:未来的 AI 助手不仅仅是帮你写代码,它还能像老员工一样,通过查看项目的“历史聊天记录”,理解代码为什么变成现在这样,从而给出更聪明的修复方案。
  • 对于复杂问题:越是复杂的错误(涉及多处修改),越需要这种“历史视角”来辅助解决。

一句话总结
HAFixAgent 就像是一个读过所有项目历史档案的资深侦探,它利用过去的经验来指导现在的修复工作,不仅修得更多、更准,而且在面对复杂案件和模糊线索时,依然稳如泰山。

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

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

试用 Digest →