在生产级 LLM 评估中存在一种悄无声息的失败模式,这是任何排行榜都无法捕捉到的:你的测试集是基于留存用户构建的,因此它永远不会提出那些让其他用户离开的问题。季度复季度,评估分数攀升,仪表板一片绿,但净留存率(net retention)依然在下滑。团队在追问“评估是否可被操纵?”,而真正的故事更简单也更残酷:评估分布向幸存者偏移了,而幸存者恰恰是你最不需要其反馈的人群。
这是换了装束的二战轰炸机装甲问题。Abraham Wald 观察了返回的飞机,注意到弹孔聚集在哪里,并指出你应该加固的地方是那些没回来的飞机上的弹孔。把轰炸机换成用户,把弹孔换成失败的交互轮次,你就得到了从生产追踪(production traces)中提取评估集的中心病理。
循环如何悄无声息地毒害自身
大多数运行 LLM 产品的团队最终都会采用相同的评估集工作流。生产环境记录每一次交互。定期任务抽取有趣的追踪数据。工程师和标注员将这些转化为评估案例。新案例被合并到回归集中。每当模型升级、提示词更改或微调时,你都会重新运行这些评估。
在纸面上,这是一个良性反馈循环。最近的从业者文章几乎一致认为挖掘生产数据进行评估具有巨大价值;这种观点认为,一个可靠的反馈循环源于监控生产行为,随着时间的推移将新的失败案例转化为测试案例。这种机制是正确的。盲点在于产生这些追踪数据的人群。
三重过滤器叠加影响:
- 新手引导过滤 (Onboarding filter):在第一会话中遇到原则性失败的用户在生成足够多样化的追踪数据之前就离开了。第一轮对话被过度代表;第三轮之后的所有内容都来自已经信任该系统的人。
- 耐受度过滤 (Tolerance filter):在留存下来的用户中,那些坚持下来的人往往对智能体的怪癖有更高的耐受度。他们已经学会了绕过它的盲点,这意味着他们的提示词在适应智能体,而不是反过来。他们的追踪数据看起来比实际要容易。
- 更新过滤 (Refresh filter):每个季度评估集都会用较新的追踪数据进行更新。较新的追踪数据来自已经被第 1 到 n-1 季度过滤过的人群。这种偏差呈几何级数复合。
到第九个月,你拥有的一套评估套件,主要测试的是那些已经接受了智能体缺陷的人所写的提示词。
攀升的分数实际上在衡量什么
当评估分布向幸存者偏移时,评估仍然在衡量一些真实的东西。它只是没有衡量仪表板上所说的东西。
当前评估集 95% 的通过率意味着:在那些没有离开的人发送给我们的各类交互中,我们做对了 95%。它并不意味着:在一个代表性用户发送的各类交互中,我们做对了 95%。两者在沉默中分道扬镳,而标准策略库中没有哪个指标能捕捉到这一差距。
当评估分数上升而以下指标之一却向相反方向变动时,就是诊断性的征兆:
- 新用户 7 天留存率。
- 首会话无后续成功率 (First-session success-without-followup rate)。
- 第一个月内用户群的净推荐值 (NPS) 或任务完成满意度。
- 激活率:达到“第二次生产性会话”的新账号百分比。
如果你看到这些指标下降而评估通过率攀升,在怀疑模型之前先怀疑评估。在相关文献中,评估漂移 (Eval drift) 被描述为即使代码和提示词未变,智能体输出质量随时间推移的无声退化。我们在这里关心的变体更狡猾:代码、提示词和基准测试数字看起来都很好,唯一改变的是你的基准测试所代表的用户。
流失分层采样:针对退出行为加权评估
最有效的抗衡手段是停止假装“已流失用户”不在评估集构建范围之内。他们是你拥有的最重要的样本。
流失分层评估集不是按主题或角色划分,而是按退出信号划分层级:
- A 层:试完就走 (One-and-done)。开启了一个会话,生成少于 N 轮,且从未返回的账号。这些追踪数据对于对抗性评估来说是纯金,因为用户的第一印象是无法挽回的。
- B 层:缓慢流失 (Slow churn)。活跃了数周但逐渐降至零的账号。他们在沉默前的最后 3-5 个会话通常包含破坏信任的失败。
- C 层:活跃 (Active)。每个人都在挖掘的流量。有用,但不能让其占据主导地位。
- D 层:新用户群留存样本 (New-cohort holdout)。一个受保护的新用户切片,无论他们是否留存,其追踪数据都会被添加到评估集中。这一层在结构上受到了保护,免受更新时的幸存者过滤影响。
以明确且经过辩护的权重从每一层中采样。权重不需要是最优的;它们需要在查看分数之前是可见的、经过审查并设定的。一旦你开始针对仪表板调整各层权重,你就在操纵自己的评估。
对于面向消费者的智能体,一个合理的初始分配是:35% A 层,25% B 层,25% C 层,15% D 层。具体的数字并不如 A 和 B 之和超过 C 这一事实重要。大多数团队的情况恰恰相反,却并未意识到这一点。
对抗性追踪挖掘:明确打捞失踪的用户
分层(Stratification)取决于是否有可识别的层级,而这又取决于大多数团队在需要时才发现自己缺乏的埋点(instrumentation)。你需要:
- 一个跨会话的稳定用户标识符(不仅仅是 session token)。
- 每个用户都有一个“最后活动”字段,该字段无需用户主动执行写入操作即可更新。
- 一种能够表达此类查询的方式:“最后一次交互在 30 到 120 天前,且在之前的 7 天内遇到过失败模式 X 的用户。”这是对抗性挖掘的核心查询。
- 一套评估打标词汇表,能够区分“用户明确表示错误”、“用户放弃”以及“用户绕过错误答案自行适配”。大多数团队将这些情况混为一谈,从而丢失了第二类中最关键的信号。
从可观测性的角度来看,基于尾部的采样(Tail-based sampling)能帮你完成一部分工作。基于结果而非前期概率的采样被广泛认为是 LLM 系统更好的方法;对 5-20% 的流量运行评测(judges),并偏向于有趣的情况(高延迟、负面反馈、偏离分布的输入),可以捕捉到均匀采样遗漏的问题。我们想要的扩展是将“用户未返回”作为一个结果信号,触发优先的追踪包含(trace inclusion)。这需要将“未返回”定义为追踪本身的一个特征,而不是用户层面的指标,这对大多数团队来说是一个重大的架构变更。
由离职访谈驱动的评估增强
另一个杠杆是主动从流失用户那里提取信号,而不是从他们缺失的追踪记录中推断。这是工程师们往往低估的定性工作。对注销账户进行简短、精准的退出调查,即使回复率只有 3-5%,也能揭示出在活跃追踪中统计学上不可见的失败模式。
行之有效的原则:
- 根据严格的定义触发退出信号(例如,在至少一次付费会话后 30 天无活动),这样你调查的就不是那些流失的试用用户。
- 仅设置两个开放式问题:“你最后一次使用我们时想做什么?”以及“是什么阻止了你再次回来?”
- 将回复编码到失败模式桶中(例如,“智能体不理解领域术语”、“智能体在未确认的情况下执行了不可逆操作”、“智能体在用户擅长的领域给出了笃定的错误答案”)。
- 针对每种失败模式,生成 3-10 个针对该模式的合成评估案例。这里使用合成数据是可以的,因为你不是在测量字面上的投诉是否可复现,而是在测量底层模式是否可复现。
- 为这些案例打上流失调查来源的标签,并防止它们被自动修剪掉。
这是系统中唯一能让流失用户对评估集进行投票的机制。如果没有它,评估将完全由那些选择不离开的用户主导,而这对于“代表性”的定义显然是奇怪的。
新用户留存组:结构化修复方案
采样和调查是纠正性的。结构化修复是确保评估集的一小部分来自于这样一个群体:他们是否被纳入评估并不以其留存为前提。
新批次留存组(new-cohort holdout)的工作流程如下:每周随机选择一小部分全新账户。从第一天起,无论他们是否留存,他们产生的所有交互都会被镜像到一个候选评估池中。在最初的 30 天后,这些追踪记录中最具信息量的子集将被标注并整合到评估集中。
关键属性在于,包含标准是在账户创建时运行的,而不是在追踪生成时。一个注册后得到一个错误答案并消失的新账户仍然贡献了它的追踪,因为捕捉决策早已做出。这是评估系统能够从“仅交互一次就再未返回的用户”中学习模式而非仅仅将其视为注脚的唯一方法。
成本在于运营:即使追踪记录无用,候选池也会增长;你需要针对未处理的数据制定追踪过期和 PII(个人身份信息)处理政策;你还需要抵制在标注前按“质量”过滤池子的诱惑。那种过滤正是你试图逃脱的“幸存者偏差过滤器”。
领导层的觉醒
用于评估的生产追踪挖掘是一个反馈循环,而没有制衡的反馈循环会发生偏移。这里的偏移有一个特定的形状:倾向于那些你尚未因此流失用户的失败模式,避开那些已经导致用户流失的模式。一个只向快乐用户学习的评估套件会围绕你已经失去用户的失败模式默默地僵化,因为这些失败模式在导致流失的那一刻起就不再产生训练信号。
将评估集视为具有已知偏差的仪器,而不是中立的测量工具。明确记录这种偏差。保持至少一个在结构上对其免疫的分层(即新批次留存组)。发布分层加权分数,而不是总体的通过率。当总体指标上升而领先的留存指标下降时,请相信指标并审计评估。试图得出“评估是可被操纵的”这一结论,往往是拒绝面对更难的问题——即评估是否对正确的人群提出了正确的问题。大多数情况下并非如此,而且循环运行的时间越长且未经检查,你的团队就越会自信地在自己的产品上犯错。
会员专享
余下内容仅对会员开放。
会员可读完整内容 —— 每一个公开发布的观点背后,那些框架、决策与推理的全貌。
- —完整文章,包含未公开存档的部分
- —可落地的工作框架,附带权衡与决策依据
- —新文章抢先看,先于公开发布
随时取消 · 一次订阅,畅读全部