← 最新论文
🤖 AI

When Uncertainty Isn't Enough: An Empirical Study of Self-Correction in Code Generation

这项实证研究表明,虽然多样本 P(True)P(\text{True}) 与代码正确性相关性最强,但基于不确定性的自我修正方法通常无法提高准确率且往往会降低性能,而基于验证的再生则是增强代码生成的唯一可靠策略。

原作者: Pranav Rakasi, Maanas Lalwani, Arnav Srivastava, Arya Palanivel, Tinuade Adeleke, Ruizhe Li, Sean Wu

发布于 2026-08-18
📖 1 分钟阅读☕ 轻松阅读

原作者: Pranav Rakasi, Maanas Lalwani, Arnav Srivastava, Arya Palanivel, Tinuade Adeleke, Ruizhe Li, Sean Wu

原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明

在人工智能领域,大型语言模型在编写计算机代码方面已变得异常出色。它们可以根据对任务的简单描述,生成能够解决该任务的可用程序。然而,这些数字助手存在一个盲点:它们经常在完全没有意识到代码已损坏的情况下,产出有缺陷的代码。不同于可能会停下来复核复杂计算的人类程序员,模型只会直接输出答案,无论其是否确定,且不会向用户发出任何警告信号。这造成了一个令人沮丧的循环:用户必须手动测试每一段生成的代码以查看其是否有效,从而在失败的解决方案上浪费了大量的时间和计算能力。研究人员长期以来一直希望,如果能教会这些模型识别自身的“不确定性”——本质上是让它们在不确定时产生一种怀疑感——他们就能构建出能在将结果展示给人类之前自行修复错误的系统。

一个研究小组着手在编写代码这一特定背景下测试这一想法。他们想知道,在自然语言(如撰写文章或回答问题)领域开发的衡量不确定性的方法,是否也能同样适用于逻辑严密的编程世界。他们还想观察,利用这些不确定性信号来触发自我修正,是否真的能提高代码质量。该团队测试了五种衡量模型对答案有多不确定的方法。其中一些方法观察模型在选择每个词时所使用的内部数学逻辑,另一些则要求模型直接陈述其自信程度,或者生成多个版本的同一段代码以观察它们之间的差异程度。他们在三种不同的编程模型上进行了这些测试,并使用了两套标准的编程挑战集。

结果揭示了成效与失败之间的显著分歧。最可靠的判断代码是否正确的方法是生成许多个不同版本的解决方案,并检查其中哪些能通过测试,这种方法显示出与实际成功之间存在极强的关联。然而,这种方法既昂贵又缓慢,因为它需要模型多次执行编写代码的工作。而研究人员原本希望作为快速预警系统的那些更廉价、更快捷的方法,则基本宣告失败。那些观察模型内部数学逻辑或询问模型自身置信度的技术,几乎完全无法预测代码是否真的能正常运行。事实上,对于较小的模型,要求模型评价自身的置信度所产生的数值基本上等同于随机噪声。

当研究人员尝试利用这些微弱的不确定性信号来修复代码时,结果比他们预期的还要糟糕。他们构建了一个系统,只要模型表现出不确定性,就会自动重写代码。结果不仅没有改善结果,反而使情况变得更糟。在他们测试的六种设置中,有五种情况下的自我修正系统实际上降低了成功率,导致模型产生的错误代码比最初直接给出第一个答案时还要多。唯一能持续提高代码质量的策略,是依赖于运行代码并通过一组测试用例来验证其正确性的方法。这表明,对于代码生成而言,模型的“内在怀疑感”并不是一个用于自行修复错误的有用工具。

这项研究得出结论:虽然不确定性信号不足以取代实际运行和测试代码的需求,但它们可能仍能发挥作用。研究人员建议,这些廉价且不完美的信号可以充当“守门员”。系统不必尝试自行修复代码,而是可以利用快速的不确定性检查,来决定何时值得投入额外的精力和计算能力去进行完整的、高成本的验证测试。通过这种方式,不确定性信号充当了一个开关,仅在最需要的时候才开启重型检查程序,而不是试图成为解决方案本身。这些发现挑战了“模型可以单纯通过学习变得更加谨慎”的希望,转而强调了外部检查对于可靠代码生成的必要性。

您所在领域的论文太多了?

获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。

试用 Digest →