人工审核队列是你的 P0 SLA:当 HITL 成为瓶颈时
第一次事故很少表现为系统宕机。它通常是来自客户成功团队的一条 Slack 消息:“嘿,我们还好吗?在过去的一小时里,有五个客户升级了工单,这些工单在‘待审核’状态下已经躺了超过一天了。”你检查了模型延迟仪表盘。绿色。你检查了智能体(Agent)的成功率。绿色。你检查了单次调用成本图表。健康。你监测到的一切指标都正常。出故障的是一个你的监控栈根本不知道其存在的队列,负责该队列的人员其日历不在你的容量规划器的读取范围内,而管理它的 SLA(服务等级协议)甚至从未被书写下来。
那个队列就是你的人机回圈(human-in-the-loop, HITL)升级路径。你在三个月前为了“安全起见”添加了它——当智能体在极少数情况下置信度较低或操作风险较高时,它会将案例移交给人工审核员。上线之初,它每天可能只处理十几个条目。运维团队在处理其他任务的间隙就能搞定它们。它曾是一个兜底方案,而不是一个系统。如今,它正在处理数千个条目,解决时间的中位数翻了三倍,排队等待的客户正在悄无声息地流失。HITL 路径本身并没有失效 。它只是不再被当作生产环境来对待了。
这是目前已发布的 AI 功能中最容易被漏诊的故障模式,其原因是结构性的。你技术栈中的每个其他组件都有人负责,而这个组件的表现关系到他们的晋升。模型有供应商客户团队支持。智能体循环有编写它的工程师。评估套件(eval suite)有轮值的研究工程师。而审核队列只有一个 Notion 文档和一个 Zendesk 视图,一旦出事,四个团队就开始互相推诿。与此同时,队列在不断增长。
当“如果不确定,就询问人工”变成同步依赖时
当你建立升级路径时,你所做的决定其影响远比设计评审中记录的要深远。你在延迟预算中增加了一个同步的人工依赖。智能体的 p50 延迟可能是 800 毫秒,但对于那 3% 升级的请求,真实的延迟取决于队列的等待时间——运气好是几分钟,运气不好则是几小时甚至几天。而且,由于这 3% 的流量往往是不成比例的高价值或高风险流量(这也是为什么智能体会升级它们),这并非长尾影响,而往往是核心影响。
这种情况以两种不符合直觉的方式表现出来。首先,队列的行为受利特尔法则(Little's Law)支配,而该法则是无情的:系统中的平均项目数等于到达率乘以平均在系统中的时间。如果你的审核员每小时可以解决 60 个项目,而流量增加到每小时 90 次升级,队列并不会只变慢 50%——它会无限制地增长,直到某些环节崩溃。其次,系统具有放大问题的 反馈循环。随着队列变长,每个等待的客户都会变得更加沮丧,更有可能再次升级或流失,并且更有可能将事故归咎为模型质量问题而非队列深度问题,从而导致你的团队去追查错误的根本原因。
防止这种情况发生的准则是:不要再将审核队列仅仅视为一种工具集成,而要开始将其视为一个生产系统。生产系统拥有 SLO、错误预算、容量规划、操作手册(runbooks)和值班制度(on-call)。这个系统也应该如此。
将其视为 SLO 目标,而非一个 Notion 文档
最小可行化监测需要四个指标,你应该把它们与模型延迟仪表盘放在同一个监控墙上。**队列深度(Queue depth)**告诉你还有多少工作待处理。**响应时间(Time-to-acknowledge)**衡量从入队到审核员接手该项目的时间。**解决时间(Time-to-resolve)**衡量从入队到得出结论的完整周期。**放弃率(Abandonment rate)**记录了那些放弃的客户——他们关闭了工单、停止了流程、流失了,或者是悄无声息地流失了。每一个指标都需要设定一个目标,且这个目标的达成值得你在半夜叫醒值班工程师。
一个面向客户的升级队列的合理起点如下:
- 关键路径项目的 P50 解决时间低于 5 分钟;P95 低于 15 分钟
- 任何时候每位审核员的队列深度低于 50 个项目
- 每周测量的 SLA 违约率低于 1%
- 放弃率低于 2%(按案例类型跟踪)
这些不是通用数字——合同修订工作流可以忍受数小时的队列深度,而实时智能体辅助工具则连几秒钟都无法容忍。这种准则是要写下目标,将它们暴露在监控推理服务的同一套告警系统下,并将持续的违约视为由专人负责的事故。
“暴露它们”这一环正是大多数团队跳过核心工作的地方。如果你的队列存在于 Zendesk 或第三方标注工具中,这些指标也需要流入到与模型追踪(model traces)相同的可观测性平台中。否则,队列深度仪表盘只会躺在一个没人打开的标签页里,而你只有在销售代表在 Slack 上升级问题时才会知道违约。将队列事件导流到与原始请求相同的追踪(trace)中——审核操作是请求生命周期的一部分,而不是一个独立的流程。
像规划 GPU 容量一样规划审核员的人力
如果没有容量模型,你绝不会运行推理服务。你会估算峰值 QPS,建模单副本的吞吐量,为流量激增预留余量,并设置自动扩缩容。审核队列也值得同样的对待,只是有一个不同点:容量单位是人,而不是 Pod,而且人是无法自动扩缩容的。
从吞吐量公式开始。如果一名审核员平均每 4 分钟处理一个条目,每天有效工作 6 小时,那么每位审核员每天大约处理 90 个条目。如果你每天 30,000 个请求中有 3% 需要升级审核,那么每天就有 900 个升级任务,这意味着你需要 10 名审核员在理论最大值下满负荷运转,且不产生排队。为了吸收高峰时段(升级量可能激增至日均值的 3–5 倍)、处理需要 15 分钟而非 4 分钟的复杂案例,以及覆盖非工作时间和带薪休假,实际的人员配备可能是这个数字的三到四倍。如果你当初将“偶尔审核”规划为一个人投入 10% 的时间,那么现在的误差已经达到了 30 倍。
另一个杠杆——也是大多数团队最先采用的,因为它不需要增加人员编制——就是减少流入量。有三种行之有效的模式:
- 收紧自动处理阈值,让高置信度的条目不进入升级流程。标准的双阈值策略是:置信度高于 ~90% 时自动批准,70–90% 进入队列,低于 70% 则自动拒绝。具体数值取决于你的翻转率(Overturn Rate)和风险偏好,但这种结构是经久耐用的。
- 增加自动重试路径,在升级之前,使用能力更强或提示词(Prompt)不同的模型重新运行低置信度条目。使用更大的模型进行二次处理通常能解决小模型标记的问题,且边际成本远低于审核员的时间成本。
- 按案例类型分发,而不是全部塞进一个队列。 金融类升级发送给金融审核员池;退款案例发送给退款团队;模糊的政策问题发送给值班负责人。专业化会产生复利效应——定向分发的审核员在处理其领域内的任务时,比通才快 30–40%。
大多数团队最终趋同的健康升级率区间是 10–15%。低于 5% 表明 Agent 过度自信,可能会产生本应升级的错误。超过 25% 则表明 Agent 做得不够,人力团队正在承担本该由它分担的负担。每周跟踪这个数字,并将持续的偏移视为信号,表明某些因素——模型质量、提示词、阈值或流量分布——发生了变化。
在投入人力之前,先低成本地自动处理
系统中杠杆作用最大的环节是那些从未到达人工环节的路径。每一个你能在无需人工介入的情况下解决的条目,都是你无需配置人力的地方。
有三个值得投入少量算力以节省大量审核时间的地方。首先是模型级联:当廉价 Agent 的置信度处于临界值时,将案例通过带有更多上下文的大型模型重新运行。这种重试的命中率通常能覆盖 50–70% 本会升级的案例,且每次调用的成本仅为几美分,而人工审核则需数美元。其次是结构化回询路径:对于因缺少一个字段而产生歧义的案例,Agent 可以提示用户补全缺失字段并自行解决,而不是直接升级。这能将看似“棘手”的案例转化为“简单”的案例。第三是针对已知模式的确定性兜底:某些查询(账户余额、密码重置、营业时间)根本不应该到达模型层,更不用说到达审核员了。在 Agent 上游设置一个小型的意图分类器,可以从队列中削减掉可预测的流量。
自动处理路径的隐藏好处是,它们为困难案例保留了审核员的注意力。如果你的审核员淹没在那些稍微好一点的模型就能处理的任务中,他们对真正困难案例的判断力就会下降。瓶颈疲劳是真实存在的——当同一个审批人处理每一个异常时,质量会迅速下降,你从这些审核中收集的评估(Eval)数据也会变得噪声更大。容量是判断力的上游。
