← 最新论文
💻 computer science

BeSpec: Behavior-Level Specification Alignment for Code Generation

BeSpec 引入了一种行为级规范对齐框架,该框架通过从任务描述中构建显式的行为模型来检测并解决代码生成过程中的意图失配问题,在多个基准测试中显著优于现有的执行引导细化方法。

原作者: Qinghua Xu, Guancheng Wang, Boxi Yu, Lionel Briand

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

原作者: Qinghua Xu, Guancheng Wang, Boxi Yu, Lionel Briand

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

想象一下,你正试图教一个非常有天赋但有点过于刻板的机器人如何烤蛋糕。你给了它一个食谱(即“意图”或“规范”)。这个机器人非常擅长遵循指令,但有时你的食谱写得有点模糊。

例如,你可能会说:“混合食材。”机器人可能会在碗里进行混合,但也许你的本意是“轻轻拌入”。或者,你会说:“烤到熟为止。”但机器人并不知道“熟了”是指变成金黄色,还是仅仅凝固了。

现有方法的问题
目前大多数 AI 编程工具的工作方式是这样的:它们猜测食谱,尝试烤出一个蛋糕,品尝一下,如果味道不好,它们就会调整“混合技巧”或“烤箱温度”(即代码)。它们不断改进蛋糕,直到味道符合要求。

但问题在于,如果原始食谱本身就是错的(例如,你本意是想说“轻轻拌入”却只说了“混合”),机器人只会变得更擅长做出一个糟糕的蛋糕。它是在完美地实现错误的目标。这篇论文认为,我们应该在开始烤蛋糕之前,先修复“食谱”(即规范)。

解决方案:BeSpec(“行为侦探”)
作者创造了一种名为 BeSpec 的新方法。BeSpec 不仅仅是猜测代码并进行修复,它更像是一个侦探,在机器人开始烤蛋糕之前,首先写下蛋糕“应该”具备哪些具体特征。

以下是 BeSpec 的工作原理,我们沿用烘焙的比喻:

  1. “应该做什么”清单(预测行为):
    BeSpec 会询问 AI:“如果我们有一个完美的食谱,会发生哪些具体的事情?”

    • 示例: “面糊必须光滑”、“蛋糕必须膨胀”、“温度必须是 350 度”。
    • 至关重要的一点是,它还没有要求 AI 去烤整个蛋糕。它只是要求这些细小的、可检查的事实。对于 AI 来说,搞清楚这些小事实比烤好一整个蛋糕要容易得多。
  2. “试运行”(观察行为):
    然后,BeSpec 会要求 AI 根据原始模糊的食谱,烤几个小的“测试蛋糕”(候选程序)。

  3. 对比(侦探工作):
    BeSpec 将“应该做什么”清单与实际的“试运行”蛋糕进行对比。

    • 场景: 清单上写着“蛋糕必须膨胀”。但测试蛋糕却是扁平的。
    • 洞察: AI 意识到:“啊!原始食谱没有清晰地说明‘加入泡打粉’。机器人之所以烤出了一个扁平的蛋糕,是因为它字面上执行了那些模糊的指令。”
  4. 修复食谱(规范对齐):
    与其告诉机器人“再努力一点让它膨胀”,BeSpec 会回到源头并重写食谱:“加入泡打粉以使其膨胀。” 现在,食谱变得清晰了。

  5. 最终烘焙:
    有了这份经过澄清的食谱,AI 开始烤制最终的蛋糕。因为指令现在变得精确了,结果更有可能符合你真正的期望。

为什么这种方法更好
论文将这种方法与另外九种流行的 AI 代码修复方法进行了对比。他们使用了四组难度极高的编程谜题(类似于数学竞赛题)。

  • 结果: BeSpec 是明显的赢家。它正确解决问题的数量显著高于其他方法。
  • “为什么”: 当研究人员观察 BeSpec 仍然犯下的错误时,他们发现了一个有趣的现象。这些错误并不是因为食谱仍然令人困惑,而是因为题目本身太难了(比如需要天才级算法才能解决的数学问题)。
    • 换句话说: BeSpec 如此出色地解决了“困惑”问题,以至于剩下的唯一难题就是“高难度数学”问题。

核心结论
把 BeSpec 看作是一个防止 AI “过度优化”一个错误想法的工具。它迫使 AI 停下来,明确用户到底想要什么(即行为),并在编写任何一行代码之前先修复指令。这能带来更好的结果,尤其是当原始指令有些模糊时。

这篇论文表明,通过专注于澄清“意图”(食谱)而非仅仅修复“代码”(烘焙),我们可以从 AI 那里获得更优秀的软件。

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

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

试用 Digest →