显式逻辑与隐式逻辑:AI 时代软件工程的范式雏形
这篇文章的起点,是一个再普通不过的线上故障:AI 写的代码过了 CI,却无法搞定生产环境。
从那个困惑出发,我试着把问题想清楚。
如果所有可验证的环境是对的,那它就是对的。如果它能在真实线上环境中经受住考验,那它就能被用于真实线上环境。
把一个简陋版本的抖音托进一个沙盒环境,用真实的线上数据去不断验证——用 HTTP 请求、网络安全测试、线上的真实观测指标来约束它的行为,让其在一个最小独立单元中不断更新代码、配置、数据,最终可以得到一个能写出真实抖音 App 的 AI。
显式逻辑与隐式逻辑
从信息论的视角来看,任何工业级软件系统的逻辑都由两部分构成:显式逻辑与隐式逻辑。
显式逻辑:AI 能轻易读到、学会的东西。需求文档、API 定义、代码规范、测试用例——任何能写成文字、放进训练集的东西,都是显式逻辑。
隐式逻辑:那些很难被完整写进文档、却决定系统能否在真实负载与复杂时序下稳定运行的约束。它们是复杂系统维持稳态的基础,具体表现为两个维度:
- 架构设计理念(Architectural Design Philosophy) :属于高阶设计意图,通常仅由核心开发者掌握,其传承过程伴随极高的信息损耗与沟通成本。
- 边界约束与自愈行为(Boundary Constraint Behaviors) :极少在规范文档中体现,通常作为历史异常的补丁或防御性代码存在(如:自适应限流、分布式网络分区下的柔性补偿、指数退避重试等)。这类逻辑会随着系统规模扩大而迅速增长,表现为一种“必要冗余”:若缺失则导致级联故障甚至系统雪崩,若过度定义则导致系统复杂度熵增。
AI 编程的局限性
现在的 AI 训练,本质上是一场盛大的显式逻辑灌输仪式,是传统开发中“需求→代码”路径的延伸。我们用海量的需求文档、问答对、代码片段,教会 AI 怎么写出一段“看起来正确”的代码。然后我们评估它,用的也是显式逻辑的尺子——代码能不能跑通、有没有语法错误、是不是符合需求描述。
但这把尺子,量不出隐式逻辑。
当前的 AI 不知道什么是内存碎片,不知道什么是连接池耗尽,不知道什么是冷启动的毛刺。因为这些知识,从来不在训练数据里。它们在线上环境的每一次告警里,在那些“不知道为什么但是重启一下就好了”的经验里。
这也是为什么你让 AI 生成一个全量代码工程,可以在测试环境中跑通,但是一旦到了线上就崩溃。
工程师思维下的推论
AI 需要学习规则,才能生成正确的东西。
- 规则有两种:能写出来的(显式逻辑),和写不出来、只能在运行中显现的(隐式逻辑)。
- 当前 AI 训练,几乎只灌显式逻辑。
- 显式逻辑灌到一定程度,边际效益递减。因为决定线上存活的,是隐式逻辑。
- 隐式逻辑,几乎只存在于线上环境。
- 因此,AI 训练的未来方向,必然是把线上环境变成一个 AI 可以感知、可以从中学习的“连续性数据流”。
- 这意味着,我们需要打通代码编写和线上运维。程序员和运维,在 AI 原生时代,必须合二为一。
- 如果 AI 只需要接触线上环境中的连续数据,就能涌现出更强的能力,那么我们也许一直被“需求→代码”的思维范式束缚着。人类需求本身是一种降维表达,未必能覆盖现实世界运行所需的最小逻辑;相比之下,让 AI 直接拟合真实世界的反馈,反而更可能逼近需求本身。
收益
- 这将是 DevOps 的终极形态,软件工程最理想的运行时。开发、测试、部署、监控不再是分离的阶段,而是一个连续的反馈回路。
- 消除了“训练集”和“真实世界”之间的分布偏移。AI 训练的数据就是生产环境的数据,不存在“训完发现线上不一样”的问题。
- 无需额外的上下文接入,生产环境(一个巨大的容器 AI 编排平台)本身就是一个统一的上下文,所有指标、数据随时取用。
- AI 在容器平台中学习,隐式逻辑会不断涌现。
- 解决了 AI 训练中的高质量数据搜集问题——有明确的输入输出,明确的观测指标,AI 生成的代码在观测指标中循环迭代,解决隐式逻辑问题,最终达到生产环境可用。
- 工程师和研究者的生产环境将被统一。同一套容器平台既是工程师的运行时,也是研究者的实验场。
- 软件工程会变成一个不断自我进化的个体。
解决思路
上述愿景虽然美好,但挑战依然艰巨。不过它们本质上属于算力与基建层面的工程架构问题,而非根本性的理论障碍。
整体思路是一条数据驱动的闭环链路:线上流量被录制并缓存,注入到一个与生产环境同构的 AI 沙盒中;AI 在沙盒里生成代码并运行;可观测性平台持续采集沙盒中的行为指标(延迟、错误率、资源利用率等),与真实项目的基线对比;偏差形成奖励信号,驱动 AI 迭代代码。这个循环不断运转,直到沙盒中的行为指标收敛到生产级标准。
传统开发时代,这一范式缺乏工程落地的基础条件。但在今天的云原生时代,其中不少关键痛点已经得到缓解。上述各环节所依赖的基础设施——可观测性平台(OpenTelemetry、SkyWalking)、流量录制回放(GoReplay、Sharingan)、容器编排与轻量级虚拟机(Kubernetes、Firecracker)以及强化学习框架(RLHF/GRPO pipeline)——都已经具备较成熟的工业实践。单点技术栈不再是最核心的障碍,真正困难的,是如何把它们以足够低成本、足够高安全性的方式整合起来。
参考 AlphaZero 自我博弈的思路,我提出影子演化范式作为一种解决尝试。
影子演化范式(Shadow Evolution Paradigm)
核心思想很简单:给 AI 建一个和生产环境同构的沙盒,让它在里面“活”“学”“进化”。
具体来说:AI 沙盒环境与真实项目环境共用一套容器基础设施(同样的网络拓扑、同样的资源限制、同样的可观测性采集)。AI 只被告知显式逻辑,生成第一版代码并部署到沙盒中。然后,真实项目的录制流量被回放进沙盒,可观测性平台实时对比沙盒与生产的行为差异——延迟分布、错误率、吞吐量、资源消耗——这些偏差构成奖励信号,驱动 AI 迭代代码。
这个过程持续运转:AI 不断修改代码、配置和数据,沙盒中的行为指标逐步逼近生产环境的基线。当两者的观测指标收敛到可接受的阈值时,沙盒中的代码就是生产级的。在这个过程中,没有人显式地教 AI 怎么处理连接池耗尽、怎么做级联熔断——这些隐式逻辑是它自己从生产数据的反馈中演化出来的。
写在最后
回过头看,这篇文章的起点,其实只是一个再普通不过的线上故障:AI 写的代码过了 CI,却无法搞定生产环境。
从那个故障出发,我试着把困惑想清楚。于是有了“显式逻辑”和“隐式逻辑”这对概念。于是有了那条推导链条。于是有了一个关于未来 AI 训练范式以及下一代软件工程的猜想。
要真正验证这套范式,需要搭建与生产同构的环境,接入真实流量,并具备完整的可观测性与安全隔离基础设施。这样的工程体量,已经远远超出一般的实验室能力。
但它所指向的方向已经足够清晰:让生产环境成为 AI 连接真实世界的接口。