AI agent Run Status、ETA 与 Needs Review 语义:waiting、running、blocked、needs review 该怎么说,避免用户以为系统挂了

HTMLPAGE 团队
15 分钟阅读

AI agent 的状态文案不是装饰,它决定用户是否信任系统正在做正确的事。本文讲清 run status、ETA、needs review 与 blocked 的语义边界,避免界面把不确定性伪装成进度。

#AI agent #Run Status #ETA #工程实践

许多 AI agent 产品看起来“像挂了”,并不是因为真的挂了,而是因为它对用户说的话过于含糊。界面永远只会显示“处理中”“请稍候”“正在为你生成结果”,哪怕后台其实早就知道当前 run 是在排队、等待人工 review、被 policy 阻断,或者只是在做慢吞吞的环境 provision。用户看不到这些差别,于是系统无论多努力,最终给人的感受都还是不透明。

这件事不是文案优化,而是状态建模问题。因为 run status 一旦进入界面、通知、客服和审计记录,它就成了一种承诺。如果系统明明只是“还没开始”,却告诉用户“正在执行”;如果明明需要人工 review,却仍显示“处理中”;如果 ETA 根本没把不确定性算进去,却给出一个很精确的 3 分钟倒计时,用户就会在最不该失去信任的时候失去信任。

好的状态语义不是让产品看起来更高级,而是让用户和系统对同一件事有相近的理解。只有这样,等待、补充信息、人工接力和失败恢复才不会全被翻译成一种模糊的“稍后再试”。

建议配合 AI agent TTFT 与冷启动优化AI agent Human Review Console 设计AI agent Deadline 与超时预算AI agent Prompt Contract 设计 一起看。

先把对外状态和对内状态分开

对外状态对用户真正意味着什么用户此时该做什么
waiting任务已接受,但还没获得执行资源可以等待,不必重复提交
running系统已进入实际执行等待阶段性反馈或结果
needs_input系统缺少必要信息,继续跑下去只会瞎猜补充输入
needs_review结果已接近完成,但需要人工确认才能继续等待审批或自己介入
blocked当前被 policy、权限或外部条件阻断查看原因,决定是否解除
completed可交付结果已经稳定落地使用或导出结果

这张表最重要的不是命名,而是“用户此时该做什么”。因为用户真正要从状态里获得的是行动信号,而不是系统内部的技术细节。

ETA 最怕的不是不准,而是假装很准

很多产品喜欢给一个具体倒计时,好像这样用户就更安心。但 AI agent 的 ETA 往往天然不稳定:模型推理、队列排队、人工 review、外部 API 波动、浏览器 runner 冷启动,都会让时间预估大幅摆动。这个时候如果还给用户一个“预计 2 分 13 秒”,本质上是在制造比沉默更糟的失望。

更诚实的做法通常是用区间或阶段表达:

  • 预计数十秒内开始执行
  • 还需数分钟,当前在等待人工 review
  • 已进入最终提交阶段,通常很快结束

这类表达少了点炫技感,但更接近系统真实不确定性。它的价值不是更“好看”,而是让用户知道时间的不确定来自哪里,而不是误以为系统在随机漂移。

Needs review 和 blocked 必须是两种不同体验

很多系统把这两个状态混着用,结果用户分不清到底是系统在等人,还是系统根本过不去。其实它们完全是两种语义:

  • needs_review 的核心是系统已经做到了当前自动化边界,需要一个人做判断
  • blocked 的核心是系统在当前约束下无法继续,除非外部条件发生变化

把它们混在一起的后果很直接:用户会把所有暂停都理解成错误,支持团队也会把所有暂停都当成 bug。时间久了,产品会被迫回到最偷懒的状态文案:“处理中,请稍后”,因为没人敢把真状态露给用户。

真正有用的状态,不该只告诉用户“发生了什么”,还要告诉用户“为什么停在这”

用户看到 blocked 并不够,他们还需要知道是:

  • 缺权限
  • 缺输入
  • 超过套餐边界
  • 需要等待外部回调
  • 命中了安全策略

当然,这个“为什么”不该暴露系统内部敏感细节,但至少要给用户一个可理解的原因层级。否则他们只会不断点击刷新、重复提交,或者找客服问一句永恒的问题:“它到底有没有在做事?”

一个很典型的事故:状态文案太乐观,支持团队被问爆

某个代码修改 agent 在进入人工 review 时,前端仍显示“正在为你生成修复方案”。团队本来觉得这样更平滑,不想让用户看到“需要人工 review”显得像系统没能力。结果上线后两周,客服工单激增,原因很直接:

  • 用户看到持续 15 分钟的“生成中”,以为系统卡住
  • 实际上任务早在第 2 分钟就进入 review 队列
  • 用户不断重新提交,造成重复 run
  • 重复 run 又进一步推高 review 队列长度

最后问题并不是 review 流程太慢,而是状态语义太假。修复后,团队直接把状态拆开显示:正在等待人工复核,通常需要 5-20 分钟。这句话听上去没那么“全自动”,但它第一次让用户知道当前等待的是谁、为什么等、该不该重试。

真正要守住的,是状态和承诺之间的一致

如果你现在要补 run status,最值得先做的不是设计更多 loading 动画,而是把 waiting、running、needs_input、needs_review、blocked 这几个状态的用户语义说清楚。只要状态还在同时承担“安抚用户”和“表达事实”两种冲突职责,界面就迟早会说谎。

AI agent 最终赢得信任的方式,不是永远显得很聪明,而是让用户在等待、暂停、补充信息和人工接管这些不那么完美的时刻,仍然能看懂系统现在到底站在哪一步。

延伸阅读: