变成关键路径的审批队列
设计文档写着“人机回环”。发布演示稿写着“默认安全”。六个月后的事故回顾则写道,由于审批人在吃午饭,智能体(Agent)花了 90 分钟才给客户发送发票。这些文档都没有撒谎。它们只是在描述同一个组件在负载曲线不同位置的表现——而其中只有一份准确抓住了全貌。
当你在智能体与不可逆操作之间加入人工干预时,你并没有增加一个安全原语(safety primitive)。你实际上是增加了一个服务,它带有队列、吞吐量限制、质量负载曲线以及可用性概况。如果一个团队在发布智能体时没有命名那个服务,那么他们交付的产品的关键路径将取决于一段他们拒绝去运维的基础设施。
这种模式高度一致且可预测。有人记录过一个真实案例:由于要求对智能体的每一个输出进行人工审批,在 48 小时内积压了 1.4 万个待处理项,而负责审核的只有 3 个人,每小时大约处理 200 项。平均审批延迟达到了 6.5 小时。智能体并没有坏。它完全按照预期工作。只是审批人员池的大小是根据设计文档中的流量估算的,而不是实际的生产流量,这两者之间的差距在发布次日的早晨演变成了一个 P0 事故。
队列是一个服务,而不是一个勾选项
第一个错误是将“需要审批”视为工作流的一个属性,而不是系统中的一个依赖。属性是静态的。而依赖拥有 SLO、容量模型、轮值(on-call)和仪表盘。无论团队是否记录在案,审批环节都具备这些特性。
一个最低限度的诚实框架是:每一个审批步骤都是一个包含到达、服务时间和有限工作人员的队列。智能体是到达过程之一。客户升级请求(escalation)是另一个。常规重试是第三个。审批人员就是工作人员。排队论自 20 世纪 60 年代起就对此有了定义——团队只是没有使用这些术语,因为“人工”这个词让他们觉得数学模型发生了变化。
它并没有改变数学逻辑。它改变的是方差。人工服务时间具有重尾特征(heavy tails)——一次常规审批需要 30 秒,而一次令人困惑的审批则需要 20 分钟,且两者都由同一个审批人处理。重尾服务时间意味着在负载下,队列深度的增长速度比平均值所显示的要快。如果仪表盘显示的平均审批延迟是 4 分钟,它实际上隐藏了在队列繁忙时会让你陷入困境的长尾效应。
如果你在查看智能体延迟仪表盘时,没有同时查看队列深度仪表盘,那么对于控制到达率限流的人来说,这个队列就是不可见的。他们不会进行限流。深度会不断增加。直到客户投诉,人们才会第一次意识到问题的存在。
审批者的准确性并非恒定
第二个错误是将每次审批视为具有固定质量的独立事务。事实并非如此。同一个审批人在处理第 3 个和第 300 个决策时、在午饭前和午饭后、在正常周和发布高峰期,对于同类决策会给出不同的判断。
这非常重要,因为团队在发布时建立的安全案例假设审批者的准确率足够高,能够捕捉到智能体的错误。这一假设是在小样本、平静的日子里,且审批者知道自己正受监督的情况下测得的。在生产负载下,同样的审批者会在不相关的智能体任务之间进行上下文切换,混淆正在查看的方案,点错审批行,并因为某个重要决策埋没在 99 个无关紧要的决策中而将其遗漏。
在受监管的环境中,常见的升级 SLA 范围是:实时环节 15 分钟,批处理环节 4 小时,复杂审核 24 小时。在 15 分钟以下,审批者疲劳开始占据主导地位,审批质量随之下降。这并非一个感性的观察——而是一个决定了你究竟能发布什么样的智能体的结构性约束。如果你的业务模型需要亚分钟级的审批,那么你拥有的并不是一个“人机回环”系统。你只是拥有一个步骤繁琐的自动图章(rubber stamp)。
诚实的衡量方法是将审批准确性作为队列深度、队列时长、每小时处理项数和时间点的函数进行测量。绘制出这条曲线。准确率与智能体自身错误率相交的那一点,就是人工环节开始让情况变得更糟而非更好的转折点。没有绘制这条曲线的团队,只是在猜测自己处于这条线的哪一侧。
