RAG 评估与调优
评估要放在调优前面。没有量化手段,改分块、换模型、加重排都是凭感觉,你永远不知道改动是好是坏。RAG 的评估分两层:检索层和生成层,两层指标独立看,不能混。
检索层指标
衡量“相关文档有没有被召回、排得对不对”:
| 指标 | 衡量什么 |
|---|---|
| Recall@K | 前 K 个结果里包含多少相关文档,召回率 |
| Precision@K | 前 K 个结果里有多少是相关的,精确率 |
| MRR | 第一个相关结果出现在第几位,排序质量 |
| NDCG | 带位置的排序质量,相关文档越靠前分越高 |
检索指标有个陷阱:它们衡量正确的块在不在 Top-K 里,不衡量这些块是否包含生成正确答案所需的上下文。语义分块那篇的悖论就在这里,高检索召回配低生成准确是真实存在的。所以必须看生成层。
生成层指标(RAGAS)
RAGAS 是 RAG 评估的事实标准,核心四个指标,全部用 LLM-as-judge 打分:
- Faithfulness(忠实度):答案中的断言是否基于检索到的上下文。幻觉的直接度量
- Answer Relevance(答案相关性):答案是否回答了问题,还是答非所问
- Context Precision(上下文精度):检索到的块是否真的与查询相关,还是只是主题邻近
- Context Recall(上下文召回):回答所需的信息是否被检索到
这四个指标正好对应 RAG 的两个失效点:检索没召回该召回的(Context Recall 低),生成没忠实用检索内容的(Faithfulness 低)。指标出问题,先定位是检索层还是生成层。
评估集与流程
- Golden Set:20 到 50 条真实问题起步,覆盖正常、边界、对抗三类。答案要有人工标注的参考答案和引用来源
- 对照实验:同一个评估集上改一个变量(块大小、检索策略、是否重排),对比指标变化。一次只改一个
- LLM-as-judge 要校准:批量初筛用 LLM 打分,关键场景保留人工标注集兜底。评估器本身要抽样核对,防止评估器漂移
调优顺序
一个经验顺序,按性价比排:
- 先修检索:换更好的分块、加混合检索、加重排。检索质量是上限
- 再调上下文:压缩冗余、去重、控制注入量
- 调生成:Prompt 约束(只根据上下文回答、不知道就说不知道)、引用格式
- 每一步都用评估集验证,指标没变好就回滚
面试追问
- RAG 怎么评估? 两层。检索层看 Recall@K、MRR、NDCG;生成层用 RAGAS 看忠实度、答案相关性、上下文精度和召回
- Faithfulness 是什么? 答案中的断言是否基于检索到的上下文。幻觉的直接度量,分块失败引入的幻觉都能被它抓到
- 为什么不能只看检索指标? 检索指标衡量块的命中,不衡量块是否包含生成所需的上下文。语义分块高召回低生成就是例子
- 评估集怎么建? 20 到 50 条真实问题起步,覆盖正常、边界、对抗,人工标注参考答案和引用。LLM-as-judge 初筛,人工兜底
- 调优从哪开始? 检索层优先:分块、混合检索、重排。生成层只是整理检索到的内容,检索不行换什么模型都白搭