跳到主要内容

为什么你无法为智能体设置进度条

· 阅读需 11 分钟
Tian Pan
Software Engineer

你发布过的每一个进度条都建立在一个假设之上:你知道分母。上传一个 40 MB 的文件?分母就是 40 MB。安装 212 个包?分母就是 212。进度条是诚实的,因为在工作开始之前,总工作量是已知的。

智能体(Agent)从根本上打破了这个假设。它执行的不是预定的步骤列表——它在执行过程中不断发现剩余的工作。它读取一个文件,结果发现了另外三个值得读取的文件。它运行测试,测试失败了,于是引发了一个谁也没计划过的调试分支。原来的第 4/7 步变成了第 4/19 步,偶尔又会变成第 4/4 步,因为最后三步被证明是不必要的。对于智能体来说,计算完成百分比(Percent-complete)并不难,而是“未定义”。在工作完成之前没有分母,而一旦完成,答案永远是 100%。

然而看看我们发布的产品:预示即将完成的加载动画(spinners)、爬到 90% 就卡住的进度条、在原本需要 8 分钟的任务进行到第 2 分钟时显示“即将完成……”的标签。这些都是小小的谎言,而且用户能识破它们。有趣的交互设计问题不是如何更逼真地伪造进度,而是当工作的持续时间在结构上无法预知时,诚实的安抚(honest reassurance)应该是什么样子的。

分母问题是结构性的,而非暂时性的

很容易将其视为成熟度问题——模型会变得更可预测,遥测技术会改进,最终我们会像估算文件传输一样估算智能体的运行时间。但这误读了波动的来源。

文件传输的耗时波动是因为吞吐量。它的工作量是固定的;只有速率是有噪声的,而速率可以被平滑。智能体的耗时波动是因为工作本身是过程的产出。计划在设计上就是临时性的:探索揭示了范围,失败触发了重试,中间结果决定了哪些分支甚至会被执行。这正是智能体有用的原因——一个系统如果能够预先列出所有步骤,它就不需要是一个智能体。你可以直接把它写成脚本,并给它一个真正的进度条。

因此,不可预测性并不是一个需要被工程化消除的缺陷。它是你所销售的能力的特征。更好的模型会扩大这种差距,因为我们会交给它们更长、更开放的任务。2023 年代的智能体能自动补全一个函数,几秒钟内就能完成。2026 年代的智能体在重构一个模块时可能运行 20 分钟,而它是运行 12 分钟还是 40 分钟,取决于第 9 分钟时测试套件的结果。

经典的 UX 指南悄悄地忽略了这个问题。Jakob Nielsen 著名的阈值理论认为,任何超过 10 秒的操作都需要百分比进度指示器以及中断方式。这个建议是正确的——但在这里无法实现,因为它假设“完成百分比”是存在的。智能体任务经常突破 10 秒,却无法提供任何诚实的数据放入进度条。旧的游戏规则并非优雅降级,而是在公理层面上失效了。

每一个虚假指标都是对信任的透支

面对无法实现的进度条,团队会求助于传统的权宜之计,每一种都是研究人员礼貌地称之为“善意欺骗”的行为:

  • 脱节的进度条:根据计时器而非实际工作推进,飞速冲到 80%,然后开始爬行。
  • 轮换的状态行:“正在分析……”、“深度思考中……”、“马上就好……”——循环播放与系统实际操作无关的预设短语。
  • 永恒的加载圈:至少它还算体面,除了“没死机”之外不承诺任何事。

对于短时间的等待,这类手段还算管用。进度条欺骗我们已经几十年了——缓动曲线让条子感觉更快,在用户投入感最低时进行前置移动——这些欺骗之所以能存在,是因为等待在谎言揭穿之前就结束了。10 秒钟的虚构是可以原谅的,毕竟文件确实传完了。

智能体改变了收益矩阵。当一个任务运行 8 分钟,而进度条在第 2 分钟就达到了 92% 时,用户有整整 6 分钟的时间来研究这个谎言。这样做两次,他们就会彻底不再相信你的指标——包括那些诚实的指标。这种失败在通知层级也会产生复利效应:如果每一个里程碑都叮一声提醒用户,你就是在构建一个设计模式手册中所谓的“放羊的孩子”仪表盘(cry-wolf dashboard),当警报真的重要时,它反而会被忽略。

而最糟糕的选择是大多数聊天产品默认提供的:一个在 90 秒内没有任何输出的打字指示器。它集成了所有的失败点——没有工作证据、没有估算、没有里程碑、没有退出路径——全部汇聚成一个动画省略号。用户的心理模型会从“它正在运行”降级到“它卡住了”,再到“我应该刷新”,而刷新往往是唯一会真正毁掉进行中工作的操作。

展示凭据,而非百分比

如果完成百分比是未定义的,还剩下什么?证据。你无法告诉用户智能体完成了多少,但你可以证明它确实在工作,并让他们自己判断进度。以下三种凭据经得起考验:

  • 可验证的里程碑。 不是“完成 35%”,而是“读取了 14 个文件”、“复现了故障”、“9 个测试中通过了 7 个”。每个声明都是可检查的,且都不暗示时间表。一个带有步骤勾选的可见计划是最强力的版本——分母仍会随着计划的修订而改变,但用户会原谅一个可见的、在增长的计划(“发现了一个边缘情况,增加了一个步骤”),而永远不会原谅一个悄悄回退的进度条。
  • 实时活动流(Live activity feed)。 流式传输工具调用、当前文件、当前命令——一个带有置顶“当前步骤”的时间顺序日志。这是研究结果反直觉的地方:Buell 和 Norton 的操作透明度实验发现,人们更倾向于等待更长时间但能看到可见的努力,而不是即时结果,因为观察劳动过程提高了对产出价值的感知。智能体可以展示真实的劳动。伪造努力是一种黑暗模式;而展示真实的努力则是少数几个“诚实的选择也是最具说服力的选择”的案例之一。
  • 已产生的开销(Spend-so-far)。 已用时间、消耗的 token 数、执行的步数。不需要分母——它是一个里程表,而不是油表。从业者能很快从中建立校准感:如果类似任务通常耗费约 20 万 token,而这个任务刚刚突破 80 万,那么一定出问题了,用户可以在任何超时触发之前就采取行动。
加载中…
References:Let's stay in touch and Follow me for more thoughts and updates