AI 时代的精神病:当 MTTR 狂热撞上系统韧性
我有一种强烈的直觉:现在的科技行业里,有些公司正在经历一场深度 AI 精神病(AI psychosis),而且在那些公司里,你根本没办法进行理性对话。我说的不是陌生人——是我深深尊重的个人朋友。这让我很担心事情会怎么收场。
这恐惧有具体的来源。我亲历过基础设施从传统运维向云和云自动化转型时,MTBF(平均故障间隔时间)和 MTTR(平均恢复时间)之间那场大辩论。现在那些一模一样的论点换了个壳重新冒了出来,只是范围从基础设施扩大到了——整个软件开发行业,甚至可能扩展到整个世界。
从基础设施到软件开发:同一堂课,更大的赌桌
云计算转型的核心争论之一是:应该优先追求 MTBF(系统多久不出故障)还是 MTTR(出了故障多久能修好)。
传统运维文化强调 MTBF——通过严格的变更审批、冗余设计、完善的测试来防止故障发生。云原生文化则倾向于 MTTR——接受故障不可避免,把精力放在快速检测和快速恢复上。Netflix 的 Chaos Monkey 就是 MTTR 哲学的极端实践:主动注入故障,证明你的恢复能力够强。
这个争论最终达成了一个微妙的平衡:MTTR 确实是衡量运维成熟度的好指标,但你不能因此放弃对 MTBF 的关注。Charity Majors(Honeycomb CEO)多次强调过这一点——快速恢复是好事,但如果你的系统每五分钟就崩一次然后五秒修好,你的用户仍然在受苦。
DORA(DevOps Research and Assessment)团队在 Google 赞助下做了十年以上的研究,他们的 2025 年报告得出了一个关键结论:AI 扮演的是放大器的角色,但最大的回报来自于底层的社会技术系统(sociotechnical systems)的完善。工具不能替代系统性的工程实践。
现在,这场争论从基础设施领域蔓延到了整个软件开发领域。AI 编程工具的拥护者们几乎一致采取了极端的 MTTR 立场:「出 bug 没关系,因为 agent 能以人类无法企及的速度和规模来修复它们!」
MTTR 狂热:表面健康的灾难机器
这种「修得快就行」的心态有一个致命盲区。
在基础设施领域我们学到的关键教训是:你可以把自己自动化成一台极具韧性的灾难机器。系统可以通过所有局部健康检查,同时在全局层面变得完全不可理解。这不是理论推演——这是 AWS、Google Cloud、Azure 都曾用惨痛的事后分析报告验证过的现实。
Richard Cook,知名的安全工程研究者,在 How Complex Systems Fail 中写了一系列精炼的观察。其中有几条和当前的 AI 编程狂热形成了令人不安的对应:
- 灾难需要多个小故障的巧合,单点故障不够。 每个小故障单独看都无害,只有它们的组合才足以引发灾难。这意味着有大量未被察觉的故障轨迹比真正的事故多得多。
- 复杂系统永远运行在降级模式下。 系统从来不是完全健康的,只是故障还没积累到临界点。
- 事后分析对决策过程的重建几乎不可能准确。 人们会无意识地调整叙述,使过去的决策看起来合理。
把这些观察搬到 AI 辅助编程的场景里:
AI agent 生成的代码每次引入一个微小的不一致——一个边界条件遗漏、一个不恰当的抽象、一个和既有架构不兼容的设计选择——每个单独看都可以被快速修复。但它们在系统深处叠加积累,而没有人拥有全局视图来发现这条故障轨迹。
四个绿色指标背后的红色警报
和行业里朋友的对话让我格外不安。当我试图提出这些担忧时,得到的回应几乎是一套标准化的反驳话术:
「测试覆盖率是 100%」
测试覆盖率是一个被广泛误解的指标。Martin Fowler 在 Technical Debt 一文中指出,软件系统天然倾向于积累 cruft(内部质量的退化),而技术债务的利息体现在「添加新功能所需的额外努力」上。AI 工具可以让覆盖率数字飙升,但如果测试本身是 AI 生成的、只验证了代码的行为而不是业务意图的正确性,那你得到的是一套精确验证了错误行为的测试套件。
Stack Overflow 2025 年开发者调查的数据佐证了这个担忧:46% 的开发者不信任 AI 工具输出的准确性,只有 3% 表示「高度信任」。更有意思的是,经验越丰富的开发者越不信任——资深开发者的「高度不信任」比例达到 20%,是所有群体中最高的。
「Bug 报告数量在下降」
Bug 报告数量下降可以说明两件完全相反的事:代码质量提升了,或者用户放弃了报告。更可能的现实是第三种——AI 生成代码引入的 bug 类型变了。它们不再是明显的崩溃或界面错误,而是更深层的架构腐化:性能退化、数据一致性风险、安全边界模糊。这些 bug 不会出现在 issue tracker 里,因为它们需要理解系统全局才能被发现。
「我们的 agent 修复 bug 的速度比人类快 10 倍」
这正是 MTTR 狂热的核心论点。但修复速度的提升有一个前提假设:修复不会引入新的问题。在 AI 辅助的开发流程中,每个修复本身也是 AI 生成的代码,也可能引入新的隐性缺陷。这形成了一个正反馈循环:bug 越多 → 修复越多 → 新的隐性 bug 越多 → 更多修复。
「我们的代码变更量是去年的 3 倍」
变更速度的提升可能是最危险的健康指标。Richard Cook 的观察再次适用:变化发生得如此之快,以至于没有人注意到底层架构在腐烂。当系统的变更速度超过了任何个人理解这些变更的能力时,系统的可理解性就不可逆地下降了。
Ward Cunningham 的债务比喻在 AI 时代有了新含义
技术债务这个概念是 Ward Cunningham 在 1992 年的 OOPSLA 会议上提出的。他用金融债务做比喻:如果你写了不够干净的代码,之后每次在上面添加新功能时都要多付出的额外时间,就是这笔债务的利息。
Martin Fowler 后来扩展了这个概念,将技术债务分为四个象限:谨慎且有意(Prudent & Deliberate)、谨慎且无意(Prudent & Inadvertent)、鲁莽且有意(Reckless & Deliberate)、鲁莽且无意(Reckless & Inadvertent)。
AI 辅助编程正在大量制造一种新型债务——我称之为「不可审计的债务」(Unauditable Debt)。传统技术债务至少有一个优点:它是人类写的,另一个人类可以通过阅读代码来理解当时的决策逻辑。AI 生成的代码没有这个属性。当代码的作者不是任何一个有上下文的人类时,代码的「为什么」就丢失了。
DORA 2025 年的研究用更精确的语言描述了这个问题:AI 作为放大器,如果你底层的工程实践是好的,它会让你更好;如果你的工程实践有缺陷,它会放大那些缺陷。这不是线性放大——在一个复杂系统里,缺陷的放大是非线性的。
为什么这场对话如此困难
这可能是最让我沮丧的部分。提出这些担忧时,面对的往往是有理有据的反驳——更接近条件反射式的否认。
我能理解为什么。如果一个人或一个公司在 AI 编程工具上投入了大量时间、金钱和叙事(narrative),承认这些工具可能正在系统性地引入隐性风险,就等于承认这些投入可能是在错误的方向上。这在心理上很难接受。
而且 AI 工具确实带来了真实的效率提升。Stack Overflow 2025 调查显示 84% 的开发者已经在使用 AI 工具,其中 69% 的 AI agent 用户认为 agent 提高了他们的生产力。我自己也写过 Coding Agent 使用指南,深知这些工具在日常开发中的价值。这些数字是真的。问题是它们描述的是局部效率,不是全局健康。
这就像一个城市里每辆车都开得更快了(局部效率提升),但交通事故率也在上升,同时路网的整体吞吐量在下降(全局效率恶化)。每辆车的司机都觉得自己在受益——因为他们能感知到自己的速度——但没有人能感知到路网级别的拥堵。
反的不是 AI,是放弃工程纪律
让我明确立场:我不是在反对 AI 编程工具。我自己每天都在用它们。比如在之前的 AI 编程实践中,我探索过用 UI 原型倒推 PRD 的方法来减少需求偏差,这本质上也是一种用结构化流程对抗 AI 编程中"随意性"的尝试。
我自己每天都在用 AI 编程工具。比如在之前的 AI 编程实践中,我探索过用 UI 原型倒推 PRD 的方法来减少需求偏差,这本质上也是一种用结构化流程对抗 AI 编程中"随意性"的尝试。
但有一类用法让我很不安:把 AI 当成可以跳过工程纪律的通行证。具体来说——
- 用 AI 生成的测试覆盖率来替代对代码正确性的深度审查
- 用 bug 修复速度来替代对 bug 根因的系统性分析
- 用代码变更量来替代对系统架构演化的有意识设计
- 用 AI agent 的产出效率来替代对产出质量的评估
从基础设施工程的经验看,健康的做法是同时关注 MTBF 和 MTTR:
- MTBF 层面:投入精力理解你的系统架构、建立深度防御(defense in depth)、保持代码的可审计性、确保每个变更都有人类可以解释的「为什么」
- MTTR 层面:使用 AI 工具加速故障发现和修复、自动化重复性工作、扩大个体工程师的产出范围
两个都要做。只做后者然后假装前者不重要,迟早出事。
一个更诚实的对话框架
如果你也在为类似的问题困扰——身边的朋友或同事陷入了 AI 狂热,你不知道怎么开口——我试过最有效的方式是跳过具体技术指标,直接问一个更根本的问题:
你的系统里有没有任何人能够完整地解释它为什么能正常工作?
如果答案是「没有,但它有测试和监控」,那问题就已经存在了。测试验证的是系统曾经正确过的行为,监控反映的是系统当前的行为。但理解系统为什么能正常工作——以及在什么条件下它会停止正常工作——需要的是人的心智模型(mental model),这个模型是无法被测试或监控替代的。
Richard Cook 说的好:「复杂系统的运行总是接近其性能边界。系统在正常运行时并不安全——它只是还没有遇到触发灾难的事件组合。」
走得快不是问题。问题是走得快到没人理解系统为什么还能跑——等到跑不动的那天,也没人知道该修哪里。