跳到主要内容

人工审核队列是你的 P0 SLA:当 HITL 成为瓶颈时

· 阅读需 13 分钟
Tian Pan
Software Engineer

第一次事故很少表现为系统宕机。它通常是来自客户成功团队的一条 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)数据也会变得噪声更大。容量是判断力的上游。

闭环:每一次审核决策都是评估数据

不反馈给系统的审核队列是一个成本中心。而反馈给系统的审核队列则是你拥有的最有价值的训练和评估流水线,因为它正是你的 Agent 认为最困难案例的标注数据。

其机制很简单但很少被构建。当审核员做出决策时,记录三件事:原始输入和 Agent 输出、审核员的决策、以及结构化的原因代码(不是自由文本评论,而是关于 Agent 回答为何错误、边缘或正确的固定分类体系)。每天将这些数据导入你的评估数据集。按案例类型、Agent 版本、提示词更改来跟踪翻转率。当一个新的 Agent 版本降低了某个维度的翻转率时,你就有证据表明该更改在关键案例上确实有效。当它提高翻转率时,你就获得了一个任何合成评估都无法捕捉到的退化信号。

这种复利效应让工程投入物有所值。来自认真构建了此闭环的团队的报告显示,在 6 到 12 个月内,升级率下降了 20–40%——这不是因为模型本身改进了,而是因为提示词、分发逻辑、阈值和自动处理路径针对真实的审核员决策进行了微调。系统在运行成本降低的同时变得更加准确,这与大多数生产系统的表现恰恰相反。

交接本身也很重要。如果审核员在接收案例时拥有完整的上下文——Agent 的推理过程、检索到的文档、客户历史记录、触发的政策规则——其处理速度会比从零开始的审核员快 35–45%。如果你的队列工具只显示“条目 #4823 需要审核”,你支付了人工费用却只得到了一半的吞吐量。将交接上下文视为生产契约的一部分。

让这种模式落地的组织架构模式

只有当有人端到端地负责这个队列时,上述技术模式才会生效。我在复盘中看到的最常见失败原因不是漏掉了某个指标,而是组织架构图上缺少了一个负责人的名字。模型由研究工程师负责,Agent 循环由后端团队负责,审核员配置由运维团队负责,而客户影响则由支持团队负责。当队列崩溃时,四个团队会向领导层发送相互冲突的仪表板,而现状却毫无改变。

解决方法是设立一个单一的直接负责人 (DRI),其 OKR 包含四个数字:队列 P95 延迟、升级率 (Escalation Rate)、流失率 (Abandonment Rate) 以及审核员单次解决成本。这四个数字描述了 HITL 路径是一个正常运行的生产系统,还是一个正在缓慢失败的科研项目。如果这些指标都趋势向好,那么该功能就是健康的。如果其中任何一个出现偏差,该 DRI 就会知道该调查什么。如果没有这个角色,这个队列就是每个人的工作,也就是没有人的工作,下一次事故的发生只是时间问题。

前瞻性的结论是令人不安的:当你给 AI 功能添加“不确定时询问人类”的那一刻起,你就已经签约负责运营一项具有劳动弹性、延迟敏感且面向客户的生产服务,只是这项服务恰好涉及到了人。把它当作一个 Notion 文档来对待,它就会变成一场事故。把它当作一个拥有 SLO、容量规划、操作手册 (Runbooks) 和反馈循环的系统来对待,它就不再是瓶颈——它会变成一个缓慢加速的质量飞轮,让那些仅仅为了“安全”而接入 HITL 却对此置之不理的竞争对手们望尘莫及。

References:Let's stay in touch and Follow me for more thoughts and updates