← 最新论文
🤖 machine learning

Generative Compilation: On-the-Fly Compiler Feedback as AI Generates Code

本文引入了“生成式编译”,这是一种利用轻量级“sealor”转换的新颖方法,旨在使标准编译器能够在 AI 代码生成过程中对部分程序提供实时反馈,从而在无需白盒模型访问权限的情况下,减少错误级联并提高像 Rust 这样复杂语言的功能正确性。

原作者: Niels Mündler-Sasahara, Hristo Venev, Dawn Song, Martin Vechev, Jingxuan He

发布于 2026-07-16
📖 1 分钟阅读☕ 轻松阅读

原作者: Niels Mündler-Sasahara, Hristo Venev, Dawn Song, Martin Vechev, Jingxuan He

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

想象一下,你正在教一个非常有天赋但有点冲动的机器人如何写故事。这个机器人是一个大型语言模型(LLM),它非常擅长预测句子中的下一个词,但它并不真正了解语法或逻辑规则。它可能会写出一个听起来很有诗意但违反物理定律的句子,或者在编程世界里,它可能会写出一个看起来很酷但会导致计算机崩溃的程序。为了解决这个问题,我们通常会让机器人完成整个故事,然后把它交给一位严厉的编辑(编译器)来检查规则。如果编辑发现了错误,他会带着红笔把整个故事退回,机器人必须重新开始或尝试修复这一团乱麻。问题在于,当编辑开口说话时,机器人可能已经基于那一个微小的错误又写了五十个句子,从而制造出了一个难以解开的巨大混乱。

这篇论文探讨了一种帮助机器人的新方法:与其等到最后,如果编辑能在机器人写作的过程中实时进行纠错呢?这群计算机科学家将这种方法称为“生成式编译”(Generative Compilation)。他们想出了一个聪明的技巧,让标准的、现成的代码编辑器(编译器)能够在机器人工作时进行实时检查,而无需从头构建一个新的编辑器,也不需要窥探机器人的大脑内部。他们在 Rust 语言上测试了这种方法,这种语言以极其严格的安全机制而闻名,但也因极难编写正确代码而著称。他们的研究结果表明,通过及早发现错误,机器人可以犯更少的错误,编写更好的代码,并更快地完成任务,而且这一切都不需要一个极其昂贵的定制化编辑器。

问题所在:那位“太迟了”的编辑

把编写代码想象成在一位非常严格的建筑师指导下盖房子。在旧的方法中(被称为“生成后反馈”),建造者(AI)在没有任何求助的情况下,一砖一瓦地构建整座房子。一旦屋顶盖好了,建筑师走进来,看到地基裂了,然后说:“推倒重来。”建造者不得不拆掉整座房子,尽管错误发生在第一块砖的时候。这既浪费又令人沮耗。

另一种方法被称为“约束解码”(Constrained Decoding),它试图阻止建造者铺设坏砖。但这要求建造者必须是透明的(像一座玻璃房),以便建筑师能看清建造者的每一个想法,并在其行动前将其制止。但当今大多数优秀的 AI 建造者都是“黑盒”——我们无法看到他们的内心世界,因此无法使用这种方法。此外,为一个像 Rust 这样拥有复杂规则的语言构建一个定制的建筑师,是非常困难且昂贵的。

解决方案:“Seal-or”技巧

作者引入了一种折中方案,称为生成式编译。这里的秘密武器是一个他们称之为 Seal-or(取自单词 "seal" 的谐音)的工具。

想象 AI 正在写一封信,但在句子中间停了下来:“猫坐在……”
一个普通的编译器(严厉的编辑)会看着这个不完整的句子说:“我无法评分;这不是一个完整的句子。”
Seal-or 是一个聪明的翻译器。它会立即填补空白,用“虚拟词”使句子在语法上完整,哪怕只是瞬间的事。它把 “猫坐在……” 变成了 “猫坐在 [魔法占位符] 上。”

现在,严厉的编译器可以查看这个被“密封”(sealed)后的句子。如果语法错误(例如,猫不能坐在魔法占位符上),编译器就会大喊:“嘿,猫不能坐在那个上面!”随后,Seal-or 会将该投诉翻译回给 AI:“你不能把猫放在占位符上;尝试换一个词。”于是,AI 在写下一句之前就立即修正了错误。

Seal-or 的神奇之处在于它设计得非常谨慎。它只会在空白处填充那些可能是正确的词。如果 AI 的部分句子最终可能变成一个完美的句子,Seal-or 会确保编译器不会仅仅因为它不完整就拒绝它。但如果 AI 犯了致命错误(比如在 Rust 中的“所有权/借用”错误,即一个变量同时在两个地方被使用),Seal-or 能确保编译器立即捕捉到它。

他们的发现:及早发现错误

团队在真实的编程任务上测试了这个想法,要求七个不同的 AI 模型编写 Rust 程序。他们对比了三种方法:

  1. AI 单独作业: 仅仅靠猜测。
  2. AI + 生成后反馈: AI 写完整个程序,收到纠正,然后重试。
  3. AI + 生成式编译: Seal-or 在 AI 写作的同时进行检查。

结果令人印象深刻。使用生成式编译时:

  • 更少的崩溃: 无法编译通过的程序数量显著下降。对于某些模型,错误率从超过 60% 降到了个位数。
  • 更好的代码: 运行成功的程序在正确性上也表现更好。
  • 更快的修复: AI 花在生成垃圾代码上的时间减少了。因为 Seal-or 及早捕捉到了错误(通常就在出错后的几行之内),AI 不会浪费时间基于一个错误的思路去写一整章代码。
  • 更精简的投诉: AI 不再是在最后得到一份包含 20 个错误的庞大清单,而是得到了关于特定错误的、小巧且集中的提示,这使得理解哪里出了问题变得更容易。

为什么这很重要

这种方法之所以意义重大,是因为它不需要我们去重建 AI 或编译器。它适用于我们现有的“黑盒”模型,并使用程序员已经信任的标准编译器。它将编译器从一个“最终裁判”转变为了一位“现场教练”。

作者使用一种名为 Lean 的形式化语言在数学上证明了他们的 Seal-or 是安全的:它既不会误导编译器接受错误的代码,也不会错误地拒绝那些本可以被修复的代码。随后,他们为真实的 Rust 语言构建了一个工作版本,并证明了它在实践中是有效的。

简而言之,生成式编译就像是给 AI 提供了一个安全网,在它跌落之前就接住它,而不是等它摔在地上后再告诉它摔倒了。它让 AI 编程变得更安全、更快、更可靠,尤其是在那些对精确度要求极高的语言中。

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

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

试用 Digest →