一个团队负责摘要生成器。另一个团队负责摄取这些摘要的搜索排序器。第三个团队负责一个路由,根据排序器的置信度分数在不同的智能体人格之间进行选择。这些团队都没有共同的值班轮换,也没有人参加同一个站会,他们之间唯一的契约就是“上一个功能的输出是下一个功能的输入”。周二,摘要团队收紧了一个提示词,以修复销售演示中反馈的幻觉问题。六小时后,搜索排序器的质量骤降。到周三早上,路由开始将任务交给错误的智能体人格。复盘报告会将原因记录为“提示词变更”,但实际原因是团队的 AI 功能已经悄然组成了一个没人绘制过的有向图。
这是最常见的 AI 故障形式,它不会触发你为 AI 故障构建的任何警报。模型没有宕机。被修改功能的评估套件显示为绿色。Token 成本曲线很平稳。真正断裂的是两个功能之间的接口,你的依赖工具将其视为纯文本,因为在 API 边界它确实只是纯文本——并且将其视为惰性的,因为纯文本不携带版本、Schema 或弃用策略。
走查一个典型的 AI 产品界面并计算消费关系。分类器为路由提供输入。摘要为搜索索引提供输入。智能体的计划步骤为其执行步骤提供输入,执行步骤的工具输出又为下一轮推理提供输入。检索提示词的输出为生成提示词的上下文提供输入。安全提示词的判决为后处理重写提供输入。每一个箭头都是一个功能的功能输出分布转化为另一个功能的输入分布的地方。
在传统的服务架构中,这个图是可见的。Protobuf 文件在版本控制中,服务网格记录调用,SLO 仪表盘标明消费者,Schema 的破坏性变更会导致 CI 失败,因为消费者的生成客户端拒绝编译。在 AI 产品中,存在同样的图,但每个箭头都是一段自由格式的字符串。输出 Schema 就是模型上周发出的任何内容。消费者的解析器是一个正则表达式或一个设置了 additionalProperties: true 的 JSON Schema。“破坏性变更”的受影响面是上游模型的整个后验分布,而不是数据库中的列名。
这就是为什么“提示词编辑作为破坏性变更”的问题比“服务 API 作为破坏性变更”的问题更难,而不是更容易。Protobuf 大约有五种损坏方式,而且它们都可以通过 Linter 枚举出来。自然语言输出有成千上万种偏移方式——平均长度、拒绝率、套话频率、引用密度、命名实体的隐式排序、列表中的要点数量、待办事项的动词时态。每一个分布轴都可能是下游消费者的提示词正在悄悄依赖的东西,而下游团队往往自己都没有意识到这种依赖。
将这一切整合在一起的架构认知虽然令人不安,但值得直接说出来:团队的 AI 功能已经组合成了一个有向图。没有人坐下来画过它。没有人声明过边缘。没有人拥有节点之间的接口契约。无论如何,这个图是存在的,每一次提示词修改都是对图中一个节点的更改。选择不在于是否拥有这个图。选择在于是在下一次停机事故为你画出它之前,还是由你先画出它。