想象一下,你正在一间黑暗的房间里修理一台坏掉的机器。你有一位非常聪明但缺乏经验的学徒(即人工智能),他正试图找出修理方法。
问题:“试错”陷阱
过去,当我们要求人工智能修复软件安全漏洞时,其工作方式如下:人工智能会猜测一个修复方案,尝试实施,查看是否导致故障,然后再次猜测。
- 问题所在: 如果人工智能犯了错误,它往往会忘记这个错误。在下一次尝试中,它会再次犯下完全相同的错误。这就像一个学生数学考试不及格,却不研究错题,结果在下次考试中用同样的错误答案再次不及格。
- 第二个问题: 即使人工智能学会了如何修复某种特定类型的管道泄漏,当它遇到不同管道上的类似泄漏时,也不会记住这个教训。它将每一个新问题都视为自己从未见过的全新问题。
解决方案:EVOREPAIR(“经验丰富的导师”系统)
本文的作者们创建了一个名为EVOREPAIR的系统。你可以将其理解为给这位学徒配备了一位私人导师和一座庞大的过往案例库。
以下是其工作原理,使用一个简单的类比:
1. “经验库”(图书馆)
EVOREPAIR 不仅仅是猜测,它会详细记录每一次修复尝试的日记。
- 日记里有什么? 它不仅仅记录“我修好了”。它会写道:“我们尝试使用锤子,但结果弄碎了玻璃。我们学到了,对于玻璃,必须使用螺丝刀。此外,我们发现如果螺丝生锈,需要先给它上油。”
- “评分”: 并非每一条教训都是好的。有些教训是错误的,或者仅适用于特定情况。EVOREPAIR 使用一位“裁判”来评估这些教训。只有高质量、有用的教训才会被保留在图书馆中。
2. “搜索”(图书管理员)
当出现新的漏洞(即一台新的坏机器)时,EVOREPAIR 不会从头开始。
- 它像一位图书管理员。它审视新问题并说:“嘿,这看起来很像我们上周修好的那台坏掉的烤面包机!”
- 它会从图书馆中调取与当前问题相匹配的具体教训。它会告诉人工智能:“这次不要用锤子;要用螺丝刀,并且记得先给螺丝上油。”
3. “自我进化”(变得更聪明)
这是神奇的部分。该系统是循环的。
- 修复: 人工智能利用图书馆的建议尝试修复问题。
- 学习: 在尝试之后(无论成功与否),系统会分析发生的情况。
- 更新: 它会根据这次新的尝试,在图书馆中写入一条新的教训。如果人工智能发现了使用螺丝刀的更好方法,这种新方法就会被添加到书中。
- 重复: 当下一次出现类似问题时,图书馆会比之前更加完善。人工智能实际上是通过学习自己的历史而“进化”。
结果:效果如何?
研究人员将这一系统与另外 12 种顶尖的软件漏洞修复方法进行了测试对比。
- 得分: 在一项主要测试中,EVOREPAIR 修复了93.5%的问题,在另一项测试中修复了87%。
- 对比: 它显著优于之前的最佳方法。例如,它修复的问题数量比排名第二的人工智能系统多出约40%。
- “迁移”测试: 研究人员甚至将从修复一种编程语言(如 JavaScript)问题中学到的教训,用于修复完全不同语言(如 Java)中的问题。它依然有效,这证明了这些“教训”具有足够的通用性,能够跨越不同类型的代码发挥作用。
一句话总结
以往的人工智能修复工具就像那些忘记自己错误的学生。EVOREPAIR 则像一位技艺精湛的大师,他详细记录每一项工作的日记,从每一次失败中学习,并利用这些积累的智慧,比以往任何时候都更快、更准确地修复新问题。它将“试错”转变为“尝试、学习并成功”。
技术摘要:EVOREPAIR
问题陈述
利用大语言模型(LLM)进行自动化漏洞修复(AVR)已展现出前景,但面临两个阻碍其可扩展性和有效性的关键局限:
- 缺乏漏洞内部经验积累:现有方法通常将每次修复尝试视为无状态过程。即使针对单个漏洞探索了多次修复轨迹,中间的成功、失败和诊断信号也很少被提炼为可复用的知识。因此,LLM 可能在迭代中反复遵循无益的路径或犯下类似的错误。
- 缺乏跨漏洞经验复用:当前的 AVR 方法大多将每个漏洞视为孤立任务。虽然存在检索增强方法,但它们通常依赖于静态的、特定实例的参考补丁,而非动态的、可泛化的修复知识。随着报告漏洞(CVE)数量的增长,这种逐个孤立修复的模型变得日益不可扩展。
核心挑战在于如何使 AVR 系统能够在单个漏洞的修复过程中以及不同漏洞之间,持续积累、提炼并复用修复经验。
方法论:EVOREPAIR
为应对这些挑战,作者提出了EVOREPAIR,这是首个基于经验的 AVR 自进化智能体框架。该系统运行于一个循环的**“学习 - 修复”范式**,包含四个主要组件:
1. 领域特定经验定义
EVOREPAIR 定义了标准化的“经验”模式,以确保可复用性和可转移性。与原始交互日志不同,经验条目是一种结构化抽象,包含五个维度:
- 漏洞介绍与分析:简洁描述漏洞类型、位置、根本原因及影响。
- 修复策略:所选的修复方案及其理由。
- 轨迹分析:提炼后的修复过程描述,突出成功操作、失败模式及关键命令/日志。
- 经验总结:简洁的规范性规则(前提条件、目标、指导),附带最少示例。
- 反思与改进:对结果、局限性及未来策略建议的评估。
2. 经验检索与预热
在每次修复轮次之前,智能体查询经验库。
- 检索机制:系统基于综合得分检索经验,该得分结合了相似度(CVE/CWE 匹配)和质量(由作为裁判的 LLM 评估得出的质量与可泛化性分数)。
- 预热策略:为解决“冷启动”问题(经验库为空),EVOREPAIR 采用标准补丁策略(使用历史官方补丁)或预修复策略(利用早期披露漏洞生成的预生成经验进行初始化,以避免自身实例泄露)。
3. 漏洞修复(基础智能体)
核心修复引擎是一个基于通用框架(受 Mini-SWE-Agent 启发)构建的“基础智能体”。
- 上下文注入:检索到的经验被注入智能体的上下文中,以指导修复轨迹。
- 流程:智能体使用最小化 Bash 工具包与 Docker 环境交互,以复现漏洞、定位缺陷、生成补丁并验证其有效性。
- 早期停止:为确保成本效益,系统计算轮次级收益率(α),定义为修复性能边际增益与成本边际增加的比率。如果 α 低于阈值,修复过程将提前终止。
4. 经验构建与更新
修复尝试后,系统从轨迹中构建新经验:
- 压缩:将轨迹压缩为结构化模式,以防止上下文窗口膨胀。
- 评分:由作为裁判的 LLM 根据质量(可操作性)和可泛化性(可转移性)对新经验进行评分。
- 更新:经验库采用以下策略进行更新:丢弃低质量条目,保留高质量条目,或通过融合互补细节来“润色”得分相同的条目。
主要贡献
- 新研究维度:本文引入了基于经验的自进化作为 AVR 的新维度,侧重于修复知识的持续积累与复用,而不仅仅是静态检索。
- 新颖框架(EVOREPAIR):一个循环框架,通过结构化的“学习 - 修复”循环,实现了跨漏洞经验复用和漏洞内部经验积累。
- 广泛评估:在多个数据集(PATCHEVAL、SEC-bench、VUL4J)和模型(GPT-5-mini、Qwen3.5-Plus、DeepSeek-v3.1、Devstral 变体)上的综合实验证明了该框架的有效性和可转移性。
实验结果
作者使用 GPT-5-mini 作为主要骨干,将 EVOREPAIR 与 12 个代表性基线(包括基于学习、基于 LLM 和基于智能体的方法)进行了评估。
- 整体性能:EVOREPAIR 取得了最佳整体性能,在 PATCHEVAL 上修复了93.47%的漏洞,在 SEC-bench 上修复了87.00%,总体修复率为90.46%。
- 与基线对比:
- 比最强的基于 LLM 的基线LoopRepair高出39.56%(PATCHEVAL)和33.50%(SEC-bench)。
- 分别比IntentFix高出70.86%和50.50%。
- 比近期的自进化智能体Live-SWE-Agent整体高出6.98%。
- 自进化影响:在 15 轮修复中,EVOREPAIR 持续突破了基础智能体的性能上限,显示出更快的收敛速度和更高的效率。例如,在 PATCHEVAL 上使用 GPT-5-mini 时,修复数量从基础智能体的 194 个增加到 EVOREPAIR 的 215 个。
- 可转移性:在 VUL4J(Java)上使用从 PATCHEVAL(JavaScript/Python/Go)提炼的经验进行的实验显示了显著的性能提升(例如 Qwen3.5-Plus 提升了 9.67%),证实了跨语言和跨数据集的可转移性。
- 成本分析:虽然某些模型的提示开销有所增加,但由于收敛更快且冗余轮次减少,更强模型的总成本保持不变或降低(例如 Qwen3.5-Plus 的成本降低了 41.58%)。
意义与主张
本文主张,EVOREPAIR 通过将 AVR 从静态检索和简单迭代提示中解放出来,显著增强了智能体 AVR 的能力。其意义在于证明了:
- 经验是关键资源:积累和提炼修复知识可使智能体避免重复错误,并在异构漏洞间实现泛化。
- 自进化是有效的:循环的“学习 - 修复”过程使智能体能够在无需人工干预的情况下,随时间推移提升自身的修复能力。
- 可泛化性:提炼出的经验足够稳健,可跨不同编程语言、数据集和模型骨干进行转移,表明了一条通往可扩展的大规模漏洞修复系统的道路。
作者总结道,基于经验的自进化超越了现有的自进化技术,通过明确建模修复知识的生命周期,为解决日益增长的软件安全漏洞数量提供了一个有前景的方向。
每周获取最佳 computer science 论文。
受到斯坦福、剑桥和法国科学院研究人员的信赖。
请查收邮箱确认订阅。
出了点问题,再试一次?
无垃圾邮件,随时退订。