AP2O-Coder:像人类“做题家”一样,提升代码大模型的刷题效率

AP2O-Coder让代码大模型像人类一样高效刷题,提升代码生成纠错能力,并降低训练数据需求。

原文标题:AAAI 2026 | “做题家” Code LLM,像人类一样按题型高效刷题

原文作者:数据派THU

冷月清谈:

本文介绍了上海交大和腾讯的研究团队提出的AP2O-Coder框架,该框架旨在提升大语言模型(LLMs)在代码生成方面的纠错能力。AP2O-Coder 借鉴人类“按题型高效刷题”的经验,通过“考试 - 分析 - 纠错 - 小测”的系统性流程,针对现有方法在错误类型感知、训练聚焦性及动态适配能力方面的不足,实现了错误信息的深度利用与模型能力的动态适配。该框架在多个主流开源模型上实现了最高 3% 的 pass@k 性能提升,并显著降低了训练数据需求量。研究还发现,优化策略需与模型规模相适配,小参数模型适合“低频错误 -> 高频错误”的优化顺序,而大参数模型则适合“高频错误 -> 低频错误”的顺序。

怜星夜思:

1、AP2O-Coder 框架中“自适应错误回放”模块是如何缓解灾难性遗忘问题的?除了定期评估模型性能,还有没有其他更有效的方法?
2、文章提到 AP2O-Coder 在不同规模的模型上应用不同的优化策略(L2H vs H2L),这种策略选择的根本原因是什么?在实际应用中,如何判断一个模型应该采用哪种策略?
3、AP2O-Coder 框架在提升代码生成质量的同时,是否会增加模型的训练成本?如何在实际应用中平衡性能提升和训练成本?

原文内容

图片
来源:AI TIME论道
本文约2700字,建议阅读5分钟
我们提出自适应渐进式偏好优化方法(AP2O),并构建 AP2O-Coder 框架。


作者:张剑清,博士,在腾讯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)

基于错题本,设计差异化的优化顺序:对于小参数模型(如 0.5B)采用「低频错误 -> 高频错误」(L2H)的优化路径,对于大参数模型(如 34B)采用「高频错误 -> 低频错误」(H2L)的优化策略。通过构建 DPO 滑动窗口,逐步聚焦各类错误类型,一个题型一个题型地纠错,生成有序的偏好数据对图片,使模型能够分阶段集中优化特定类型错误。其中图片是输入 Prompt,图片是正确的回答(随机获得),图片是错误类型为 E 的错误回答。

自适应错误回放(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 的代码优化提供了针对性参考。

编辑:文婧



关于我们

数据派THU作为数据科学类公众号,背靠清华大学大数据研究中心,分享前沿数据科学与大数据技术创新研究动态、持续传播数据科学知识,努力建设数据人才聚集平台、打造中国大数据最强集团军。




新浪微博:@数据派THU

微信视频号:数据派THU

今日头条:数据派THU


从我个人的经验来看,避免灾难性遗忘,除了不断回顾之外,更重要的是理解知识的本质。AP2O-Coder 的错误回放机制,如果能结合一些知识图谱或者代码语义分析,让模型不仅仅是记住“这个错了要改”,而是理解“为什么会错,下次怎么避免”,效果可能会更好。

个人感觉“题型”的划分可以参考一些成熟的OJ平台(如LeetCode)的做法,他们已经对题目进行了比较细致的分类。我们可以借鉴他们的分类体系,再结合我们自己的需求进行调整。另外,可以考虑引入一些自动化聚类算法,根据代码的特征自动进行题型划分,这样可以减少人工干预,提高效率。

还有一个潜在的挑战是模型的泛化能力。AP2O-Coder主要是在一些benchmark数据集上进行验证,但在实际应用中,代码的风格和复杂度可能会有很大的差异。需要采取一些措施,例如增加训练数据的多样性,或者使用一些领域自适应技术,来提高模型的泛化能力。此外,还需要持续监控模型的性能,及时进行调整和优化。

从信息论的角度来看,可以考虑信息增益的概念。 优先优化能够带来最大信息增益的错误类型,无论对于小模型还是大模型,都能够更有效地提升模型性能。 然而,计算信息增益的成本可能较高,需要在实际应用中进行权衡。

从学术角度来看,这个问题涉及到 Exploration-Exploitation 的平衡。可以考虑引入强化学习中的探索策略,例如 ε-greedy 策略或 Upper Confidence Bound (UCB) 算法,在“考试”阶段鼓励模型尝试不同的代码生成方式,避免过早收敛到局部最优解。同时,需要设计合理的奖励函数,引导模型探索更有潜力的解决方案。

除了文章里提到的 AP2O-Coder,我觉得以下几种方法在降低数据依赖方面也很有潜力:

* 利用合成数据 (Synthetic Data): 通过程序自动生成训练数据,可以有效解决数据量不足的问题。例如,可以使用代码生成模型生成一些简单的代码片段,然后利用这些代码片段来训练代码纠错模型。
* 迁移学习 (Transfer Learning): 将在其他任务上训练得到的知识迁移到代码生成任务中。例如,可以使用在自然语言处理任务上训练得到的模型作为代码生成模型的初始化参数。
* 对比学习 (Contrastive Learning): 通过构建正负样本对,让模型学习区分相似和不同的代码片段。这种方法可以有效地利用无标签数据,提升模型的表示能力。

肯定会增加训练成本的,毕竟多了错误分析和自适应错误回放这些步骤。但是文章也说了,AP2O-Coder 减少了对训练数据的需求,这在一定程度上可以抵消额外步骤带来的成本。实际应用中,可以根据预算和性能目标来调整框架的参数,比如减少错误回放的频率,或者降低错误分析的精度。我觉得这就像是做菜,肯定是要考虑成本的,不能只追求味道好。

我觉得“自适应错误回放”的关键在于“自适应”这三个字。它不是简单地把所有错误都重新放回去,而是根据模型在小验证集上的表现,有针对性地回放高频错误。这就像老师会重点讲解你经常犯的错题一样。至于更有效的方法,可以考虑引入知识蒸馏,让模型学习之前的版本,从而保留已掌握的知识。

从信息论的角度来看,H2L和L2H本质上是两种不同的探索-利用策略。H2L类似于优先利用已知信息(高频错误),快速降低整体错误率;L2H则更侧重于探索未知领域(低频错误),避免陷入局部最优。模型规模决定了其探索和利用的平衡点。在实际应用中,可以通过A/B测试来确定最佳策略。

缓解灾难性遗忘,除了定期评估和回放高频错误,还可以尝试使用更稳定的优化器,例如AdamW。此外,可以考虑增加模型的容量,使其能够容纳更多的知识,从而降低遗忘的风险。当然,这也会带来计算成本的增加。

这个策略选择的根本原因,我觉得是模型的能力上限。小模型能力有限,如果一开始就盯着高频错误,可能就一直卡在那里了。先解决一些简单的、低频的错误,让它有点成就感,增加学习的信心。大模型能力强,直接解决高频错误,效率更高。判断模型应该采用哪种策略,可以先用小数据集跑一下,看看模型在不同类型错误上的表现,然后根据实验结果来选择。

楼上说的知识蒸馏我双手赞成!还可以试试持续学习(Continual Learning)的一些策略,比如iCaRL、EWC等,它们专门就是为了解决灾难性遗忘设计的。感觉把这些方法和AP2O结合起来,效果应该会更好。

性能提升和训练成本本身就是一个trade-off。AP2O-Coder的核心在于更有效地利用数据,从而在相同的计算资源下获得更好的性能。要进一步降低训练成本,可以考虑使用更高效的硬件,或者采用模型压缩、量化等技术。此外,可以尝试使用迁移学习,将AP2O-Coder应用于在其他数据集上预训练过的模型。

我觉得可以引入AutoML 的思想,自动搜索最优的训练策略和超参数,从而在给定的计算预算下最大化模型性能。或者,可以考虑使用一些开源的训练加速工具,例如DeepSpeed、Megatron等。白嫖使我快乐!