RAG评估指标体系

RAG系统的评估分为两个层面:检索质量生成质量。不评估就不知道哪里出了问题。

检索层指标

指标含义计算方式
Recall@K 正确文档在Top-K中的命中率 命中次数 / 总问题数
MRR(平均倒数排名) 正确文档排名的平均倒数 Σ(1/rank) / 总问题数
NDCG@K 考虑排名的归一化折现累积增益 标准化的排名加权指标
Context Precision 检索到的上下文中有多少是真正相关的 相关片段数 / 总检索片段数

生成层指标

指标含义评估方式
答案相关性(Answer Relevancy) 回答是否切题,没有跑题或废话 LLM-as-judge或人工评估
忠实度(Faithfulness) 回答是否完全基于检索到的上下文,没有幻觉 对每个声明验证是否能在上下文中找到依据
上下文召回率(Context Recall) 参考答案中的关键信息是否被检索到 与标准答案对比
BLEU/ROUGE 生成答案与参考答案的词语重叠度 自动计算,适合有标准答案的场景

RAGAS框架

RAGAS(RAG Assessment)是目前最流行的RAG自动评估框架,它用LLM来评估LLM生成的答案,实现无参考答案的自动化评估。

pip install ragas
from ragas import evaluate
from ragas.metrics import (
    answer_relevancy,
    faithfulness,
    context_recall,
    context_precision,
)
from datasets import Dataset

# 构造评估数据集
data = {
    "question": ["什么是RAG技术?", "BGE-M3最大支持多少token?"],
    "answer": [
        "RAG是检索增强生成技术,通过检索外部知识来提升LLM回答质量。",
        "BGE-M3最大支持8192个token的输入。"
    ],
    "contexts": [
        ["RAG(Retrieval-Augmented Generation)通过检索相关文档来增强生成质量。"],
        ["BGE-M3是BAAI开发的多功能Embedding模型,最大输入长度为8192 tokens。"]
    ],
    "ground_truth": [
        "RAG是一种结合检索和生成的AI技术。",
        "BGE-M3支持最多8192个token。"
    ]
}

dataset = Dataset.from_dict(data)
result = evaluate(
    dataset,
    metrics=[
        answer_relevancy,
        faithfulness,
        context_recall,
        context_precision,
    ],
)
print(result)
# 输出: {'answer_relevancy': 0.92, 'faithfulness': 0.95, ...}

什么时候不需要RAG?

RAG不是万能的,以下场景不适合或不需要RAG:

RAG的常见失败模式

失败模式症状调优方向
检索未命中 召回的文档与问题无关,答非所问 优化chunk策略;换更好的Embedding模型;引入混合检索
上下文被忽略 检索到了相关内容,但LLM没有使用 优化Prompt;减少上下文长度;Rerank后只保留Top-3
chunk边界截断 关键信息跨越两个chunk边界,单个chunk不完整 增加overlap;调整chunk大小;用语义切分
幻觉仍然存在 LLM在检索内容之外添加了没有依据的信息 在Prompt中明确要求"只基于参考内容回答";开启引用追踪
多跳推理失败 需要综合多个来源才能回答,但答案片面 增加检索片段数量;使用Agent多轮检索

RAG调优路线图

1. 基线建立:最简单的实现,评估Recall@5和Faithfulness基线
    │
2. 检索优化:调整chunk大小 → 换Embedding模型 → 引入混合检索
    │
3. 精排优化:加入Rerank → 评估Context Precision
    │
4. 生成优化:改进Prompt → 添加引用来源 → 评估Answer Relevancy
    │
5. 持续监控:收集用户反馈 → 扩充测试集 → 迭代改进
    

第六章小结

RAG是当前最实用的"让AI使用私有知识"方案。一个高质量的RAG系统需要在每个环节认真打磨: