简介
我们要正处于 AI 辅助编程的黄金时代。像 GPT-4 和 DeepSeekCoder 这样的大型语言模型 (LLM) 已经成为开发者不可或缺的工具,能够在几秒钟内生成复杂的函数和样板代码。然而,任何使用过这些工具的人都知道一个痛苦的事实: 它们并不完美。
当 LLM 生成有错误的代码时,自然而然的下一步就是要求它进行修复。这个过程——代码编辑——至关重要。但仅仅生成一个修复后的代码版本并不总是足够的,特别是出于教育目的或进行复杂调试时。我们需要模型解释哪里出了问题以及如何修复它。我们需要高质量的自然语言 (NL) 反馈 。
目前,在提供有益反馈方面,闭源巨头 (如 GPT-4) 与开源模型之间存在巨大差距。虽然 GPT-4 经常能像经验丰富的导师一样行事,但开源模型经常产生幻觉,给出模糊的建议,或者默默地修复代码而不解释逻辑。
这引出了一项重要的研究贡献: COFFEE-GYM 。

如上图 1 所示,“错误反馈”和“正确反馈”之间的区别,就是破坏脚本与工作解决方案之间的区别。COFFEE-GYM 背后的研究人员开发了一个全面的强化学习 (RL) 环境,旨在教导开源模型如何提供这种关键且正确的反馈。
在这篇深度文章中,我们将探讨 COFFEE-GYM 如何解决数据稀缺问题,它是如何发明一种衡量“有用性”的新方法,以及它是如何利用 RL 将模型与实际调试的成功对齐的。
当前反馈模型的问题
在查看解决方案之前,我们需要了解为什么训练开源反馈模型如此困难。
训练这些模型的标准方法是监督微调 (SFT) 。 你获取一个包含错误代码和相应修正代码的数据集,然后训练模型预测修复方案。虽然这有助于模型学习语法,但这并不一定能教会它理解错误的因果关系 。
有三个主要障碍阻碍了 SFT 产生优秀的反馈模型:
- 数据稀缺与质量: 大多数数据集是机器生成的。它们包含简单、重复的错误,无法反映人类实际编写的复杂、混乱的错误。
- 缺乏成对数据: 要训练一个鲁棒的模型 (特别是对于 RL) ,你需要针对同一个错误同时拥有好反馈和坏反馈的例子。这种数据在现实中很少存在。
- 对齐差距: 最大的问题是 SFT 优化的是概率 , 而不是有用性 。 模型可能会生成听起来在语言上通顺,但实际上并不能帮助开发者 (或另一个模型) 修复错误的反馈。

如图 2 所示,以前的方法依赖于有限的模型生成的解决方案和简单的 SFT。COFFEE-GYM 提出了一个激进的转变: 一个基于 RL 的环境,利用多样化的人类数据和一个明确设计用于衡量调试成功的奖励函数。
第一部分: COFFEE 数据集
这项工作的第一个支柱是数据集本身,恰如其名地被称为 COFFEE (即 Code Fixing with Feedback,带反馈的代码修复) 。
研究人员认识到,合成的、机器生成的错误太容易了。为了获得真实世界的复杂性,他们转向了竞争性编程平台 (算法竞赛平台) 。在这些环境中,人类提交代码,未能通过隐藏的测试用例,编辑代码,然后再次提交,直到成功。这些“编辑轨迹”是学习如何调试的金矿。
数据收集流程
构建 COFFEE 不仅仅是抓取代码;它需要一个复杂的流程将原始提交历史转化为 AI 的训练集。

如图 3 详细所示,该过程涉及三个关键步骤:
- 抓取编辑轨迹: 他们收集了用户提交错误代码 (\(\tilde{y}\)) ,随后进行多次尝试,最终得出正确解决方案 (\(y^*\)) 的序列。这捕捉了人类在调试过程中的思维过程。
- 标注反馈: 这一点至关重要。由于原始数据不包含自然语言解释,研究人员使用 GPT-3.5 生成反馈,描述从错误代码到正确代码的转变。关键是,他们还生成了错误的反馈 (描述两个错误提交之间的转变) ,以创建强化学习所需的正/负样本对。
- 合成测试用例: 为了客观地衡量代码是否有效,你需要单元测试。研究人员为每个问题生成了大约 35 个测试用例,以确保评估的稳健性。
为什么人类数据很重要
由此产生的数据集比以前的机器生成集更加多样化。

图 4 提供了一个具体的例子。“错误代码”正确初始化了一个列表,但未能正确打印它。“正确反馈”指出了具体的逻辑缺陷 (解包列表) 。该数据集包含近 45,000 个这样的实例。
对数据集的分析 (原论文中的图 5,如下所示) 表明,人类错误分布在不同的难度级别和代码结构中,而机器生成的错误往往聚集在特定的模式周围。这种多样性确保了模型学会处理编程中混乱的现实情况。

第二部分: COFFEE-EVAL (奖励函数)
拥有数据集固然好,但如何训练模型使其“有用”呢?在强化学习中,你需要一个奖励函数——一个告诉模型“做得好”或“再试一次”的分数。
现有的方法通常使用强大的 LLM (如 GPT-4) 来给反馈打分。这被称为“LLM 作为裁判 (LLM-as-a-Judge) ”。虽然有效,但它昂贵、缓慢且主观。它只能告诉你反馈看起来好不好,而不能告诉你它是否管用 。
研究人员引入了 COFFEE-EVAL , 一种单元测试驱动的奖励机制。核心理念很简单: 只有当反馈有助于修复代码时,它才是有用的。
COFFEE-EVAL 的机制
COFFEE-EVAL 通过模拟修正过程来计算奖励分数。其工作原理如下:
- 输入: 问题描述 (\(q\)) 、错误代码 (\(\tilde{y}\)) 和生成的反馈 (\(\hat{c}\)) 。
- 编辑器: 这些输入被送入一个独立的“编辑器模型” (\(\phi\)) 。
- 修复: 编辑器根据反馈尝试修复代码。
- 测试: 修复后的代码针对合成测试用例运行。
- 评分: 奖励是通过测试用例的百分比。
在数学上,COFFEE-EVAL 分数定义为:

这里,\(\mathbb{1}\) 是一个指示函数,如果编辑后的代码通过测试用例 (\(x_i, z_i\)) 则等于 1,否则为 0。
“忠实”的编辑器
这里有个陷阱。现代代码 LLM 非常聪明,它们可能会忽略反馈自行修复代码。如果反馈是“删除所有内容”,但模型看到了错误并自行修复了它,那么这个反馈就会得到它不配的高分。
为了防止这种情况,研究人员训练了一个忠实的代码编辑器 (Faithful Code Editor) 。 这个编辑器经过微调,变得非常听话。它是在 (正确代码,正确反馈) 和 (错误代码,错误反馈) 的配对上训练的。

上面的公式显示了编辑器的损失函数。如果它在收到错误反馈时没有产生错误代码,它就会受到惩罚。这确保了编辑器严重依赖所提供的反馈,使其成为衡量反馈质量的可靠工具。
验证奖励模型
COFFEE-EVAL 真的有效吗?研究人员将其与“G-Eval” (让 GPT-4 在 1-5 的范围内对反馈进行评分) 进行了比较。

表 2 显示了自动评分与真实有用性之间的相关性。 DeepSeek-COFFEE-EVAL (Ours) 实现了最高的皮尔逊相关系数 (0.149) 和最低的均方误差。有趣的是,它与实际代码修复的相关性甚至优于 GPT-4-Turbo 的 G-Eval。这证明衡量执行结果比单纯的语义分析更能可靠地代表有用性。
第三部分: 使用强化学习进行训练
有了提供训练样本的 COFFEE 数据集和提供奖励信号的 COFFEE-EVAL , 研究人员构建了 COFFEE-GYM 。
这个环境允许他们应用先进的强化学习技术,特别是 PPO (近端策略优化) 和 DPO (直接偏好优化) 。
设置
目标是训练一个反馈模型 (\(\theta\)) ,该模型接收问题和错误代码,并输出有用的反馈。
- SFT 初始化: 首先,模型在 COFFEE 数据集上进行监督微调,以学习反馈的基本格式。
- RL 优化:
- PPO: 模型生成反馈。COFFEE-EVAL 对其评分 (通过运行忠实的编辑器) 。模型更新其权重以最大化该分数。
- DPO: 模型在反馈对上进行训练,其中一个反馈的排名高于另一个 (基于 COFFEE-EVAL 分数) ,允许模型直接优化其策略,而无需显式的奖励模型循环。
使用的 PPO 目标函数是标准公式:

这个过程将开源模型与最终目标对齐: 修复错误。
实验结果
研究人员在 HumanEvalFix (一个标准的代码修复基准测试) 上评估了他们经过 PPO 训练的反馈模型 (使用 DeepSeek-Coder-7B 作为基础) 。
评估指标
主要指标是 Pass@1 , 它衡量模型在第一次尝试时生成正确修复的问题百分比。

性能比较
如下表 3 所示的结果令人震惊。

让我们看看 DeepSeek-Coder 下方的 “Ours” 行。
- 基础模型 (DeepSeek-Coder) 达到了 60.4% 的准确率。
- 使用简单的执行反馈 (错误信息) 将其提升至 68.3% 。
- 使用 PPO 训练的 COFFEE-GYM 模型的反馈将分数跃升至 73.8% 。
这个 73.8% 的分数与 GPT-4-Turbo 的 74.4% 相当。经过 COFFEE-GYM 优化的开源模型基本上消除了与最先进的闭源模型之间的差距。
按错误类型分析
模型是仅仅修复了简单的语法错误,还是解决了逻辑错误?

图 8(a) 按错误类别分解了性能。红线 (Ours) 始终优于基线 (如 Self-Feedback) ,特别是在“变量误用 (Variable Misuse) ”、“值误用 (Value Misuse) ”和“逻辑缺失 (Missing Logic) ”方面。
图 8(b) 显示了人类评估结果。人类标注者在错误检测和修正清晰度方面,给 COFFEE-GYM 模型 (Our method) 生成的反馈打分高于 ChatGPT 和 SFT 基线。
结论与启示
COFFEE-GYM 论文为开源编码助手的未来展示了一个令人信服的蓝图。它指出,瓶颈不仅仅在于模型大小或架构,还在于训练目标的对齐 。
通过摆脱简单的文本预测 (SFT) ,转向带有经过验证的、基于执行的奖励 (COFFEE-EVAL) 的强化学习,研究人员证明了 7B 参数的模型可以在特定的调试任务中媲美 GPT-4 的性能。
主要收获:
- 人类数据为王: 抓取的编辑轨迹提供了训练鲁棒调试器所需的多样性。
- 执行 > 语义: 通过运行代码 (经由忠实的编辑器) 来评估反馈,比要求 LLM 对文本进行评分更可靠。
- RL 适用于代码: 强化学习不仅仅适用于机器人或游戏;它是将代码模型与“有用性”对齐的关键。
展望未来,像 COFFEE-GYM 这样的环境可能会成为训练下一代开发者工具的标准,确保当 AI 告诉你如何修复错误时,它真的知道自己在说什么。
](https://deep-paper.org/en/paper/2409.19715/images/cover.png)