第 8 课:RAG 评测与故障定位
RAG 课程 · 08 |目标:用数据判断问题在召回、上下文还是生成|用时:30 分钟
没有评测集时,RAG 优化很容易变成“换模型、改 prompt、凭感觉挑答案”。本课建立一套最小评测闭环。
先建立评测样本
每条样本至少包含:
{
"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 个候选中:
Recall@k = 命中正确证据的 query 数 / query 总数如果 Recall@20 很低,说明正确证据根本没有进入候选集,优先查 chunking、embedding、召回方式和过滤条件。
Precision@k
前 k 个结果中有多少是真正相关的:
Precision@k = 前 k 个候选中的相关结果数 / kRecall 高但 Precision 低,说明候选覆盖了正确答案,却混入了很多噪声,适合继续看 reranker 和上下文组装。
MRR
只关心第一个正确结果排在第几位:
RR = 1 / 第一个相关结果的排名
MRR = 所有 query 的 RR 平均值它适合单一事实问答,因为正确证据越靠前越有价值。
nDCG
当相关性有等级时使用,例如“强相关、部分相关、不相关”。它能评价多个结果的排序质量,比只做 0/1 命中更细。
生成指标
召回正确不等于回答正确,还要评估:
- **Answer correctness:**答案是否回答了问题。
- **Faithfulness / groundedness:**答案中的断言是否能被提供证据支持。
- **Citation correctness:**引用是否真的支持对应断言。
- **Answer relevance:**回答是否直接、完整地回应 query。
- **Refusal quality:**证据不足时,是否明确说无法确定而不是编造。
自动评测可以帮助批量筛查,但关键样本仍需要人工抽查。评测模型也可能产生偏差,不能把一个自动分数当成绝对真值。
故障定位矩阵
| Recall@20 | MRR@5 | 生成质量 | 最可能的问题 |
|---|---|---|---|
| 低 | 低 | 低 | chunking、embedding、召回或过滤 |
| 高 | 低 | 低 | 候选排序、reranker 或 query 改写 |
| 高 | 高 | 低 | 上下文组装、prompt 或模型生成 |
| 高 | 高 | 高但慢 | embedding、重排、生成或外部服务延迟 |
| 高 | 高 | 偶尔编造 | 证据边界、引用约束、无答案策略 |
做一次可复现的 A/B 实验
固定以下条件:
- 同一批 query。
- 同一份原始文档和标注。
- 同一个生成模型和 prompt。
- 同一组权限过滤条件。
只改变一个变量,例如:
实验 A:结构切分 + embedding-1 + dense
实验 B:结构切分 + embedding-2 + dense记录:
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。
下一步
有任何不清楚的地方,直接向老师提问。