跳到主要内容

演示成功是因为有人在看:会话长度是你的评测套件遗漏的那个维度

· 阅读需 11 分钟
Tian Pan
Software Engineer

你发布会幻灯片上的可靠性数字,来自一些和用户实际使用的会话完全不像的对话。演示是五轮的:打开、提问、看到一个干净的回答、再细化一次、然后在高音上收尾。而你的核心用户昨天跑的那个会话有三十一轮长,包含两次工具失败(智能体用乐观主义掩盖了过去),最后用户放弃并提交了一张工单。两个会话出自同一个模型。第一个发了新闻稿。第二个被归档为"边缘情况"。

会话长度是评测的一个维度,而演示文化系统性地低估了它。我们衡量单轮准确率,是因为单轮准确率能放进幻灯片里,然后当单会话成功率从一个我们从未在任何图表上画过的悬崖上掉下来时,我们感到惊讶。这个悬崖既不是随机的,也不是尾部事件——它是误差累积、注意力漂移以及那些模型不会重新审视的已承诺假设的可预测后果。每个团队应该问的问题不是"这个模型有多好",而是"在我们已经在第一到第二十七轮说过那些话之后,这个模型在第二十八轮有多好"。

单轮准确率不是会话级别的承诺

这套算术比这个领域本身还要古老。如果每一步正确的概率是 95% 而且步骤之间相互独立,一个二十步的工作流成功率是 36%。一个三十步的工作流成功率是 21%。独立性假设已经是慷慨的——在真实的会话中,误差是相关的,因为一旦模型对一个错误的假设做出承诺,它倾向于在剩下的对话里捍卫它,而不是抛弃它。所以实际的会话成功曲线比那个乘法下界更糟,不是更好。

各团队报告单轮指标,是因为单轮数据是他们追踪工具默认聚合的对象。一个 span 成功了,或者没成功。一次工具调用返回了一个值,或者抛了异常。这些容易计数,在仪表盘上看起来很健康。它们隐藏的是用户加权视图:不是"每一个 span 是否通过了",而是"这次对话是否达到了用户来这里寻求的结果"。会话级别的数字几乎总是更低,而且随着轮数增加这个差距会扩大。一个研究团队把标准的单轮基准转换成多轮对话——通过把完整指定的指令切成原子片段,每轮只透露一片——在他们测试的每一个前沿模型上观察到平均 39% 的准确率下降,大部分损失不是来自原始能力的降低,而是来自不可靠性的急剧上升——许多模型在同一个会话上的最好和最差表现的差距超过了 50 个点。

那个差距是高管们最难内化的部分。平均值上 39% 的下降听起来已经够糟,足以列入预算。现实是在任何给定的会话上,你的模型在"达到演示质量"和"做到一半失败"之间是均匀随机的,而具体出现哪一个,取决于会话里那些没人能调节的细节。

当轮数计数器上升时,真正会坏掉的是什么

三种失败模式会出现在长会话的追踪里,它们各自在堆栈的不同层运作。

第一种是位置注意力漂移。模型不成比例地关注第一轮和最后一轮的信息;对长会话中间内容的引用率掉到 20% 以下。这就是"中间迷失"效应,它是机械性的,不是某个模型的怪癖——它在带有合成干扰物的针在干草堆测试里出现,也在真实对话里出现,那种对话里用户的实际约束是在第九轮提到的,到第二十三轮就被忘记了。像 RULER 这样的多针基准以单针测试做不到的方式暴露这一点,而大多数已发表的长上下文数字都来自那个简单的版本。

第二种是承诺粘性。一旦模型在会话早期挑选了一种解释——用户问的是 Python、那个文件是认证处理器、要用的工具是搜索 API 而不是数据库——它就倾向于在那个假设之上叠加修正,而不是从头重新决策。如果早期的假设是错的,每一个后续的轮次都是在用越来越多的自信解决错误的问题。最终的回答变得更长,而不是更短;一项分析观察到代码输出在一个会话里长度翻倍,因为模型为了捍卫一个本应抛弃的解释,往里塞进了更多的条件、例外和补丁。

第三种是过时的工具状态。那些保留缓存结果、来自先前工具调用的部分输出、或者十轮之前半完成的计划的智能体,会按照那个状态当下有效的样子去推理,即便世界已经向前走了。会话越长,状态累积越多,到智能体行动时其中某些状态已经过时的可能性越大。这很少被单轮评测捕捉到,因为单轮评测器看到的是那次成功的工具调用,而不是它返回数据的过时程度。

这些模式里没有哪一个看起来像一次戏剧性的失败。它们看起来像是答案每一轮都从用户实际问题上稍微偏离一点,然后突然之间对话已经深入到了第二十五轮,智能体正在自信地做着用户从来没要求过的事情。

长会话追踪是那个没人在收集的评测

加载中…
References:Let's stay in touch and Follow me for more thoughts and updates