找回密码
 立即注册
首页 业界区 安全 DeepK 自动程序修复框架论文——OceanBase 校企联合研究 ...

DeepK 自动程序修复框架论文——OceanBase 校企联合研究

尤晓兰 2 小时前
摘要:
浙大与 OceanBase 联合提出 DeepK 调试引擎,为 LLM-based 自动程序修复提供了一种全新的思路。通过将隐含在大规模 bug-fix 数据中的调试经验显式化、结构化并系统复用,有效弥补了现有方法过度依赖隐式推理的不足,引导大语言模型从“隐式猜修复”转向“基于经验的知识驱动调试”,显著提升了自动程序修复的准确性与稳定性。
 
日前,由浙江大学与 OceanBase 团队联合撰写的论文:《Debugging Engine Enhanced by Prior Knowledge: Can We Teach LLM How to Debug?》被软件工程领域顶级会议 The ACM International Conference on the Foundations of Software Engineering (FSE) 2026 录用。
 
FSE 是软件工程领域最具影响力的国际顶级会议之一,是中国计算机学会 CCF 推荐的 A 类国际会议。本论文通过系统化提取和复用结构化调试知识,引导大语言模型从“隐式猜修复”转向“基于经验的知识驱动调试”,显著提升了自动程序修复的准确性与稳定性。
 
简介
 
随着大语言模型在代码理解与生成领域能力的不断增强,自动程序修复(Automated Program Repair,APR)逐渐成为软件工程研究的重要方向。
 
近年来,大量工作尝试通过提示工程、多智能体协作、示例检索或执行反馈等方式提升修复效果,并在多个基准数据集上取得了可观进展。然而,这些方法大多仍然依赖模型的隐式推理能力:模型需要从原始示例、上下文或运行结果中自行推断调试思路,而调试过程中真正稳定、可复用的知识却并未被显式建模和系统利用。
 
论文 DeepK(Debugging Engine Enhanced by Prior Knowledge)正是针对这一核心缺陷提出了解决方案。
 
作者指出,大规模 bug-fix 数据集中蕴含着丰富的调试经验,但现有方法通常只将其作为上下文示例或推理演示使用,而没有将其中的调试逻辑提炼为结构化知识。
 
DeepK 通过系统性地提取、验证并复用调试知识,为大语言模型提供明确的调试指导,使程序修复从“依赖模型临场发挥”转向“基于经验的知识驱动推理”。
 
核心理念:让调试从隐式推断走向显式知识引导
 
传统的 LLM-based APR 方法在设计上存在一个根本矛盾:一方面希望模型具备类似人类的调试能力,另一方面却很少向模型明确提供“人类是如何调试的”。模型虽然可以在大量示例中隐式学习模式,但这种方式缺乏稳定性、可解释性,也难以在分布外场景中保持鲁棒。
DeepK 的核心理念在于,将调试视为一种可总结、可验证、可复用的知识过程。它不再把修复行为简单等同于补丁生成,而是将调试拆解为两个紧密协同的部分:对错误根因的理解,以及围绕该根因展开的修复策略。通过显式建模这两类调试知识,DeepK 试图为大语言模型提供类似“资深程序员经验”的指导,使其在面对新 bug 时能够遵循已有的成功调试路径进行推理,而非从零开始试探。
 
1.png

图 1. DeepK 的 4 阶段架构
 
核心技术一:基于 AST 的编辑描述生成与调试语义对齐
 
在从历史 bug-fix 数据中提取调试知识时,一个关键挑战在于如何避免被低层次的代码差异所干扰。直接对比 buggy 与 fixed 代码往往会产生大量琐碎、语义不明确的修改信息,难以反映真实的调试逻辑。
 
为此,DeepK 引入了一种基于抽象语法树的编辑描述生成机制,将代码层面的差异转化为人类可读、具有步骤感的自然语言编辑描述。
 
该机制通过分析两版代码的 AST 结构,定位真正与错误修复相关的修改位置,并过滤掉不合理或无关的编辑操作,从而生成更符合人类调试习惯的修改描述。这一过程有效弥合了“代码补丁”与“调试思维”之间的鸿沟,为后续调试知识的抽取提供了清晰、语义化的输入。
2.png

 
图 2. 代码编辑描述生成工具
 
核心技术二:结构化调试知识的抽取、验证与知识库构建
 
在获得编辑描述后,DeepK 进一步引导大语言模型围绕“如何定位并修复该 bug”生成结构化调试知识。模型需要明确指出错误的根因,并给出一步步的调试与修复策略。与以往方法不同的是,DeepK 并不直接接受模型生成的结果,而是引入了验证机制:模型必须仅基于自己生成的调试知识重新修复程序,并通过测试用例验证其正确性。只有能够稳定指导修复成功的知识,才会被纳入最终的调试知识库。
 
在知识组织层面,DeepK 采用多视角索引策略,从任务描述、程序结构以及执行轨迹等多个维度刻画每一条调试知识,使其能够在面对不同类型的新 bug 时被准确检索。这种多维度设计避免了单一相似度度量带来的偏差,使知识检索既具备语义相关性,又保留结构与运行层面的信息。
 
3.png

图 3. 结构化调试知识抽取
 
核心技术三:先验调试知识增强的程序修复流程
 
在实际修复新 bug 时,DeepK 并不替代现有 APR 系统,而是以“调试知识增强模块”的形式融入其中。当系统接收到新的 buggy 代码后,会从知识库中检索出最相关的调试知识,并将其注入模型的推理阶段,引导模型围绕已验证的调试思路展开修复。
 
这种设计使 DeepK 能够自然地与不同类型的 APR 系统集成,无论是基于提示与检索的非智能体方法,还是基于脚本化流程的修复框架,都可以从中受益。
 
通过这种方式,程序修复过程不再依赖单次推理的偶然成功,而是建立在大量历史调试经验的积累之上,使模型的行为更加稳定、可解释。
 
性能成果
 
在 ACPR 与 AtCoder 等多个基准数据集上的实验结果表明,DeepK 在不同模型后端(GPT-4o与 DeepSeek-v3)下均能显著提升现有方法的修复准确率。在分布内场景中,DeepK 相较最强基线方法取得了稳定的绝对提升;在更具挑战性的分布外竞赛编程任务中,其相对提升尤为显著,显示出结构化调试知识在应对分布偏移时的独特价值。
 
4.png

图 4. DeepK 与其他基准方法的对比
 
进一步的消融实验验证了各个设计组件的重要性。结果显示,对调试策略的显式建模对性能提升贡献最大,多维度检索机制显著增强了系统的鲁棒性,而基于 AST 的编辑描述在复杂程序修复中发挥了关键作用。同时,实验还揭示了调试知识数量与性能之间的权衡关系,表明适量、精准的知识注入比简单堆叠上下文更加有效。
5.png

 
图 5.知识库索引构建的消融实验
6.png

 
图 6. 结构化调试知识的消融实验
 
7.png

图 7. 代码编辑描述工具的消融实验
8.png

 
 
图 8. 调试知识数量与调试性能的关系
 
结语
 
DeepK 的工作为 LLM-based 自动程序修复提供了一种全新的思路。通过将隐含在大规模 bug-fix 数据中的调试经验显式化、结构化并系统复用,该框架有效弥补了现有方法过度依赖隐式推理的不足。
 
在实践中,DeepK 在多种数据分布与模型设置下均展现出稳定的性能提升,并显著增强了修复过程的可解释性与鲁棒性。
 
这项研究表明,相比不断扩展模型规模或复杂化推理流程,让模型掌握可复用的调试知识可能是一条更加稳健、可持续的路径,也为未来构建更可靠的软件智能系统奠定了坚实基础。
 
欢迎访问 OceanBase 官网获取更多信息:https://www.oceanbase.com/

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册