线上怎么发现质量回退?没有标准答案的场景怎么定监控指标?

Q5-07评测与可观测常见线上监控无标注代理指标金丝雀集归因告警分布漂移

谁在问:二三面;有线上 AI 业务的团队必问

口语化问法

  • 上线之后你怎么知道它变差了?总不能等用户投诉吧。
  • 线上没有标准答案,质量指标你怎么定?
  • 你们有质量告警吗?告警响了之后怎么查?

考察意图

这是本章区分度最高的一题。面试官在判断:

  1. 你会不会一上来就上 LLM judge。 这是最常见也最贵的错误路径——零成本的信号还没建全,就先去用一把会漂的尺子
  2. 你有没有归因动作。 线上分数掉了,「是系统变差了」还是「进来的问题变难了」——这两者处置方向完全相反,而分数本身分不出来。没有这一刀的人,会在事故里盲目回滚。
  3. 你有没有做过告警。 做过的人第一时间会谈噪声、分组和阈值,没做过的人只会列指标。

参考答案

图 2 · 60 分与 90 分差在哪:代价、演进、怎么验证

60

60 分答案(及格线)

线上我们会采样一部分请求,用 LLM judge 打分,比如判回答是否有依据、是否答非所问,出一条质量曲线,掉得多就告警。另外也看用户的点踩率和转人工率。发现回退之后,先查最近有没有发版,如果有就回滚,没有的话再看是不是上游模型变了。

方向是对的:有采样判分、有用户信号、有变更排查。所以能过。

它的问题是:顺序反了(先上 judge 后建基础信号)、归因缺一刀(直接跳到「查变更 → 回滚」)、以及没有告警工程(掉多少算掉?按什么维度分组?)。

90

90 分答案(有生产经验的回答)

我分三部分说:指标怎么分层、告警怎么设、分数掉了第一步做什么。

一、指标分三层,而且顺序不能反。

第一层是不需要模型的信号,必须先建全。

  • 用户侧:重问率 / 改写后再问一次的比例、复制率、点踩率、会话中途放弃率、转人工率
  • 系统侧:结构化输出解析失败率、工具报错率、超时率、重试率、拒答率截断率(打到 max_tokens)、上下文超限率。

这一层的价值在于:不需要标注、不需要 judge、不会漂移、成本近乎为零,而且和用户真实不满的相关性通常比任何 judge 分数都高。我认为最被低估的三个是转人工率、重问率、截断率硬判据:没把这一层建全就先上 judge 的团队,是在用一把会漂的尺子,量一个从来没测过的东西。

第二层是需要模型但不需要标准答案的。 采样 LLM judge,判有据性(答案有没有超出给定来源)、拒答是否合理、格式是否合规——注意这些都是有参照物的判断,judge 在这类任务上才可靠;判「事实对不对」没有参照物,那是把幻觉转嫁给另一个会幻觉的模型。 工程约束三条:采样(基线约 2%,高风险或刚改过的路由提到 20%)、异步(在响应返回之后跑,绝不进关键路径)、judge 版本钉死(换 judge 之后历史分数不可比,要用新 judge 重跑历史基线)。 还要加一个输入侧的信号:对用户输入做 embedding 聚类,监控有没有出现新簇——新簇通常意味着新意图或新渠道,这是很多质量事故的真正源头。

第三层是业务终审:转化率、工单解决率、人工复核通过率、退款/投诉率。滞后,但唯一真实。

二、告警不是设一个全局阈值。 全局均值是最后才动的东西。真实的质量回退几乎总是先出现在某个渠道、某类意图、或 P95 上。所以告警必须分组设:按渠道 × 意图 × 模型版本分桶,每桶单独看。开篇那种「新渠道占 14% 流量」的情况,在全局曲线上只表现为一点点下滑,在分桶视图里是一条断崖。 阈值上,不用固定绝对值,用相对基线的变化 + 最小样本量门槛:某桶样本数不足就不告警(否则小桶天天误报);变化幅度要超过该桶历史波动的若干倍才告。

三、【最重要】分数掉了,第一步不是回滚,是切一刀。 线上分数的分子分母都在动,所以它天然分不出「系统变差」和「输入变难」。解法是造一个分母不动的参照物——金丝雀集

  • 20–50 条固定输入,覆盖主要意图和高风险场景;
  • 生产环境、走同一条链路、同一份 prompt、同一个 judge,每小时跑一遍,单独出一条曲线。

然后对照看:

  • 线上掉、金丝雀不动输入分布变了,系统没坏。该做的是补覆盖面、看新流量是什么,而不是回滚。
  • 线上掉、金丝雀也掉系统真的变了,再往下切:模型小版本?prompt?检索索引?工具依赖?

我们真踩过一次反例:judge 分数掉 5 个点,值班同学回滚了模型、又回滚了 prompt,分数都没回来,折腾半天才发现是市场部前一天接了个新渠道,那批用户的问题平均长 1.8 倍且集中在退款政策。系统一点没坏,而那半天里两次无谓的回滚还引入了新的缓存不一致。 金丝雀集的成本极低(几十条 × 每小时),但它把这半天压缩成一次看板对比。这和 RAG 排障里「手工把正确文档塞进 prompt」是同一个手法:固定住一个变量,把问题一分为二。


追问链

图 1 · 五层追问树:面试官会往哪儿挖
从「重问率到底怎么算」一路挖到「告警天天响没人看」

  1. 第一层那些指标具体怎么算?比如「重问率」。

    期望定义要可实现:重问 = 同一会话内 3 分钟内出现语义相似度高于阈值的第二次提问;改写率用编辑距离或 embedding 相似度加长度变化近似。都是有噪声的 proxy metric看变化不看绝对值;拒答率涨是好是坏得结合检索命中率看;按渠道和意图分桶,全局值没有诊断价值
    信号说不出具体算法 → 没实现过;主动区分「拒答率涨是好是坏要看检索命中率」 → 理解指标不是越低越好
  2. 你怎么区分「模型变差」和「用户问的东西变难」?

    期望金丝雀集:20–50 条固定输入,生产环境走同一链路、同一 judge,每小时跑一遍单出一条曲线。线上掉、金丝雀不动 → 输入分布变了,补覆盖面而非回滚;两条都掉 → 系统真变了,再切模型小版本 / prompt / 索引。第二证据源是输入分布本身
    信号只说「看看最近有没有发版」 → 只覆盖一半,无变更时完全无解;主动提「金丝雀集也要定期换血」 → 维护过的人才有的意识
  3. 线上 judge 的分数,能不能当 SLA 或者团队 KPI?

    期望不能。① 绝对值不可比 —— 线上输入分布每天在动,judge 换版本历史全废;② 一旦考核,团队会对着 judge 的已知偏差优化,为迎合冗长偏差把答案写长 ——指标一旦变成目标就不再是好指标。替代口径:承诺挂业务指标或离线固定集合的合格率,judge 只作内部预警
    信号说「可以,我们就是这么考核的」 → 大概率已经在被指标反噬;能给出「离线固定集合合格率」这类可复现的替代承诺口径 → 强信号
  4. 这套监控上线之后,多久能发现一次真实回退?有没有漏过?

    期望有漏,三种:慢性漂移(每天掉 0.3 个点)—— 「相对上周变化」类告警全抓不住,靠月度同分布回归;小众但严重(某低流量渠道全错)—— 被全局稀释,靠分桶告警与最小样本量兜;judge 学不会的维度(语气冒犯、隐含歧视)—— 只能人工抽检
    信号说「没漏过」 → 要么没上过线,要么没在复盘;能说出慢性漂移这一类靠告警抓不住 → 强信号
  5. 质量告警天天响,但 80% 是误报,团队已经开始无视它了。你怎么办?

    期望被无视的告警比没有告警更糟,它制造「我们有监控」的错觉。止血:噪声最大的几条降级为看板不告警,宁可只留 2 条高精度告警,也不要 20 条没人看的。治本按序:① 加最小样本量门槛 → ② 相对基线 + 连续 N 个窗口越线才告 → ③ 质量类要两个独立信号同时异常(judge 掉且转人工涨)
    信号说「调高阈值」 → 单一手段,会同时压掉真报;能提出「给告警本身打标签、按精确率下线」 → 把告警当成一个需要被评测的分类器
本章区分度最高的一题:前三层还能靠指标清单撑,第 4 层问「漏过没有」、第 5 层问「告警被无视了怎么办」—— 没做过告警治理的人到这里就没词了。

评分要点

  1. 指标分三层且顺序不能反:零成本信号 → 采样 judge → 业务指标
  2. 说得出第一层的具体指标,尤其转人工率、重问率、截断率、解析失败率
  3. judge 的三条工程约束:采样(2%/20%)、异步不进关键路径、版本钉死
  4. 知道 judge 只在有参照物时可靠,线上只判有据性一类
  5. 输入侧监控(分布、embedding 新簇)
  6. 归因第一刀 = 金丝雀集,能说清它切开「输入变难」与「系统变差」
  7. 告警按渠道 × 意图 × 版本分桶,有最小样本量与持续时间条件
  8. 明确 judge 分数不能当 SLA / KPI,并给出替代承诺口径

常见错误

一上来就上 LLM judge跳过了零成本、零漂移的第一层信号
「掉了就回滚」没有归因动作。系统没坏时的回滚会引入新问题
只看全局均值真实回退先出现在细分渠道和 P95 上,全局是最后才动的
「点踩率就是质量指标」稀疏且重度有偏,它是采样器不是真值
judge 判「回答是不是对的」没有参照物,等于把幻觉转嫁给另一个模型
judge 同步跑在请求链路里P99 直接翻倍
judge 分数当团队 KPI立刻催生对着已知偏差优化的行为
说「我们有告警」但答不出误报率大概率已经处在「告警被无视」的状态

关联学习