[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: …
方法论
-
解决方案检索数据库构建
- 收集大量正确程序及其对应的编辑脚本(即错误版本与修复版本之间的 diff)。
- 对这些编辑脚本建立索引,使得在给定新的错误代码片段时,系统能够快速找到涉及相似编辑的过去修复方案。
-
基于编辑的检索(第 1 阶段)
- 当学习者提交错误代码时,系统提取一组最小的语法编辑,这些编辑可以解决该错误(例如,“添加缺失的
return”、 “将==改为===”)。 - 将这些编辑作为查询,从数据库中拉取最相似的前 k 条过去解决方案。
- 当学习者提交错误代码时,系统提取一组最小的语法编辑,这些编辑可以解决该错误(例如,“添加缺失的
-
基于解决方案的修复(第 2 阶段)
- 将检索到的解决方案与原始错误代码一起提供给强大的大语言模型(如 GPT‑4)。
- LLM 生成:
- 修复后的代码版本,
- 简洁、面向学习者的错误根因解释。
-
迭代检索增强
- 将修复后的代码在隐藏测试用例上执行。
- 将失败信号(例如,仍然失败的测试用例、错误信息)转换为新的编辑查询,触发另一轮检索。
- 该循环重复进行,直至代码通过所有测试或达到预算上限,使系统能够“自我纠正”检索方向。
整个流水线全自动化,仅需错误提交和测试框架即可运行。
结果与发现
- 准确性提升: 提议的框架在标准学生代码基准上相较于普通 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