Skip to main content
2026arXiv 2026

意图形式化:AI代理时代可靠编程的重大挑战

Intent Formalization: A Grand Challenge for Reliable Coding in the Age of AI Agents

本文深度解读微软研究院Shuvendu Lahiri的最新研究,提出意图形式化这一核心挑战——如何将自然语言中的模糊意图转化为可验证的正式规范,从而弥合看起来正确与确实正确之间的鸿沟。论文系统阐述了从测试到DSL的四层规范谱系,并展示了TiCoder等系统的实践经验。

Shuvendu K. Lahiri
AI解读AI Agent形式化验证代码生成规范工程人机交互

一、问题的本质:Vibe Coding 时代的意图鸿沟

当 Andrej Karpathy 在 2025 年初提出 "Vibe Coding" 这个词汇时,他精准地捕捉到了 AI 编程范式的本质转变:开发者用自然语言描述意图,AI 自动生成代码,人类从 "作者" 变成了 "监督者",甚至有时候只是代码的 "消费者"。

但一个根本性的问题始终悬而未决:生成的代码真的符合用户的意图吗?

论文用一个看似简单却极具启发性的例子揭示了这个问题:当用户说 "给定一个整数列表,去重",他们真正想要的是什么?

  • 理解 A:保留每个元素的一个副本,如 [1,2,3,2,4] → [1,2,3,4]
  • 理解 B:删除所有重复出现的元素,只保留唯一的,如 [1,2,3,2,4] → [1,3,4]

这种歧义在软件开发中无处不在。人类开发者通过领域知识和对话来解决,而 LLM 仅仅依赖训练数据的统计模式,这导致代码"看起来正确",却可能悄然偏离用户的真实意图。

核心洞察:AI 生成的代码是"合理构造"的,但不是"正确构造"的。意图鸿沟——用户意图与程序行为之间的语义距离——才是可靠性的真正瓶颈。

二、核心命题:意图形式化作为解决方案

作者提出了一个关键论点:与其问"AI 能写出代码吗?",不如问"AI 能帮助我们明确代码应该做什么——并验证它确实做到了吗?"

意图形式化(Intent Formalization) 被定义为:自动将非形式化的用户意图转换为一组可检查的正式规范。

这个转换过程提供了从轻量级到严格验证的完整谱系:

意图形式化谱系图
意图形式化谱系图

四层规范谱系

层级形式代表工具验证方式适用场景
测试I/O 样例TiCoder, nl2postcond动态执行快速验证、持续集成
代码契约断言/前置/后置条件ClassInvGen运行时检查防御性编程
逻辑契约Dafny/Verus/F* 规范Auto-Verus, VeriStruct静态形式验证高可靠性系统
领域特定语言完整规范3DGen, EverParse验证合成协议解析、关键基础设施

这个谱系的关键洞见是:这些层级不是互斥的,而是互补的。测试可以验证后置条件,后置条件可以引导不变量发现,不变量可以支撑完整的形式化证明。

三、关键瓶颈:如何验证规范本身

论文提出了意图形式化中最棘手的问题:规范本身的验证。代码可以通过测试来验证,但规范本身的正确性却无法通过测试来确认——因为用户的意图只存在于用户的头脑中,没有独立的"真理之源"可以对照。

作者提出了两个核心度量指标:

3.1 健全性(Soundness)

规范与正确行为一致,不会拒绝有效的实现。

3.2 完备性(Completeness)

规范具有区分性,能够拒绝不正确的实现。

这两个属性的操作化定义基于测试套件:

  • 如果规范 S 在测试 T 的每个输入-输出对上都满足,则 S 关于 T 是健全的
  • 如果 S 能够检测到输出变异后的错误,则 S 关于 T 是完备的

一个发人深省的例子:专家评审标记为"强"的 Dafny 规范,其完备性检验却发现了缺陷:

dafny
// 专家评审标记为"强"的规范 ensures forall x :: x in result ==> (InArray(a, x) && InArray(b, x)) // 自动化完备性检验发现应该使用双向蕴含 ensures forall x :: x in result <==> (InArray(a, x) && InArray(b, x))

单向蕴含意味着空列表平凡地满足规范——这正是自动化度量能够发现而人工评审遗漏的问题。

四、实践经验:TiCoder 与交互式形式化

TiCoder 系统展示了意图形式化在实践中的威力。它采用交互式测试驱动的方式:

TiCoder 交互流程图
TiCoder 交互流程图

工作流程

  1. 用户提供自然语言提示:如 "找出两个列表的共同元素"
  2. LLM 生成候选代码:多个可能的实现
  3. LLM 生成候选测试:特别针对歧义点的测试用例
  4. 用户分类测试:对每个测试回答 Yes/No/Undef
  5. 剪枝与排序:根据用户反馈筛选和排序候选代码

实际案例

text
提示:"Find the shared elements from two lists." 生成测试: (1) common([1,2,3], [2,3,4]) == [2,3] → User: Yes (2) common([1,2,2], [2,2,3]) == [2,2] → User: No 通过拒绝测试 2,用户明确歧义:结果应该是集合(set)而非多重集(multiset) TiCoder 据此剪枝保留重复元素的候选实现

实证结果

15 名专业开发者的对照研究显示:

  • 使用 TiCoder 后,正确评估 AI 生成代码的比例从 40% 提升到 84% (p < 0.001)
  • 认知负荷显著降低 (p = 0.007)
  • 大多数参与者偏好 TiCoder 的交互方式

五、研究前沿:七个开放挑战

论文系统梳理了从理论到实践的七个关键挑战:

5.1 从基准测试到真实系统

现有研究主要关注独立的算法函数,真实世界的软件包含副作用、可变状态、并发和复杂依赖。如何为异步事件处理程序或机器学习管道定义"后置条件"?

5.2 变更意图与组合性

实践中多数开发是修改现有代码而非从头编写。意图形式化必须捕捉"应该改变什么",同时与现有规范组合。代码迁移(如 C 到 Rust)也需要形式化翻译意图。

5.3 成本效益的澄清优先级

对实践者而言,规范的价值取决于能防止多少 bug。需要可扩展的方法来按 bug 预防价值对规范进行排序,而不必穷举所有候选程序。

5.4 规范验证的自动化度量

既然没有规范正确性的独立神谕,必须整合多种互补信号:测试和变异分析作为自动化代理、针对性用户反馈、跨工件交叉检查(代码、文档字符串、形式注解)。

5.5 丰富逻辑与量词

验证感知语言使用量词、递归谓词和幽灵变量。LLM 在这些构造上表现欠佳,现有验证器在展开复杂具体测试输入的递归谓词方面存在根本限制。

5.6 人机交互规范设计

TiCoder 的批准/拒绝循环在基准问题上显著提升了正确性,但真实世界的规范需要更丰富的交互:自然语言解释形式属性、置信度校准建议、规范模板——这是一个很大程度上尚未探索的 HCI 设计空间。

5.7 集成到开发者工作流

意图形式化必须自然融入现代开发者工作流:从问题创建时捕捉预期行为,到代码审查中向审查者展示意图,再到 CI/CD 管道中的代理工作流持续发现和验证规范。

六、结论与启示

这篇论文提出了一个核心论断:AI 生成代码的时代已经到来,但可靠 AI 生成代码的时代尚未到来。意图形式化——使人类意图明确化、可检查、可执行——是弥合这一差距的有前景的方向。

对系统设计者的启示

  1. 多层次规范策略:不要追求一刀切的验证方案,根据可靠性需求采用不同层级的规范
  2. 人机协作优于完全自动化:TiCoder 的成功表明,将用户纳入规范验证闭环能显著提升正确性
  3. 度量驱动:自动化规范质量度量是规模化意图形式化的关键前提

对 AI Agent 开发者的启示

  1. 从代码生成转向规范生成:AI 的能力不仅在于写代码,更在于帮助明确"代码应该做什么"
  2. 歧义点的主动识别:系统应该识别可能产生不同实现的输入点,并主动寻求澄清
  3. 验证基础设施的整合:形式验证工具不应是事后补丁,而应成为开发工作流的有机组成部分

在 Vibe Coding 的时代,当人类可能永远不会检查代码时,规范成为人类意图与机器行为之间的主要接口——使这种集成不仅是有益的,而且是必不可少的。


论文信息

  • 标题:Intent Formalization: A Grand Challenge for Reliable Coding in the Age of AI Agents
  • 作者:Shuvendu K. Lahiri (Microsoft Research)
  • 发表:arXiv:2603.17150v1, March 2026
  • 相关项目:TiCoder, Auto-Verus, 3DGen, VeriStruct, ClassInvGen