重新路由回智能体的升级路径
升级工具曾是最后一道安全网。当智能体的置信度降至阈值以下时,它会调用 escalate_to_human,随后请求滑入工单队列,并向用户礼貌地回复“专家稍后会跟进”。工程团队在发布清单上完成了闭环确认。值班表上也列出了负责接收的人员。
六个月后,一次审计对该路径进行了回溯。升级工具打开了一个 Zendesk 工单。Zendesk 队列由客服团队为了维持 SLA 响应时间而设立的预审智能体进行分拣。预审智能体由于找不到可以直接解决的政策匹配,调用了自己的 delegate_to_specialist 工具——该工具将案例路由给了一个专家智能体。而专家智能体在不确定时,又调用了 escalate_to_human。追踪轨迹形成了一个闭路。审计抽样调查的升级案例中,没有任何人类接触过。发布文档中描述的人机协作(human-in-the-loop)实际上并不存在。
升级接口并没有失败。它的每一次跳转都得到了执行。失败的是“接收系统是自然人”这一假设。
升级是一个接口,而不是目的地
当你将 escalate_to_human 接入智能体的工具列表时,你并不是在将请求移交给人类。你是在调用一个 API,其契约内容是“最终,会有一个人类看到并处理此事”。这个契约由两部分组成:请求落到了人类可以阅读的地方,以及人类确实阅读了它。
第一部分很容易验证。你可以调用工单创建接口,在队列中看到该工单,然后勾选选项。但从智能体的角度来看,第二部分是不可见的。无论是一个人类明天阅读,还是一个机器人在 8 秒内阅读,抑或根本没人阅读,智能体观察到的响应都是一样的——工单已创建,状态为开启。该工具成功的标准是“请求已被下一个系统接受”。该接口并不承诺由谁或什么东西来消费它。
这与分布式系统中任何其他基于队列的移交形式相同。生产者不知道消费者。这种解耦正是其意义所在。但对于安全关键路径来说,这种解耦就是一个 bug。升级工具的全部目的是将工作路由到不同类型的处理器——即人类处理器。一旦消费者发生了变化,安全性特质也会随之改变,而且是悄无声息地改变,生产者端不会收到任何信号。
Zendesk 队列并不会对外宣告它在顶层增加了一个智能体。客服团队的预审自动化是一项提高生产力的成果,其部署时并未意识到另一个团队的安全设计依赖于该队列必须由人工后端处理。每一方都做出了局部合理的决策。而交汇点却成了一个死循环。
