深色模式
质量与幻觉监控
摘要:LLM 请求返回 200 不代表输出正确。质量监控解决"输出对不对"的问题:把忠实度、相关性、幻觉率等语义指标变成可持续计算的在线信号。本文给出质量指标定义、在线评估的三种实现(启发式规则 / LLM-as-Judge / 人工抽样)、抽样评估的架构与成本控制、质量回归的告警设计。前置阅读:LLMOps 可观测性总览、调用链追踪。
质量指标怎么定义
与评测集里的指标不同,线上质量监控的指标必须可自动计算、可逐请求归因。常用集合:
| 指标 | 含义 | 在线计算方式 |
|---|---|---|
| 忠实度 Faithfulness | 答案是否被检索上下文/事实支撑 | Judge 模型逐句核对(RAGAS 口径) |
| 答案相关性 | 答案是否回应了问题 | Judge 打分或 embedding 相似度 |
| 幻觉率 | 含无依据事实陈述的比例 | Judge + 知识库比对 |
| 拒答率 | 明确拒绝回答的比例 | 规则匹配(可完全自动化) |
| 格式合规率 | JSON/结构化输出解析成功率 | 解析器判定(零成本) |
| 引用覆盖率 | 声明的引用是否真实存在 | 规则 + 字符串匹配 |
先做零成本指标
格式合规率、拒答率、引用覆盖率可以纯规则计算,覆盖 80% 的"灾难性失败",第一天就能上线。LLM-as-Judge 类指标留给抽样评估,不要全量跑。
在线评估的三种实现
1. 启发式规则(全量、实时、零成本)
适合结构化输出场景:解析失败、空回复、finish_reason=length 截断、触发内容过滤。这些信号直接进 Prometheus,作为第一道质量红线。
2. LLM-as-Judge(抽样、准实时、有成本)
用强模型对采样流量打分。关键工程决策是抽样率:全量评估的成本可能与推理本身同量级。常见策略:
- 固定比例抽样(如 5%~10%),按租户/场景分层;
- 条件触发抽样:低置信度、超长上下文、新上线 prompt 版本的流量 100% 评估;
- 用户反馈(点踩)流量 100% 复评。
text
生产流量 ──► 采样器(按策略) ──► 评估队列 ──► Judge 模型
│ │ │
└──► 正常服务 └──► 质量分写回指标存储 ──► 仪表盘/告警1
2
3
2
3
Judge 本身也有失败模式:位置偏差、冗长偏差、自我偏好。生产上应固定 Judge 模型版本并定期用人工标注校准其准确率(见 LLM 评测体系总览)。
3. 人工复核(小样本、离线、高置信)
每周从"Judge 低分 + 用户点踩"流量中抽 20~50 条人工标注,产出两个东西:修正 Judge 的标注基准;发现新型失败模式并转成新的规则指标。
质量回归告警
质量指标天然缓慢波动,告警应基于滑动窗口对比而非绝对阈值:
promql
# 忠实度 1 小时均值 vs 前 24 小时同时段
avg(increase(llm_eval_faithfulness_sum[1h]) / increase(llm_eval_faithfulness_count[1h]))
<
0.9 * (avg_over_time(llm_eval_faithfulness_ratio[1h] offset 1d))1
2
3
4
2
3
4
典型告警场景与根因对应:
| 信号 | 常见根因 |
|---|---|
| 忠实度骤降 | 上游文档/知识库更新未同步、检索 top-k 被改动 |
| 格式合规率骤降 | 模型版本升级、prompt 模板被改、输出解析器变更 |
| 拒答率上升 | 内容安全策略收紧、system prompt 误改 |
| 相关性缓慢下降 | 语料漂移、embedding 模型未重灌 |
待验证
上式为示意写法,llm_eval_faithfulness_ratio 需按实际 recorder rule 展开;不同 Prometheus 版本对嵌套 avg_over_time 的支持有差异,落地前先在测试环境验证。
反馈闭环:把质量信号接回迭代
质量监控的终点不是告警,而是形成闭环:低分样本 → 归因(检索失败 / 生成失败 / prompt 缺陷)→ 进入评测集(见 评测数据集构建)→ 修复后用同一批样本回归验证 → 上线。没有闭环的幻觉率仪表盘只是一张"焦虑看板"。