What Makes a Programming Problem Hard for a Language Model? An Empirical Study of Item Difficulty Across Code LLMs on Two Benchmarks
本文通过一项实证研究表明,代码生成基准测试中的问题难度是一个稳定的、可迁移的指标,其由 HumanEval 中的规范特征(如示例和提示词长度)以及 MBPP 中的解法复杂度所驱动,这为在模型聚合评分趋于饱和时改进基准测试、自动评分和教育工具设计提供了关键见解。
原始论文采用 CC BY 4.0 许可(https://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
想象一下,你拥有一座巨大的、充满魔法的谜题图书馆,你还邀请了一整个由不同 AI“解题者”组成的动物园来尝试破解这些谜题。有些解题者是拥有大脑袋的小仓鼠(小模型),而另一些则是巨大的、超级智能的大象(比如 GPT-4)。通常,当我们检查这些 AI 有多聪明时,我们只会给它们一个单一的分数,就像学校里的期末成绩一样。但这篇文章认为,单一的成绩既枯燥又具有误导性。这就像是在说一场数学测试很“难”,仅仅是因为你得了 C,却不去询问:哪些问题才是棘手的?是那些长篇大论的文字应用题,还是那些没有示例的问题?
作者 Tanzim Islam Khan 决定不再盯着最终成绩看,而是开始观察谜题本身。他们选取了两套著名的编程谜题集(称为 HumanEval 和 MBPP),并进行了一场大规模实验。他们收集了 31 种不同 AI 模型(从微小的 10 亿参数模型到巨大的 GPT-4)的答案,并在一个安全、隔离的沙盒中重新运行了每一个答案,以观察它是否真的有效。这可是整整 13,400 次执行!
重大发现:是什么让谜题变得困难?
研究发现了一些令人惊讶的现象,这改变了我们对“难度”的认知。
在 HumanEval 集(带有长描述和大量示例答案的谜题)上,难度的关键并不取决于解决方案代码的复杂程度。它完全取决于谜题是如何编写的。
- 魔法线索: 如果谜题包含了已完成的示例(比如向 AI 展示:“这是输入 A,这是输出 B”),AI 就能轻松解决它。示例越多,难度就越低。
- 陷阱: 如果谜题冗长且啰嗦,或者缺乏这些有用的示例,AI 就会感到吃力,即使实际需要编写的代码非常简单。
- 证据: 作者构建了一个预测机器。当他们仅向其输入谜题的文本(提示词)时,该机器可以预测谜题的难度,其交叉验证的 为 0.45,这与完整模型的表现相匹配。但当他们仅输入解决方案代码的复杂度(如计算循环或变量数量)时,它几乎一无所知( 仅为 0.11)。
转折点:另一本谜题书
接着他们观察了 MBPP 集。这些谜题与众不同;它们非常短促,就像是一句句简短的耳语,而且没有任何示例。
- 在这里,规则反转了!由于每个谜题看起来都一样(短小且模糊),文本无法告诉 AI 该做什么。相反,难度取决于解决方案本身的难度。
- 如果代码需要复杂的逻辑,AI 就会失败。如果代码很简单,AI 就会成功。
- 教训: 一个问题对 AI 来说是否困难,取决于指令中最具变数的部分。如果指令变化很大(如在 HumanEval 中),那么指令起主导作用。如果指令都大同小异(如在 MBPP 中),那么答案的复杂度起主导作用。
这篇文章澄清了什么
论文明确地反对了“更难的代码总是等于更难的问题”这一观点。
- 他们测量了参考解决方案的复杂度(使用诸如“圈复杂度”和“Halstead 体积”等指标),并发现,在 HumanEval 上,这些数值对难度的预测能力远弱于提示词特征。如果指令清晰且充满示例,即使是复杂的解决方案,也不一定意味着生成过程更难。
- 他们也排除了难度仅仅是由于测试了哪些 AI 模型而产生的偶然性的想法。他们证明了难度是问题本身的一种稳定属性。无论你测试的是仓鼠大小的 AI 还是大象大小的 AI,同样的谜题依然是同样难或同样易的。他们甚至通过每次移除一个模型来进行检查,结果发现排名并未改变(相关性 )。
我们的确定程度有多高?
作者们非常有信心,但措辞也非常谨慎。
- 他们通过在沙盒中运行代码 13,400 次直接测量了这一点。
- 他们通过针对“强化版”测试(对于 HumanEval 有 80 倍更多的检查,对于 MBPP 有 35 倍更多)来证明了稳定性。即使在这些更严苛的测试下,难题与易题的排名也几乎保持不变(相关性 )。
- 他们通过改变设置(例如改变“温度”使 AI 变得更随机)来模拟(或者说重新运行)了结果,发现难度排名保持一致()。
- 他们建议,随着 AI 变得越来越聪明并开始解决几乎所有这些旧测试中的问题(饱和),观察哪些特定的问题仍然难以解决将变得更加重要。
未来的背景
论文还窥探了“未来”(根据论文时间线为 2026 年 6 月)。它指出,最先进的、超级强大的 AI(如 GPT-5.x 和 Claude Opus 4.8)基本上已经不再使用这些旧谜题了,因为它们对这些 AI 来说太简单了。前沿已经转移到了更难的、现实世界的编程任务。但教训依然存在:随着简单的题目逐渐消失,理解为什么剩下的难题之所以难,将成为构建更好工具的关键。
总而言之
如果你想知道一个编程问题对 AI 来说是否困难,不要只看它需要编写的代码。要看指令!
- 指令丰富且带有示例? 无论代码多么复杂,AI 都会轻松应对。
- 指令模糊或没有示例? 即使代码很简单,AI 也会感到吃力。
- 短促、单句式的指令? 那么代码本身的复杂度就是难度的来源。
这篇论文为我们提供了一张无需运行 AI 即可预测其困境的地图,只需阅读问题陈述即可。它为老师构建更好的练习提供了工具,也为工程师构建更好的基准测试提供了工具,确保我们不仅是在测试 AI 是否能猜出答案,而是在测试它是否真的理解了谜题。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。