Evaluating and Achieving Controllable Code Completion in Code LLM
本文介绍了可控代码补全基准测试(C3-Bench),旨在解决代码大语言模型在指令遵循评估方面的缺失,揭示了开源模型与闭源模型之间显著的性能差距,并提出了一种数据合成流水线,使微调后的模型能在这一新基准测试上达到最先进的水平。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
想象一下你是一位在繁忙厨房里工作的名厨(AI)。长期以来,测试这些厨师的方法很简单:我们给他们一份做了一半的菜品(缺失部分之前的代码)和一份做完后的菜品(缺失部分之后的代码),然后让他们填补中间的部分。如果最终的菜品味道很好(通过了单元测试),这位厨师就能获得一颗金星。
问题所在:“食谱”缺失了
该论文的作者认为,这种旧的测试方法是有缺陷的。在现实世界中,主厨不会只说:“把中间填上。”他们会说:“把中间填上,但只能使用素食食材,”或者“把中间填上,但长度必须正好是三行,”或者“把中间填上,但要使用一种特定类型的刀具。”
目前的 AI 模型非常擅长让菜品味道好,但它们经常忽略关于“如何做”的具体指令。它们可能会在要求用蔬菜时使用了肉类,或者在要求写一行代码时写了一个段落。旧的测试抓不住这些问题,因为它们只检查食物是否可食用,而不检查厨师是否听从了指令。
解决方案:C3-Bench(“指令遵循”测试)
为了解决这个问题,团队创建了一个名为 C3-Bench(可控代码补全基准测试)的新测试。你可以把它想象成一场全新的、更加严格的烹饪比赛。
C3-Bench 不仅仅是要求补全一段缺失的代码,每一项测试都附带了一个特定的、细粒度的指令。他们将这些指令分为两个主要类别:
- “如何做”指令(实现控制/Implementation-Control):
- 类比: “建造一座桥,但你必须使用悬索设计,而不是梁式设计。”
- AI 必须编写既能正常运行又符合特定风格、算法或结构的逻辑。例如,“使用特定的排序方法对这个列表进行排序”或“以这种特定的方式处理错误”。
- “规模”指令(规模控制/Scale-Control):
- 类比: “写一个正好是 10 个单词的句子,”或者“写一个正好是 3 句话的段落。”
- AI 必须生成符合严格大小限制的代码,比如正好是 5 行代码,或者特定的逻辑块,不多也不少。
他们的发现
该团队在 C3-Bench 上测试了 40 多种不同的 AI 模型(包括免费的开源模型和昂贵的闭源模型)。以下是他们的发现:
- “过度自信”的开源模型: 在旧的测试中,许多免费的开源 AI 模型表现得与昂贵的顶级模型一样出色。然而,在新的 C3-Bench 上,它们的表现显著下降。事实证明,它们“背诵”了旧的测试,但实际上并不懂得如何遵循复杂的指令。它们就像是背下了答案解析,却无法解决带有新变化的难题的学生。
- 差距: 在“能让代码跑通”的模型与“能完全按照要求跑通”的模型之间,存在着巨大的鸿沟。即使是某些最聪明、最昂贵的模型,在处理“规模”指令(如编写正好正确行数的代码)时也遇到了困难。
- 修复方案: 作者不仅指出了问题,还构建了解决方案。他们创建了一个流水线,用于自动生成数千个新的训练样本,其中 AI 编写代码并遵循特定的指令。他们利用这些数据训练了一个新版本的模型,称为 Qwen2.5-Coder-C3。
- 结果: 这个新模型成为了代码补全领域指令遵循方面的佼佼者,在新的测试中击败了几乎所有对手,同时在旧的测试中依然保持着良好的表现。
核心启示
这篇论文引入了一种衡量 AI 编程技能的新方式,而这种方式在现实世界中至关重要:AI 能听话吗?
他们发现,目前的许多 AI 模型就像是有才华的音乐家,虽然能弹奏出正确的音符,却忽略了指挥家关于节奏的变化。通过创建这个新的基准测试以及一种让模型更好地“倾听”的训练方法,作者正在帮助开发者构建不仅能编写代码,而且能根据用户具体、详细的需求编写出“正确代码”的 AI 工具。他们已将所有数据和模型公开,供他人使用和改进。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。