[Paper] 面向学习者的 Program Repair:一种基于迭代编辑驱动检索增强的 Solution Generator

发布: (2026年1月13日 GMT+8 21:31)
7 min read
原文: arXiv

Source: arXiv - 2601.08545v1

Overview

本文介绍了 Learner‑Tailored Program Repair (LPR),这是一项超越单纯修复错误代码的新任务——它还解释错误产生的原因,非常适合智能编程辅导系统。为了解决 LPR,作者提出了 \textsc{Learner‑Tailored Solution Generator},一个两阶段框架,结合相似历史修复的检索与大语言模型(LLM)推理,并基于执行反馈迭代优化搜索。

关键贡献

  • New task definition (LPR): 修复代码 生成针对学习者的可读性错误解释。
  • Edit‑driven retrieval engine: 构建先前解决方案的可搜索数据库,并根据修复错误所需的 编辑 量检索最相关的方案。
  • Solution‑guided repair: 使用检索到的代码片段作为具体指导,让大型语言模型生成修正后的程序以及解释性叙述。
  • Iterative Retrieval Enhancement (IRE): 在首次修复尝试后,将执行结果反馈回检索过程,以引导检索朝更佳候选方案方向进行,有效实现对自身错误的“学习”。
  • Empirical validation: 在学生代码基准数据集上相较于强基线表现出显著提升,验证了该方法的实用性。

Source:

方法论

  1. 解决方案检索数据库构建

    • 收集大量正确程序及其对应的编辑脚本(即错误版本与修复版本之间的 diff)。
    • 对这些编辑脚本建立索引,使得在给定新的错误代码片段时,系统能够快速找到涉及相似编辑的过去修复方案。
  2. 基于编辑的检索(第 1 阶段)

    • 当学习者提交错误代码时,系统提取一组最小的语法编辑,这些编辑可以解决该错误(例如,“添加缺失的 return”、 “将 == 改为 ===”)。
    • 将这些编辑作为查询,从数据库中拉取最相似的前 k 条过去解决方案。
  3. 基于解决方案的修复(第 2 阶段)

    • 将检索到的解决方案与原始错误代码一起提供给强大的大语言模型(如 GPT‑4)。
    • LLM 生成:
      • 修复后的代码版本,
      • 简洁、面向学习者的错误根因解释。
  4. 迭代检索增强

    • 将修复后的代码在隐藏测试用例上执行。
    • 将失败信号(例如,仍然失败的测试用例、错误信息)转换为新的编辑查询,触发另一轮检索。
    • 该循环重复进行,直至代码通过所有测试或达到预算上限,使系统能够“自我纠正”检索方向。

整个流水线全自动化,仅需错误提交和测试框架即可运行。

结果与发现

  • 准确性提升: 提议的框架在标准学生代码基准上相较于普通 LLM 修复或仅检索基线,通行率提升 +30%–45%
  • 解释质量: 人类评估者在 >80% 的案例中将生成的错误解释评为 清晰具有教育意义,相较于仅输出补丁的先前方法有显著改进。
  • 迭代收益: 添加 IRE 循环可额外提升 10%–15% 的成功修复率,证明基于反馈的检索是有效的。
  • 速度: 尽管采用两阶段设计,平均端到端延迟仍保持在每个提交 5 秒以下,使其适用于实时辅导工具。

实际意义

  • 智能辅导系统 (ITS): 部署此框架可以将一个简单的“auto‑grader”转变为 coach,它不仅告诉学生他们的代码错误,还解释概念性错误。
  • 开发者入职工具: 新员工可以将出错的代码片段粘贴到聊天助手中,助手返回修复后的版本 and 对底层模式(例如 off‑by‑one 错误)进行简短讲解。
  • 代码审查机器人: 在 CI 流水线中,系统可以自动建议补丁 and 用理由标注更改,减少审查者与作者之间的来回沟通。
  • 教育内容生成: 通过挖掘检索数据库,教师可以自动汇编常见 bug 模式及其修复的集合,用于课程设计。

总体而言,该方法弥合了纯代码纠正与教学反馈之间的鸿沟,使 AI 驱动的修复与人类导师的教学方式保持一致。

限制与未来工作

  • 对高质量解决方案语料库的依赖: 如果数据库缺乏针对特定语言或领域的多样化编辑示例,检索效果会下降。
  • 对大型代码库的可扩展性: 当前的编辑驱动索引在相对较小、独立的函数(如学生作业)上效果最佳;扩展到多文件项目可能需要层次化检索。
  • LLM 推理的可解释性: 虽然生成的解释可读,但 LLM 的内部决策路径仍是黑箱;未来工作可集成更透明的推理模块。
  • 跨语言泛化能力: 实验聚焦于单一编程语言(Python);将流水线适配到静态类型语言(Java、C++)是一个开放的研究方向。

作者建议通过社区贡献的补丁丰富检索数据库,并探索混合符号‑LLM 方法,以进一步提升修复准确性和解释深度。

作者

  • Zhenlong Dai
  • Zhuoluo Zhao
  • Hengning Wang
  • Xiu Tang
  • Sai Wu
  • Chang Yao
  • Zhipeng Gao
  • Jingyuan Chen

论文信息

  • arXiv ID: 2601.08545v1
  • 分类: cs.AI, cs.CL, cs.SE
  • 出版日期: 2026年1月13日
  • PDF: 下载 PDF
Back to Blog

相关文章

阅读更多 »