RAG 评测:离线指标与线上效果的鸿沟

RAG 项目最经典的场景:离线 recall@5 90%,上线后用户还是骂"答非所问"。为什么离线指标好看、线上效果拉胯?

因为 RAG 评测有三层,大部分项目只测了第一层。

一、RAG 的评测分层

1 2 3

二、第 1 层:检索质量

指标

R P M N e r R D c e R C a c G l i l s @ i K o n @ K K K

评测集

1
2
3
4
5
{
  "query": "简历缓存一致性方案",
  "gold_docs": ["doc-123", "doc-456"],   // 正确答案
  "relevant": ["doc-123", "doc-456", "doc-789"]
}

为什么 recall@5 90% 了线上还差

鸿沟 1:评测集和真实分布脱节

线 " "

解法:线上问题采样进评测集(每天自动抽 1% 真实 query,人工标注)。

鸿沟 2:只测"找没找到",没测"找到的有没有用"

R e c L 1 L a L L l M M l = + 3 2

解法:加"噪音比例"指标(前 K 条中无用的比例),和重排质量。

三、第 2 层:生成质量

指标

F R C a e o i l m t e p h v l f a e u n t l c e n e n e e s s s s

评测方法

1 2 3 . . . L L M - a s - J u d g e + +
1
2
3
4
5
6
7
8
# 事实核对(判断幻觉的核心)
def check_faithfulness(answer, contexts):
    facts = extract_facts(answer)          # 拆事实
    unsupported = [
        f for f in facts
        if not any(f in ctx for ctx in contexts)   # 检索内容里没有
    ]
    return 1 - len(unsupported) / len(facts)       # 忠实度

关键:生成质量评测必须"看检索内容"

" " + + " + L L M " R A G

四、第 3 层:端到端效果

指标

/ / /

端到端评测集(线上回流)

" "

闭环:线上差评 → 进评测集 → 复现问题 → 修(检索/重排/生成)→ 验证 → 回归。

五、三层的关系与优先级

1 2 3 " " " " " R F " e a c i a t 2 3 l h l f 3 1 u l 2 n e s s

每个指标的优化动作

R F R e a e c i l a t e l h v l f a u n l c n e e R s e s r e a m n b k e d / d i / n g / / / / P r o m p t

六、踩坑记录

  1. 评测集 100 条就敢下结论:指标波动大 → 至少 300-500 条 + 固定版本
  2. 只看 Recall 不看噪音:Recall 90% 但 top3 里 2 条噪音 → 加噪音率指标
  3. LLM 评分偏置:偏好长回答 → 多模型投票 + 人工抽查校准
  4. 线上回流不及时:用户骂了半个月才进评测集 → 差评自动入池 + 每周标注

总结

RAG 评测的核心认知:

  1. 三层评测:检索(找得对)→ 生成(答得好)→ 用户(满不满意)
  2. 鸿沟的根源:评测集 ≠ 真实分布,离线指标 ≠ 用户感知
  3. 评测必须看上下文:生成评测要带"检索内容"看,才发现真问题
  4. 闭环回流:线上差评进评测集,修复后回归验证

RAG 评测的目的不是"证明它好",是"知道它哪里不好、改哪里"。 三层指标对上了,优化才不是玄学。