跳至主要内容
面试官问「你怎么知道它变好了」,我其实在等一个反例

面试官问「你怎么知道它变好了」,我其实在等一个反例

模拟面试里我问过一个很普通的问题:这个改写功能上线以后,你怎么判断新版比旧版好。

对方说看用户反馈和留存。我追问反馈长什么样、留存要等多久、这期间如果同时改了提示词和入口位置,怎么归因。三个问题下去,答案就变成了「我们会持续观察」。

这不是他一个人的问题。评估这件事在 AI 产品里被说得很轻,好像上线前跑个分、上线后看个留存就完了。实际做过的人都知道,它是这个岗位能不能做决策的地基:没有它,所有关于「更好」的讨论都只是在交换语气。

评测集是从日志里捞的,不是自己写的

我见过最常见的做法是打开对话框,自己编二十条输入,跑一遍,觉得效果不错。

问题在于这二十条输入都太干净了。真实用户会打错字,会把半句话发过来,会从 Excel 里粘一张结构已经烂掉的表,会在同一句话里提三个需求。模型在干净输入上的表现,和在这些东西上的表现,中间差着一个量级。

所以我的评测集全部来自线上日志。抽样、脱敏、冻结,版本号从 v1 开始。规矩只有一条:只增不改。删掉一条或者改一条,历史分数就再也对不上了,你失去的不是一条样本,是过去所有结论的可比性。

覆盖也要分层。高频意图占大头,长尾留一部分,再加一小块专门放已知失败——那些用户投诉过的、我们讨论过但没修好的。最后这一类最有价值,因为它是唯一能防止「分数涨了但用户还在骂」的东西。

规模上我不追求大。一两百条覆盖主要意图,跑一次几分钟,够做日常回归。几千条那种是给训练用的,产品侧维护不动,标着标着就没人看了。

标注口径比样本量重要。一句话说清楚什么算对,比如改写功能不是「读起来通顺」,而是「事实没变、语气符合要求、没有新增信息」。三个人各自理解出来的标准,能差出三成。所以至少两个人标,分歧拿出来当场裁决,把裁决理由写进规范。这份规范会长得很丑,全是特例,但它就是团队对「好」的定义。

端到端分数是结论,不是诊断

只有总分的时候,你没法知道问题出在哪。

一个 RAG 问答坏了,可能是没检索到,可能是检索到了但排序把正确的挤下去了,可能是上下文塞进去被模型忽略了,也可能是模型答对了但引用挂错了段落。这四种坏法的修法完全不同,而端到端分数只会告诉你「变差了」。

所以我把评估拆成几段:检索命中、引用是否真的支持结论、格式是否合法、最终答案。前面几段是确定性的,能自动跑;最后一段才需要人或模型来判断。拆开以后,改一个提示词,能立刻看到是哪一段动了,而不是等总分抖动再靠猜。

端到端那层仍然要有,但它是给人看的结论,不是给工程用的诊断。两者混在一起,团队就会开始用总分做归因,然后陷入「这次涨了是不是因为样本变了」的争论。

让模型当裁判之前,先量它有多不可靠

用模型批量打分是现实选择,人工标不起。但我不会直接信它的分数。

已知的偏差有三种,都很具体:位置偏差,A 和 B 换个顺序结论就变;长度偏好,长答案更容易被判为好答案;自评偏好,同一家模型偏爱自己家的输出。这三种偏差叠加起来,会让优化方向悄悄偏移——团队会不自觉地把答案写长,因为分数喜欢长。

我的做法是拿一批人工标过的样本,让裁判模型也标一遍,算一致率。一致率不够的时候,它只能做粗筛:把明显坏的挑出来,剩下的交给人工。这个校准不性感,但没有它,后面的所有数字都建立在流沙上。

还有一个容易忽略的点:换裁判模型等于换了一把尺子。历史分数不能直接比,得留一段重叠样本做换算,否则你会看到一次莫名其妙的「大幅提升」。

线上那部分,平均分最会骗人

线下的评测集只能覆盖你能想到的情况,真实的分布永远更脏。

常规的 A/B 在 AI 功能上不太好用。质量差异往往不大,要检出显著差异需要很大的样本;用户对新功能有学习期,前几天的新鲜感会把数据抬起来;更麻烦的是体验是连续的,一个「偶尔很蠢」的版本,留存可能不掉,但用户会减少使用频次,这个信号要几周才显形。

所以我更看这些:采纳率(生成后直接用了)、编辑距离(改了多少才敢用)、重试率、转人工率、任务完成率。它们比满意度评分硬,因为不需要用户额外表达。

但一定要分层看。新用户和老用户、短输入和长输入、免费和付费,混在一起算平均,最糟的那一档会被好数据盖住。我吃过这个亏:总体采纳率涨了两个点,拆开发现长文档场景跌得很厉害,只是那部分用户占比小。

最土也最有效的办法是每天人工读几十条真实对话。不抽样美化,从最新的一批里随机拿。读完你会知道用户到底在拿它干什么,这是任何面板都给不了的信息。

漂移是常态,回归要当成日常

供应商升级模型、调整安全策略、改默认参数,这些都不需要通知你。我遇到过提示词一个字没改,某天开始回答突然变得啰嗦,检查下来是模型小版本变了。

所以固定评测集不是上线前跑一次的东西,它得进 CI:每次改提示词、换模型、调检索参数都跑。同时把模型版本、提示词版本写进请求日志,出问题时能回溯到是哪次变更引起的。

成本要控制,就抽样跑、缓存结果、只对改动相关的子集跑全量。这些工程细节听起来不属于产品经理,但如果你不管,就没有人管,最后评估会退化成一份过期三个月的表格。

我会追问的两个问题

第一个是:你这套评估最容易被什么骗。

答得出来的人,通常真的被它骗过。比如裁判模型偏爱长答案,于是团队一路把回答写长,直到用户抱怨啰嗦;比如评测集全是短问题,长文档场景从来没被覆盖;比如标注规范里「准确」两个字没人定义过,两个人标出来的结果差得很远。

第二个是:上一次评估说变好了、线上却变差,是什么情况。

这题没有标准答案,但能看出一个人是不是把评估当成活的系统。我听过最好的一个回答是:那次评测集里没有包含带表格的输入,因为最早那批用户都是纯文本用户,等销售签了第一家企业客户,输入分布整个换了一遍。

评估的价值不在于证明你对,而在于让你在下一次改动之前,知道自己在赌什么。

所以面试里听到「我们会持续观察」,我一般不会立刻扣分,但会接着问观察什么、多久看一次、看到什么会回滚。能答上来的人,才算是真的上线过东西。答不上来也没关系,只是我会怀疑他过去那些「效果提升了多少」的数字,是怎么来的。

关于本文

由 Lu's Blog 撰写,采用 CC BY-NC 4.0 许可协议。

#AI 产品 #评估 #面试

评论