只要翻开任何足够长的生产环境对话记录,你都会发现有用户会将同一个问题问上三遍。每一轮的措辞都会稍微改变——代词换成了名词,加上了限定词,到第三次尝试时,那些客气的委婉话也消失了——但底层的请求是完全相同的。他们不是在问三个问题。他们是在问同一个问题,而智能体没能给出答案,用户希望这一次表达的方式能产生不同的效果。
这里的对话记录级信号是如此响亮,以至于近乎显而易见。用户已经通过他们的键盘敲击告诉你,之前的回答没有帮助。他们不需要填写调查问卷,不需要点踩。他们通过再次输入问题直接告诉了你。而在大多数生产环境的 AI 技术栈中,这个信号被评估流水线默默丢弃了,因为这些流水线孤立地对每一轮对话评分,而满意度调查仅在会话结束时触发——到那时,那些重复提问三次的用户通常已经流失,永远不会进行任何评分。
这是对话式 AI 中最清晰的隐性失败信号,但几乎没有人去采集它。
轮次级评估掩盖了对话层面的失败
对话类产品的主流评估模式是轮次级评分:根据模型自身表现(忠实度、相关性、事实性、安全性)对每个模型回答进行评分,并将每轮通过率汇总成一个系统级数字。这个汇总数字就是出现在汇报 PPT 里的那个,也是决定下一个模型是否上线的依据。
轮次级评估的问题在于,它评分的是回答,而不是结果。一个回答可能在局部是流利、扣题、且忠实于检索上下文的,但仍然完全偏离了用户的真实意图。轮次级的评估标准里没有“这个回答导致用户重复了他们的问题”这一项,也没有“这个回答在技术上是正确的,但针对的是对问题的错误解读”这一项。用户心知肚明,但评估标准却一无所知。
聊天机器人评估的相关文献已经在跟进这一点。最近的研究明确区分了轮次级指标和会话级指标,并指出即使单轮相关性看起来很高,用户在整个对话中的底层目标也可能未被满足。信息检索社区早在十年前就在网页搜索中发现了这一点:点击是一个嘈杂的信号,但点击后立即进行的查询重组几乎肯定预示着用户没有找到他们想要的东西。同样的动态也适用于对话会话。用户的下一条消息是前一个回答所能得到的最高评价。
CSAT 调查的样本人群有误
团队期望该信号出现的另一个地方是会话结束时的 CSAT 调查。但它并不会出现在那里,原因在于抽样。
会话结束调查的参与者是那些完成了整个会话的用户群体。而在第一个糟糕回答后就流失的用户不在其中,中途转接人工的用户也不在其中。最有资格告诉你机器人出了问题的人——那些因为机器人坏了而离开的人——被有系统地排除在你用来衡量“故障率”的数据集之外。你收集到的调查问卷主要来自那些觉得智能体表现尚可并顺利完成对话的用户,少部分来自有耐心在调查中发泄不满的用户,而真正的失败案例则完全缺失。
这是披着“客户心声”外衣的幸存者偏差。汇总后的 CSAT 看起来不错,因为它只是那些没有被智能体“劝退”的用户的平均值。与此同时,流失用户的“重问”行为正躺在你的日志里无人问津。
“重问”行为背后有数十年的证据支持
将用户的重复行为视为失败信号并不是什么新鲜想法——只是它还没有从网页搜索和传统的 IVR 系统跨越到 LLM 聊天机器人的评估中。
在网页搜索中,查询重组是最受关注的隐性反馈信号之一。研究人员使用它来预测用户满意度,其准确性比单纯基于点击的指标更高,理由是如果用户进行了重组,几乎可以断定原始查询没有满足其需求。重组可以是概括化、具体化、拼写纠正或彻底转向——每种模式都有其自身的诊断权重。旧的 IVR 系统使用“来电者是否按下 0 键以转接人工”作为同类信号:这是一个将用户挫败感转化为可衡量事件的“泄压阀”。
LLM 对话会话拥有更丰富版本的此类信号,因为用户在“重问”方式上拥有更大的自由。他们可以进行语义上的重述、添加上下文、细化问题,或者干脆大发雷霆。这种丰富性既是优势也是难题:识别“重问”比统计字面意义上的重复查询要困难得多。但底层的行为逻辑是一样的。用户正在告诉你之前的回答没有帮助,而且他们是在下一条消息中告诉你的,而不是在调查问卷里。
对话分析供应商已经注意到了这一点。主流的“无需调查的聊天机器人 CSAT”宣传现在重度依赖于检测“客户重复了他们的问题”和“机器人给出了重复的回答”,并将其作为糟糕体验的操作定义。这种直觉是正确的,但目前的实现往往流于表面。
检测是语义重述聚类,而非字符串匹配 实现重问检测的原始方法是在一个会话的用户轮次之间进行精确或近乎精确的字符串匹配。这能捕捉到用户逐字重打问题的情况,但这种情况很少见。它会错过所有有趣的案例——改述、增加澄清语、或者是丢弃了用户认为已经传达但实际并未生效的上下文。
正确的做法需要语义重述检测:对每个用户轮次进行嵌入(Embedding),计算会话内的两两相似度,并标记出多个用户轮次映射到基本相同语义意图的聚类。在自然语言推理或意图归纳任务上训练的句子嵌入模型在这种情况下效果很好。对话研究界已经构建了特定的表示方法——针对意图聚类优化的“话语嵌入(utterance embeddings)”——在这个特定任务上,它们的表现明显优于通用的句子编码器。在优秀的嵌入模型之上设置一个简单的余弦相似度阈值就能完成大部分工作;而对于一个度量指标来说,执行完整的意图归纳流水线则有些大材小用了。
真正困难的部分是误报边界。并非每一个重复的语义概念都是重问。在智能体回答了针对免费用户的问题后,用户可以合法地询问“那高级用户呢?”——主题相同,但不是重问。他们可以从一个高层级的问题转向深挖——表面意思相近,但不是重问。你试图分离出的信号是“用户因为之前的回答没有解决问题而询问相同的问题”,而不是“用户在讨论同一个主题”。区分这两者需要观察智能体的中间响应,并判断它是否实质性地解决了之前的问题。在这个环节,对局部子对话进行一次 LLM-as-judge 调用是合理的——它成本低廉,评分标准狭窄,而另一种选择是人工标注。
一个合理的初始启发式方法:当 N 轮之内的两个用户轮次的嵌入余弦值高于某个阈值,并且智能体在它们之间的响应未被 LLM-as-judge 标记为实质性解决第一个问题时,将其标记为重问。针对一小部分人工标注的数据集调整阈值。审计被标记的对话。不断迭代。
将重问率作为一等指标 如果你接受“重问是现有的最强隐式失败信号”这一论点,那么接下来的操作性问题就是如何处理这个数值。诚实的答案是:将其视为与完成率和 CSAT 并列的对话质量第三支柱,并在同一个仪表板中展示它。
一个可行的方案是从三个粒度计算重问率。在会话级别 ,它是包含至少一个重问聚类的会话比例——这是对有多少会话至少发生过一次用户感知失败的保守估计。在聚类级别 ,它是重问聚类内部的平均尝试次数——数值高意味着用户一直在尝试而不是放弃,这既是更强的失败信号,也暗示了哪些用户有耐心通过这种方式“教你东西”。在主题级别 ,它是按意图或内容标签切分的重问率——这是驱动产品路线图的关键,因为它能准确告诉你在实际环境中哪些能力失效了。
重问率也能与现有指标完美配合。一个以高重问和低完成结束的会话显然是彻底失败的。一个高重问和高完成的会话是用户最终达到了目的但过程艰辛——这是一个可用性问题,而非能力问题。一个低重问和低完成的会话则是“沉默流失”的案例,用户没有抗议就直接放弃了,你应该直接阅读这些对话记录,因为它们是纯粹的信号。这些组合具有诊断意义,而这三个指标中的任何一个单独拿出来都不具备这种效果。
还有一个投资于此的原因。随着模型质量在单轮基准测试上持续提高,轮次级评估带来的边际信息正在减少。生产环境 AI 产品中真正令人感兴趣的失败不是“模型输出了错误的事实”——这些情况已经变得罕见,并能被现有工具捕捉。真正令人感兴趣的失败是“模型输出了用户无法使用的答案,而用户通过再次询问告诉了我们”。如果你的评估套件中没有给这个信号留出位置,那么你衡量的是模型已经擅长的事情,而错过了它们还不擅长的事情。
你没在收集的调查就是你拥有的最好的调查 CSAT 调查是用户可能会告诉你的事。重问是用户已经告诉你的事。隐式反馈作为一个学科的核心意义在于,关于产品最干净的数据是用户在使用过程中产生的数据,而不是你打断他们询问时产生的数据。搜索和推荐系统在二十年前就学到了这一点。对话式 AI 早就该补上这一课了。
建立流水线。聚类轮次。从三个维度切分指标。将其放在每个人都已经信任的数值旁边的仪表板上。然后去阅读表现最差的主题的对话记录,观察有多少重问聚类其实都在说同一件容易修复的事情。信号一直都在。流水线才是缺失的那块拼图。
会员专享
余下内容仅对会员开放。 会员可读完整内容 —— 每一个公开发布的观点背后,那些框架、决策与推理的全貌。
— 完整文章,包含未公开存档的部分 — 可落地的工作框架,附带权衡与决策依据 — 新文章抢先看,先于公开发布 登录以继续阅读→ 随时取消 · 一次订阅,畅读全部