AI编码循环中的形式化验证门控:用结构约束替代模型智能
最严重的软件 bug 往往也是最无聊的。用户不应该能读取其他租户的数据——没人反对这一点,设计评审会上也没人替“Alice 读取 Bob 的记录”辩护,但失效的访问控制依然是 OWASP Top 10 的头号问题。这些 bug 之所以能上线,是因为规则被放在了系统错误的位置:它存在于 prompt 里、评审清单里、以及“每个未来的工程师——现在则是每次模型调用——都会记住这个不变式并正确应用它”的共享期望中。这个假设本就脆弱,而当 AI 生成绝大部分代码时,它彻底失效了。你可以做所有显而易见的事:把规则写进 CLAUDE.md,编写细致的系统 prompt,在 agent 指令里强调“授权非常重要”——这些都应该做。但当模型写完一万六千行代码后,真正的问题依然是:你如何知道代码做了你想做的事? 测试有帮助,但测试是经验性的,它们只检查你和模型记得写的那些用例,无法替下周别人添加的 handler 说话。
作者想拉动另一根杠杆,其主张直截了当:对于一大类生产软件而言,结构性反压比 agent 智能的渐进提升更有效。现有模型已经能写出几乎全部代码,限制因素在于你是否能知道它们做了你想做的事——而这种认知来自于模型所编写的底层基质(substrate),而不是等待一个更聪明的模型。
行为门控 vs. 结构门控
大多数 prompt 级别的约束是行为门控:我们告诉模型“不要跳过授权”“校验输入”“使用共享辅助函数”。模型遵循这些指令的频率足以让它们有用,但失败的频率也足以让整个安排变得不稳定。行为门控依赖于模型记住规则、识别适用场景、抵抗局部上下文的引力,然后还要依赖人类评审者在整个代码库中维持同样的不变式。
结构门控则不同。编译器、类型检查器、测试运行器、linter、证明检查器——每一个都能针对眼前的制品给出一个具体的答案。这个答案并不完美,但它是真实的、可执行的。结构门控不依赖模型的短期记忆或善意,它直接检查代码的结构属性:类型是否匹配?引用是否有效?安全策略是否被违反?
Shen-Backpressure:将结构门控嵌入 AI 编码循环
作者构建的工具和方法论 Shen-Backpressure 正是为了探索这一赌注。它通过一个运行中的 demo 展示其工作原理,并演示如何将同样的循环接入你自己的项目。核心思路是:在 AI 编码循环中引入结构反压——不是让模型“更聪明”地记住规则,而是让代码的底层结构自动拒绝违反规则的输出。
例如,你可以定义一个“授权策略”作为结构门控:任何生成的代码如果试图绕过授权检查,编译器或静态分析工具就会报错。模型可以生成任意代码,但只要它触犯了门控,构建就会失败。这样,你就不再需要依赖模型在每次生成时都“记得”授权规则——规则已经固化在门控之中。
为什么结构反压优于更聪明的模型?
当前 AI 编码的瓶颈不是模型能力,而是验证能力。即使 GPT-5 能写出完美代码,你仍然需要一种方法确信它确实做到了。行为门控随着代码规模增长而指数级衰减:模型越写越多,上下文越长,规则越容易被稀释。而结构门控是组合式的:每个门控只检查一个局部属性,但它们的组合可以覆盖整个系统。
当然,结构门控并非万能。它不能捕获所有语义错误,也不能替代良好的设计。但对于一类关键问题——如安全、类型安全、资源隔离——结构门控提供了一种比“让模型更听话”更可靠的路径。
小结
AI 编码循环的未来不在于让模型更聪明,而在于设计更好的门控。Shen-Backpressure 代表了一种思路转变:从“教育模型”转向“约束模型”。当你不再期望模型永远正确,而是让代码的基质自动拒绝错误时,AI 编码才能真正走向生产级可靠。