Skip to content

第 8 课:RAG 评测与故障定位

RAG 课程 · 08 |目标:用数据判断问题在召回、上下文还是生成|用时:30 分钟

没有评测集时,RAG 优化很容易变成“换模型、改 prompt、凭感觉挑答案”。本课建立一套最小评测闭环。

先建立评测样本

每条样本至少包含:

json
{
  "id": "leave-001",
  "query": "年假需要提前几天申请?",
  "relevant_chunk_ids": ["leave-annual-001"],
  "reference_answer": "至少提前 3 个工作日。",
  "required_sources": ["leave-policy / 年假"]
}

query 不要只写简单问题,还要覆盖:

  • 同义表达:“年休假怎么提交流程?”
  • 精确标识符:“ERR_CONNECTION_RESET 怎么处理?”
  • 多条件问题:“病假超过两天且跨月需要什么材料?”
  • 无答案问题:“公司是否允许宠物进入办公区?”
  • 权限问题:不同租户、部门或角色看到不同内容。

召回指标

Recall@k

正确 chunk 是否出现在前 k 个候选中:

text
Recall@k = 命中正确证据的 query 数 / query 总数

如果 Recall@20 很低,说明正确证据根本没有进入候选集,优先查 chunking、embedding、召回方式和过滤条件。

Precision@k

前 k 个结果中有多少是真正相关的:

text
Precision@k = 前 k 个候选中的相关结果数 / k

Recall 高但 Precision 低,说明候选覆盖了正确答案,却混入了很多噪声,适合继续看 reranker 和上下文组装。

MRR

只关心第一个正确结果排在第几位:

text
RR = 1 / 第一个相关结果的排名
MRR = 所有 query 的 RR 平均值

它适合单一事实问答,因为正确证据越靠前越有价值。

nDCG

当相关性有等级时使用,例如“强相关、部分相关、不相关”。它能评价多个结果的排序质量,比只做 0/1 命中更细。

生成指标

召回正确不等于回答正确,还要评估:

  • **Answer correctness:**答案是否回答了问题。
  • **Faithfulness / groundedness:**答案中的断言是否能被提供证据支持。
  • **Citation correctness:**引用是否真的支持对应断言。
  • **Answer relevance:**回答是否直接、完整地回应 query。
  • **Refusal quality:**证据不足时,是否明确说无法确定而不是编造。

自动评测可以帮助批量筛查,但关键样本仍需要人工抽查。评测模型也可能产生偏差,不能把一个自动分数当成绝对真值。

故障定位矩阵

Recall@20MRR@5生成质量最可能的问题
chunking、embedding、召回或过滤
候选排序、reranker 或 query 改写
上下文组装、prompt 或模型生成
高但慢embedding、重排、生成或外部服务延迟
偶尔编造证据边界、引用约束、无答案策略

做一次可复现的 A/B 实验

固定以下条件:

  • 同一批 query。
  • 同一份原始文档和标注。
  • 同一个生成模型和 prompt。
  • 同一组权限过滤条件。

只改变一个变量,例如:

text
实验 A:结构切分 + embedding-1 + dense
实验 B:结构切分 + embedding-2 + dense

记录:

text
recall@5, recall@20, mrr@5, ndcg@10,
answer_correctness, groundedness,
p50_latency, p95_latency, token_cost

不要只比较最终答案。把每个 query 的候选 chunk、分数、rerank 结果、最终 prompt 和答案都保存下来,否则无法解释指标变化。

线上监控

生产环境至少记录:

  • query 和 query 改写结果。
  • 使用的 embedding 模型和版本。
  • 召回方式、top-k、过滤条件。
  • chunk ID、初始分数、重排分数。
  • 最终上下文 token 数。
  • 各阶段耗时和错误。
  • 是否有引用、是否触发“资料不足”。

注意脱敏:日志不能因为方便调试而泄露用户问题、权限数据或内部文档全文。

本课练习

设计 10 条“公司请假制度”评测 query:包含 6 条有答案、2 条边界问题、1 条无答案、1 条权限问题。为每条 query 标注 relevant chunk 和 reference answer,然后设计一个实验比较两种 chunking 方案。

提交时至少包含:评测数据结构、指标选择、预期故障定位方式和你会保留的调试日志字段。

主读材料

Introduction to Information Retrieval。优先阅读检索评测章节;生成质量部分可结合 Ragas Evaluation

下一步

有任何不清楚的地方,直接向老师提问。