跳到主要内容

多轮对话会话状态坍缩问题

· 阅读需 12 分钟
Tian Pan
Software Engineer

你的单次请求错误率看起来很正常。延迟在 SLO 范围内。LLM 裁判对输出的评分是 87%。接着,一位用户提交了支持工单:“我把账号告诉了机器人三次,它却一直重复问我。”另一位用户说:“它先是同意退款,两轮对话后又否认该政策的存在。”

单轮失败是显而易见的。请求进来,模型出现幻觉或拒绝回答,你的评估 (eval) 捕捉到了它,然后你修复提示词。反馈循环很紧密。多轮失败则完全不同:会话开始时表现良好,随后逐轮恶化,而你的监控从未报警,因为每个单独的回复在技术上都是连贯的。问题出在整个会话上——而几乎没有团队为此建立观测机制。

对主要前沿模型(Claude 3.7 Sonnet、GPT-4.1、Gemini 2.5 Pro)的研究显示,从单轮转向多轮对话时,平均性能会下降 39%。这个数字掩盖了真相:只有大约 16% 的下降是由于能力损失。另外 23 个百分点则是一场可靠性危机——随着对话长度增加,模型在同一任务上的最佳表现与最差表现之间的差距翻了一番。你得到的不仅是质量更差的输出,还有极不稳定的输出。

为什么多轮对话会话会退化

这种退化并非偶然。从业者在生产环境中会遇到四种重复出现的失败模式。

过早承诺 (Premature commitment) 发生在模型锁定早期上下文并将其作为推理锚点时。用户在第一轮说“我正在做一个 Python 项目”,接着花了三轮讨论无关内容,然后寻求代码帮助。即便用户的后续问题明显是关于 Shell 脚本的,模型仍会编写 Python。早期的信息片段变成了一个先验条件,所有其他信息都会经过它的过滤。

复合错误 (Compounding errors) 由最初的偏差级联而成。如果在第二轮出现了 2% 的偏差,而模型是基于错误假设而非重新审视它们,那么到第十轮时失败率将达到 40%。模型不会自发纠正方向;一旦走错路,本应反驳错误的额外信息会被整合到错误周围,而不是替换它。

中间轮次丢失 (Loss-of-middle-turns) 是 Transformer 注意力机制运作方式的一种结构性产物。注意力权重具有首因效应和近因效应——最先说的和最后说的会获得不成比例的权重。用户在第四轮给出的关键澄清(用于优化第一到三轮的需求)会悄无声息地被埋没在注意力噪声层中。经验表明,与将相关信息放在边缘位置相比,将其放在长上下文的中间位置会使模型准确率下降 30% 以上。

假设膨胀 (Assumption inflation) 发生在较长的回复中。模型在会话中途引入了听起来合理但虚假的前提,这些假设会作为未来轮次的上下文持续存在。会话逐渐从用户的实际目标偏离,转向一个关于对话内容的幻觉版本。

底层机制就是研究人员所说的上下文腐烂 (context rot)。一个拥有 200K token 上下文窗口的模型在 50K token 时就可能表现出显著退化——远在达到极限之前。Softmax 归一化意味着你添加的每一个新 token 都会提高噪声基底。更多的上下文并不会增加信号强度,反而会稀释对关键信息的注意力。在 100K token 时,每层大约有 100 亿次成对的注意力比较。每一条相关信息分配到的注意力预算比例都会变小。

哪些失败是悄无声息的

那些不会触发常规监控的具体失败:

  • 用户在第二轮提供了账号,聊天机器人却再次索要。单轮质量评分看起来没问题;如果没有会话级别的追踪,上下文检索失败是不可见的。
  • 第一轮建立的约束(例如“仅推荐 500 美元以下的选项”)随着对话范围的转移,在第八轮被隐式覆盖。没有任何一个单独的回复违反了指令——而是整个会话逐渐抛弃了它。
  • 代词消解 (Pronoun resolution) 在轮次间失效。模型在第五轮引入了一个新实体;到第八轮,它与用户真正指代的实体发生了混淆。大约 70% 的真实对话包含跨轮次的指代关系,即便每一轮单独解析正确,模型也难以处理好这些关系。
  • 角色或人设偏移 (Role or persona drift):系统提示词建立了一个正式的、受政策约束的助手。到第十二轮时,模型说话变得随意,并做出了违背原始人设的承诺。每条回复看起来都正常,但轨迹已经偏离。

生产环境中的智能体 (Agents) 受影响尤为严重。研究显示,编码智能体在第一轮会花 60% 的时间检索上下文,积累的无关文件会在整个任务过程中留在窗口内。在任务执行到 35 分钟时,所有受测智能体的成功率都会下降。当任务持续时间增加一倍时,失败率大约会增加到原来的四倍。

如何针对会话健康进行埋点

单次请求指标(Per-request metrics)无法捕捉到这一点。你需要会话级埋点,按会话 ID(Session ID)对 span 进行分组,并跨轮次(turns)跟踪状态。

**对话完成率(Conversation completeness rate)**衡量会话是否满足了用户的原始意图,而不是看每一轮是否都得到了回答。基准问题是:你是否能说出用户在第一轮时最初想要什么,以及该会话最终是否交付了该结果?

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