作者:上交博士,在腾讯codebuddy 实习,发表一作顶会顶刊论文10篇(含best paper 等),开源PFLlib等明星项目,获得社区赞誉。主要研究AI强化学习、AI合成数据、Agent 记忆等。
在 AI 辅助 Coding 技术快速发展的背景下,大语言模型(LLMs)虽显著提升了软件开发效率,但开源的 LLMs 生成的代码依旧存在运行时错误,增加了开发者调试成本。
现有基于偏好优化的改进方法,多依赖「通过 / 失败」二元信号构建训练数据,难以知晓「错在哪」,也忽视了模型能力在训练时的动态变化特性。
针对此缺口,在腾讯 CodeBuddy 实习期间,我们提出自适应渐进式偏好优化方法(AP2O),并构建 AP2O-Coder 框架。该方法借鉴人类的「按题型高效刷题」经验出发,通过「考试 - 分析 - 纠错 - 小测」的系统性流程提升模型代码纠错能力,在多款主流开源模型上实现最高 3% 的 pass@k 性能提升,同时降低训练数据需求量。
- 论文标题:AP2O-Coder: Adaptively Progressive Preference Optimization for Reducing Compilation and Runtime Errors in LLM-Generated Code
- 论文链接:https://arxiv.org/pdf/2510.02393
- 开源代码:https://github.com/TsingZ0/AP2O
一、现有方法的核心挑战
与 AP2O-Coder 的针对性设计
当前离线偏好优化方法(如 DPO 等)在 LLM 代码纠错任务中面临三大核心挑战:
- 错误类型感知缺失:仅依赖单元测试的二元反馈信号,无法知晓类型错误(如 KeyError、ValueError 等),导致模型难以定位错误原因;
- 训练聚焦性不足:训练数据采用随机打乱的方式批量输入,模型需在多种错误类型间频繁切换适应,纠错学习的针对性不强;
- 动态适配能力薄弱:静态构建的训练集无法匹配模型训练过程中不断变化的能力短板,易引发灾难性遗忘或训练资源浪费。
为应对上述挑战,AP2O-Coder 借鉴人类按题型进行的「错题整理 - 专题突破 - 定期复盘」的学习模式,构建了包含四大核心模块的优化框架,旨在实现错误信息的深度利用与模型能力的动态适配。
二、AP2O-Coder 的
核心技术框架与工作机制
AP2O-Coder 的核心设计思路是通过系统化流程实现错误类型的精准捕捉、渐进式优化与动态适配,其整体框架包含四个关键步骤(如图 1 所示):
图 1:AP2O-Coder 框架流程图
代码生成评估(Exam)
为全面掌握目标模型的初始能力边界,该模块让 LLM 在 M 个编程任务上生成 N 个候选答案(采用温度系数 1.0 的设置以充分探索能力范围),通过配套的单元测试获取每个答案的「通过 / 失败」标签,形成初始训练数据集,为后续错误分析提供基础。
错误诊断分析(Analysis)
借助编程语言专用分析工具(如 Python 解释器)对所有失败答案进行结构化解析,标注具体错误类型并统计各类错误的出现频率,按错误题型构建结构化的「错题本」。该过程实现了从二元反馈到精细化错误信息的转化,为针对性优化提供数据支撑。
渐进式偏好优化(Correction)
自适应错误回放(Quiz)
为适配模型训练过程中的能力变化,该模块定期在一个小验证集上评估模型性能,实时捕捉当前阶段的高频错误类型,找出模型依旧犯错的题型,将其对应的失败答案重新纳入训练流程。通过动态调整训练数据分布,确保模型始终聚焦于当前的能力短板,有效缓解灾难性遗忘问题。
三、实验验证与结果分析
研究团队在 6 款主流 LLM(含代码专用模型 CodeLlama、DeepSeek-Coder、Qwen2.5-Coder 与通用模型 Llama3、Qwen2.5、Qwen3)上开展了系统验证,参数规模覆盖 0.5B - 34B,实验基准包括 EvalPlus(HumanEval/MBPP)与 LiveCodeBench v6,主要取得以下研究发现:
性能提升的有效性
在不同类型与参数规模的模型上,AP2O-Coder 均展现出稳定的性能改进。如下表所示,在 EvalPlus(HumanEval)基准上,AP2O-Coder (H2L) 即使对于 30B+ 的大参数模型,也能实现 2.8% - 3.4% 的性能优化,且未出现现有后训练方法中性能退化现象。
表 1:各种类型和规模代码的 LLM 在 Pass@1 on EvalPlus (HumanEval) 上的表现。
错误抑制效果与泛化能力
图 2:使用 Qwen2.5-Coder-7B 在测试基准上出现错误的统计数据。
图 3:使用 Qwen2.5-Coder-7B 在测验阶段对验证集上的错误统计结果。我们的 AP2O-Coder 能够逐步减少错误。
如图 2 所示,相较于 SFT、DPO 等基线方法,AP2O-Coder 能够有效降低各类错误的发生频率,且未引入新的错误类型。如图 3,在 Qwen2.5-Coder-7B 的实验中,高频错误「WrongResult」的发生率显著下降,IndexError 等小众错误在训练后期实现清零。同时,该方法在 pass@5、pass@10 等指标上的稳定提升(如图 4),表明其增强了模型代码生成的泛化能力。
图 4:在不同模型规模下,使用 DeepSeek-Coder 在 EvalPlus (HumanEval) 基准上的 pass@5 和 pass@10 表现。
样本效率的优化
图 5:用于在 MBPP 训练集上对不同规模的 Qwen2.5-Coder 进行训练并达到最优性能的偏好数据对需求。
AP2O-Coder 通过错误类型的精准聚焦,显著提升了训练数据的利用效率。实验结果显示,该方法仅需 4% - 60% 的偏好数据即可达到传统 DPO 方法的最优性能,在 32B 参数规模的模型上,数据需求量减少更为明显(如图 5),这就和班上刷题时,优等生所需刷题量更少类似,为低资源场景下的 LLM 代码优化提供了可行路径。
通用 LLM 适配性
图 6:在将通用 LLM(如 Qwen2.5、Qwen3 和 Llama3)适配到代码领域时,其在 EvalPlus (MBPP) 上的 pass@1 表现。
AP2O-Coder 不仅适用于代码专用 LLM,也能有效支持通用 LLM 向代码领域的适配。在 Qwen3、Llama3 等通用模型的实验中,经过该方法优化后,模型在 MBPP 基准上的 pass@1 分数显著提升,验证了其跨模型类型的适配能力(如图 6)。
四、研究发现与方法特性
实验过程中,团队发现了优化策略与模型规模的适配规律:
对于Qwen2.5-Coder,小参数模型(≤ 3B)采用「低频错误 -> 高频错误」的优化顺序更具优势,这一策略可避免模型因能力有限而陷入高频常见错误的学习困境,而让小模型一开始能看到不同种类的错误,跳出局部最优;
大参数模型(≥ 7B)采用「高频错误 -> 低频错误」的顺序效果更优,能够充分发挥其强学习能力,快速实现整体错误率的下降。这一发现为不同规模 LLM 的代码优化提供了针对性参考。
热门跟贴