ExpeRepair团队 投稿
量子位 | 公众号 QbitAI
AI学会像人一样修Bug了!
“这个Bug我上周刚修过”“这个报错怎么又来了”“新人怎么又在同一个地方踩坑”……
如果你是程序员,是否经常遇到这些令人抓狂的场景?
现有的AI修复工具就像“金鱼”,只有7秒记忆,每次遇到问题都从零开始。人类工程师最大的优势,恰恰是能从历史经验中快速找到解决方案。
而现在,这个优势被AI学会了:
ExpeRepair——具有“双重记忆”的仓库级缺陷修复系统,它通过模拟人类认知的两种记忆模式:
情景记忆:存储历史修复案例(如“具体如何修复Sympy项目的安全漏洞”) 语义记忆:提炼高阶修复策略(如“处理资源泄漏时需同时关闭文件和释放句柄”)
当遇到新问题时,ExpeRepair会同时唤醒两种记忆:从情景记忆中调取相似案例作为参考,从语义记忆中提取通用策略指导决策,动态生成量身定制的修复方案。
在权威评测SWE-Bench Lite上,ExpeRepair以60.33%的修复率登榜首:

这项研究由来自中国科学院软件研究所的团队提出,以下是更多细节。

揭秘ExpeRepair“最强大脑”
1、双重记忆系统:像人类一样学习
ExpeRepair模拟人脑的两种记忆模式:
1)情景记忆:
记录具体的修复案例,存储完整修复轨迹(问题描述、测试脚本、修复代码、验证结果),包含成功和失败案例,形成正反两方面经验。
2)语义记忆:
提炼抽象的修复策略,通过LLM自动总结高阶经验,例如“处理文件操作时,必须同时考虑权限检查和资源释放”。
2、动态知识更新:越用越聪明
记忆系统会持续进化:
1)新增:发现全新问题模式时添加新经验
2)合并:优化相似经验的表述
3)淘汰:删除过时或矛盾的经验
同时,保持记忆库精炼(不超过15条核心策略)。
3、智能检索:精准匹配历史经验
遇到新问题时,像资深工程师一样“借鉴”历史解决方案:
1)通过BM25算法快速匹配相似历史问题
2)提取top-3最相关的修复案例
3)结合抽象策略生成动态提示
拆解ExpeRepair修复流程
ExpeRepair将复杂的自动程序修复问题分解为三项任务:测试生成、补丁生成和补丁验证。
它采用两个智能体,即测试智能体和补丁智能体,通过协作来处理这些任务,这与人类开发人员分类和解决软件问题的方式相似。

测试生成
复现测试对于证明问题的存在以及验证候选补丁的正确性都至关重要。
现有的方法通常仅根据问题描述生成复现测试脚本,这存在两个主要局限性:
(1)由于遗漏依赖项、配置或特定环境设置,导致执行频繁失败;
(2)问题复现不充分,因为这类脚本往往仅狭隘地针对问题描述中的症状,而没有捕捉更广泛的故障背景。
ExpeRepair通过使测试智能体能够基于动态反馈和从过去修复轨迹中积累的记忆,迭代地生成和优化复现测试,来解决这些局限性。
具体而言,智能体首先从情景记忆检索出最相关的演示案例,这直接解决了局限性(1):当前测试执行遇到失败(例如,缺少库或配置错误)时,与相同或类似失败相关的演示案例提供了过去成功处理这些失败的具体示例。然后,智能体会从语义记忆中提取所有总结性的自然语言见解,这些见解捕捉了从先前修复中提炼出的可推广的高级策略。例如:“在测试安全敏感功能时,实施全面的测试用例,验证对恶意输入、边缘情况和潜在攻击向量的正确处理,确保进行稳健的验证和适当的错误响应”。这些见解通过将智能体的推理扩展到狭隘地复现所述症状之外,帮助解决了局限性(2)。
补丁生成
在成功复现问题后,ExpeRepair会启动补丁生成流程,以生成能够解决故障同时保留现有功能的候选修复方案。
在生成补丁之前,首先确定问题发生的位置至关重要,本方案采用了一种分层定位策略:首先根据问题描述和代码库结构识别可疑文件,然后在已识别的文件中定位具体的故障代码行。
正如先前的研究所指出的,LLM生成的补丁往往不完整,因为修复一个代码库级别的问题通常需要协调代码多个部分的变更,或者执行一系列修改操作。
为解决这一问题,与测试生成过程类似,ExpeRepair会迭代地调用情景记忆和语义记忆,并利用这些记忆来生成和优化补丁。补丁智能体会按照测试生成阶段相同的流程,检索相关的演示案例并提取反思性见解。
补丁验证
当候选补丁成功通过复现测试后,并不会立即被采纳为最终补丁。
这是因为团队通过实证观察发现,复现脚本通常仅狭隘地聚焦于问题描述中的特定症状,这可能导致误判——即补丁虽能通过有限的测试,却在更广泛的场景中失效。为缓解这一问题,ExpeRepair会提示补丁智能体对补丁进行修订和增强,以解决边缘情况处理、回归风险以及是否符合特定语言最佳实践等问题。
接下来,团队会通过生成额外的验证测试来扩充复现测试套件。测试智能体会被要求创建针对边界条件和极端情况的测试。这一过程能够降低那种仅解决报告的表面症状、却未全面处理潜在缺陷的狭隘且脆弱的修复方案出现的风险。
在选择最终补丁时,ExpeRepair首先会让所有候选补丁在包含复现测试和验证测试的扩展测试套件中执行。然后,将候选补丁及其相应的测试结果提交给专门的评审智能体,该智能体会根据正确性、是否符合最佳实践等标准来选择最终的补丁。
实战效果
以下是部分实验结果。
在SWE-Bench Lite上,ExpeRepair采用Claude-3.5 Sonnet + o4-mini能够取得48.3%的修复通过率,超越采用同类模型的其他方法。
采用Claude-4+o4-mini能够取得60.3%的修复通过率,位于SWE-Bench Lite榜首。

实验还表明,不管将情景记忆还是语义记忆去掉,都会带来显著的性能下降。

论文:https://arxiv.org/abs/2506.10484
代码:https://github.com/ExpeRepair/ExpeRepair
一键三连「点赞」「转发」「小心心」
欢迎在评论区留下你的想法!
— 完 —
🌟 点亮星标 🌟