• 欢迎关注我的微信公众号“ Falost ” 右边扫描关注 --->>

RAG 评估体系:怎么量化你的 RAG 系统好不好?

AI / 大模型 神棍 102℃ 0评论

📌 回顾

上篇我们聊了Agentic RAG——从简单的”单次向量检索 + 直给答案”进化到 Multi-Hop 分解、ReAct 循环迭代。但有一个灵魂拷问始终绕不过去:你的 RAG 系统到底好不好?

做 RAG 的人很多,但能用数据说清”我的 RAG 比他的 RAG 好多少”的人很少。大多数人靠”感觉还行”来判断——感觉检索挺快的,感觉答案看着挺对的。这在开发阶段或许够用,一旦你要上生产环境、对比不同方案、或者向团队汇报效果,没有量化指标就是盲人摸象。

这篇文章不讲概念堆砌,只讲实操——拿什么指标、用什么工具、怎么跑起来。读完你能直接给自己的 RAG 系统打一个可复现的评分报告。

一、先搞清楚要测什么:RAG 的两个环节

RAG 系统分两段:Retrieval(检索)Generation(生成)。评测也得分开测,因为问题出在哪一段,修复方案完全不同。

评测维度 核心问题 典型指标
Retrieval 质量 搜出来的文档相关吗?有遗漏吗? Context Precision、Context Recall、MRR
Generation 质量 回答忠实于上下文吗?回答了用户问的吗? Faithfulness、Answer Relevancy
端到端质量 答案本身对不对? Answer Correctness、Semantic Similarity

下面逐个拆解,每个指标都附真实算例。

二、Retrieval 侧指标:搜得准不准?

2.1 Context Precision(上下文精确率)

定义:在检索返回的文档列表中,排在前面的是不是真的有帮助?

计算公式:

Precision@k = Σ(有用文档的排名倒数) / 前 k 个中相关文档总数

白话解释:把最相关的结果排得越靠前,得分越高。如果前 3 个结果里只有第 3 个有用,那 Precision 就会很低。

RAGAS 的实现方式是用 LLM 逐条判断”这段上下文对生成答案是否有用”,给出 binary (0/1) 判决。源码见 ragas/metrics/_context_precision.py,核心 Prompt:

"Given question, answer and context verify if the context was useful
 in arriving at the given answer. Give verdict as '1' if useful
 and '0' if not with json output."

2.2 Context Recall(上下文召回率)

定义:答案中提到的信息,检索回来的上下文里是不是都有?

实现流程:把答案拆成独立陈述句 → 逐句判断”这段上下文是否支撑这句陈述” → 被支撑的句子占比就是 Recall 得分。

RAGAS 源码中的 Prompt:

"Given a context, and an answer, analyze each sentence in the answer
 and classify if the sentence can be attributed to the given context
 or not. Use only 'Yes' (1) or 'No' (0) as a binary classification."

如果答案有 5 句话,其中 4 句能从检索到的上下文中找到出处,Context Recall = 0.8。

2.3 MRR(Mean Reciprocal Rank)

不需要 LLM 的传统指标。如果你有标注好的”正确文档 ID”,MRR 衡量的是第一个正确文档出现在第几位。公式:

MRR = (1 / rank₁ + 1 / rank₂ + ... + 1 / rankₙ) / N

适合在你有标注数据(golden dataset)时使用,查起来快、不需要调 LLM。

三、Generation 侧指标:答得对不对?

3.1 Faithfulness(忠实度)

这是 RAG 评估中最核心的指标,没有之一。

RAG 的最大敌人是幻觉——模型不按检索回来的文档回答,自己瞎编。Faithfulness 专门检测这个。

实现流程(来自 RAGAS 源码):

  1. 把答案中的每句话分解成独立可验证的陈述(Statement)
  2. 每个陈述去跟上下文比对
  3. 判断陈述是否能从上下文中得到支持
  4. Faithfulness = 被支持的陈述数 / 总陈述数

举个具体例子:

  • 上下文:“Transformer 架构由 Vaswani 等人在 2017 年提出。”
  • 答案:“Transformer 是 2017 年提出的,由 Google 团队发明。”
  • 第一句”2017年提出”→ ✅ 有支撑
  • 第二句”Google 团队发明”→ ❌ 上下文中没提到 Google(实际论文作者来自 Google,但你的检索片段没包含这个信息)
  • Faithfulness = 1/2 = 0.5

这个指标的优雅之处在于:它不要求你知道”正确答案”,只要求答案和上下文一致。

3.2 Answer Relevancy(答案相关性)

衡量生成的答案是否切题。RAGAS 的实现思路是:让 LLM 根据答案反推问题,然后计算反推的问题和原始问题的语义相似度。

如果答案答非所问,反推出来的问题会跟原问题差很远。如果答案是”I don’t know”这类”非承诺性回答”(noncommittal),同样会扣分。

四、实战:用 RAGAS 搭评估管线

RAGAS(v0.4.3,Apache 2.0 协议,GitHub: vibrantlabsai/ragas)是目前最流行的 RAG 评测框架,支持 Python API 和 HuggingFace Datasets。

以下是完整可运行的评估代码:

# pip install ragas
from ragas import SingleTurnSample
from ragas.metrics import (
    faithfulness,
    context_precision,
    context_recall,
    answer_relevancy,
)

# 构建一个评测样本
sample = SingleTurnSample(
    user_input="Transformer 是什么时候提出的?",
    response="Transformer 架构由 Vaswani 等人在 2017 年提出。",
    retrieved_contexts=[
        "The Transformer model was introduced in the paper '
        Attention is All You Need' by Vaswani et al. in 2017.",
        "It has become the foundation for most modern LLMs.",
    ],
    reference="Transformer 架构于 2017 年由 Vaswani 等人提出。",
)

# 逐个打分(需要设置 LLM,详见下方说明)
# score_f = await faithfulness.single_turn_score(sample)
# score_p = await context_precision.single_turn_score(sample)
# score_r = await context_recall.single_turn_score(sample)

注意事项:RAGAS 的 LLM-as-Judge 指标需要配置一个评判模型(默认用 OpenAI)。生产环境推荐用 GPT-4o 或 Claude。如果想省钱,可以用本地模型替代,但评测准确度会下降。配置方式:

from ragas.llms import LangchainLLMWrapper
from langchain_openai import ChatOpenAI

# 用 GPT-4o 做评判
evaluator = LangchainLLMWrapper(
    ChatOpenAI(model="gpt-4o")
)
faithness = faithfulness.with_llm(evaluator)

更推荐的做法是准备一份 Golden Dataset(人工标注的 QA 对 + 期望检索文档),然后批量跑 RAGAS 评估:

import pandas as pd
from ragas import EvaluationDataset

# 批量评测
df = pd.DataFrame({
    "user_input": [...],
    "response": [...],
    "retrieved_contexts": [[...], ...],
    "reference": [...],
})
dataset = EvaluationDataset.from_pandas(df)
# scores = await evaluate(dataset, metrics=[faithfulness, ...])

五、指标不是终点,改进才是

光跑出分数没意义,关键是根据分数调整策略:

问题信号 可能原因 解决方向
Context Precision 低,Recall 高 检索范围太宽,混入噪音 缩小 Chunk Size、加 reranker、提高相似度阈值
Context Precision 高,Recall 低 检索范围太窄,漏了关键文档 增大 Top-K、用混合检索(稠密 + 稀疏)、加查询扩展
Faithfulness 低 模型不听上下文,自己发挥 加 System Prompt 约束、换更小的模型(小模型更听话)、降低温度
Answer Relevancy 低 模型答非所问或含糊其辞 优化 Prompt 模板、检查检索内容是否真正回答了问题

总结

评估 RAG 不是锦上添花,而是把”感觉还行”变成可复现的量化数据。核心就三件事:Retrieval 测召回和精确率,Generation 测忠实度和相关性,然后根据数据调整策略。 RAGAS 这个框架帮你把 70% 的脏活干了,剩下的 30%——构建高质量的 Golden Dataset、选择合适的评判 LLM——才是决定你评测质量的关键。

下期预告:Function Calling 与 Tool Use 实战 —— 教大模型用工具:查天气、算数学、调 API,从原理到代码全拆解。


参考资料

  1. RAGAS — Evaluation framework for RAG and LLM applications, v0.4.3, Apache 2.0 — https://github.com/vibrantlabsai/ragas
  2. RAGAS Metrics Documentation — https://docs.ragas.io/en/stable/concepts/metrics/
  3. Es, S. et al. “RAGAS: Automated Evaluation of Retrieval Augmented Generation”, arXiv:2309.15217 — https://arxiv.org/abs/2309.15217
  4. TruLens — Library to systematically track and evaluate LLM applications, v2.8.1 — https://trulens.org/
  5. SingleTurnSample API — https://docs.ragas.io/en/stable/references/samples/

转载请注明:Falost的小窝 » RAG 评估体系:怎么量化你的 RAG 系统好不好?

如果你觉得这篇文章不错或者对你有帮助,想请我喝一杯咖啡,可以打赏
喜欢 (1)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址