ysf
ysf
Published on 2025-12-09 / 32 Visits
1

如何评估RAG应用?检索质量与生成质量的评价指标

Resources:

检索增强生成(Retrieval-Augmented Generation,RAG)通过将大型语言模型(LLMs)的生成能力与外部知识检索机制相结合,显著提升了模型在知识密集型任务中的表现。相比单纯依赖模型参数记忆的生成方式,RAG 能够在回答问题时动态引入相关资料,从而增强答案的准确性、时效性与可追溯性。

评估 RAG 应用时,通常在两个环节展开:检索质量生成质量。前者关注系统能否找到与问题相关、足以支撑回答的外部知识,后者关注模型能否基于这些知识生成准确、完整、忠实且符合语境的答案。通过将评估拆解为检索与生成两个维度,可以更清楚地判断 RAG 系统的实际效果,并定位问题究竟出在“没有找对资料”,还是“没有用好资料”。

检索质量评估

在 RAG 应用中,检索环节的核心目标不是简单地返回“语义相似”的文档,而是找到能够支撑最终回答的高质量上下文。一个好的检索结果应该满足几个条件:与用户问题相关、包含回答所需的关键信息、排序靠前、噪声较少,并且能够被生成模型直接利用。因此,检索质量通常可以从相关性、召回率、排序质量、噪声控制和上下文可用性几个角度进行评估。

  • 是否找到了相关内容

  • 是否召回了关键信息

  • 相关内容是否排在前面

  • 检索结果里是否有太多噪声

  • 检索内容是否足以支撑生成答案

  • 检索结果是否适合被模型使用

基础指标:有没有找到

Precision@K:检索结果是否准确

Precision@K衡量前K检索结果中,有多少是真正相关的内容

对于单个问题 qiq_i

Precision@K(qi)=j=1Kreli,jK\text{Precision@K}(q_i)=\frac{\sum_{j=1}^Krel_{i,j}}{K}

整个评测集上的平均值为:

Precision@K=1Ni=1NPrecision@K(qi)\text{Precision@K}=\frac{1}{N} \sum_{i=1}^N\text{Precision@K}(q_i)

Precision@K关注的是:检索结果中无关的结果多不多

Precision@K越高,说明检索结果中相关内容占比越高,检索结果越干净。Precision 低意味着给大模型塞了很多无关信息,这不仅浪费Token,还可能对模型造成(噪声干扰)。

Recall@K:关键内容是否被召回

Recall@K 衡量所有相关内容中,有多少出现在 Top K检索结果中

对于单个问题 qiq_i

Recall@K(qi)=j=1Kreli,jRi\text{Recall@K}(q_i)= \frac {\sum_{j=1}^{K}rel_{i,j}} {|R_i|}

整个评测集上的平均值为:

Recall@K=1Ni=1NRecall@K(qi)\text{Recall@K} = \frac{1}{N} \sum_{i=1}^N\text{Recall@K}(q_i)

Recall@K关注的是:回答问题所需的关键上下文有没有被找出来

在RAG应用中, Recall@K通常非常重要,如果Recall低,说明关键信息压根没被检索到,后续环节中模型很难生成可靠答案。

排序类指标:排得对不对

MRR(平均倒数排名)

MRR(Mean Reciprocal Rank),关注第一个相关结果出现在什么位置,位置越靠前,得分越高。

计算公式:

  1. 倒数排名(Reciprocal Rank,RR):针对单个查询,如果第一个相关文档排在第 rankrank 位,其得分为:

RR=1rank\text{RR}=\frac{1}{rank}

如果前K个结果中完全没有相关文档,则 RR=0\text{RR}=0

  1. 平均倒数排名(MRR):对所有 NN个查询的 RRRR 值取平均:

MRR=1Ni=1N1ranki\text{MRR} = \frac{1}{N}\sum_{i=1}^N\frac{1}{rank_i}

计算示例:

假设有三个查询,检索结果中第一个相关文档的位置分别是:

  • 查询1:第 2 位(RR = 1/2 = 0.5)

  • 查询2:第 1 位(RR = 1/1 = 1.0)

  • 查询3:第 4 位(RR = 1/4 = 0.25)

那么该检索系统的MRR为:

MRR=(0.5+1.0+0,25)/3=0.583\text{MRR}=(0.5+1.0+0,25)/3 =0.583

NDCG@K(归一化折损累积增益)

NDCG不仅考虑了文档的排序位置,还引入了相关性等级(例如,0=无关,1=有点相关,2=非常相关),位置越靠前、相关性越高的文档,得分越高。

NDCG的计算可以分为三个步骤:

  1. 折损累积增益(DCG@K):计算前 KK 个检索结果的实际得分。相关性越高的文档如果排在后面,其贡献会被对数函数折损。

DCG@K=i=1Krelilog2(i+1)\text{DCG@K} = \sum_{i=1}^K\frac{rel_i}{\log_2(i+1)}

其中

  • relirel_i 为第 ii 个文档的相关性分数,

  • ii 为文档的排名位置

  1. 理想折损累计增益IDCG@K:假设前 KK 个结果是完美排序(即按相关性从高到低排列)时的DCG得分。这是该查询理论上能拿到的最高分。

  2. 归一化折损累计增益NDCG@K:用实际得分除以理想得分,将分数归一化到 [0,1][0,1] 之间,方便不同查询之间进行对比。

NDCG@K=DCG@KIDCG@K\text{NDCG@K}=\frac{DCG@K}{IDCG@K}

计算示例:

假设检索了3个文档,其相关性评分分别为 [2,1,0][2,1,0](2=非常相关,1=相关,0=无关)。

  • 第一步,计算DCG@3

DCG@3=2log2(1+1)+1log2(2+1)+0log2(3+1)=21+11.58+0=2.63\text{DCG@3}= \frac{2}{\log_2(1+1)} + \frac{1}{\log_2(2+1)} + \frac{0}{\log_2(3+1)}=\frac{2}{1}+\frac{1}{1.58}+0 = 2.63

  • 第二步,计算IDCG@3

当前排序已经是相关性从高到低的完美排序,因此IDCG@3等于DCG@3,即2.63

  • 第三步,计算NDCG@3

NDCG@3=2.63/2.63=1.0\text{NDCG@3}=2.63/2.63 = 1.0

如果检索结果的排序为 [0,1,2][0,1,2],DCG会大幅降低,NDCG也会远小于1

总结

指标

关注点

解释

Precision

生成质量评估

答案是否回答了用户问题?
答案是否事实正确?
答案是否完整覆盖关键点?
答案是否严格基于检索上下文?
是否出现了上下文中没有的信息?
引用是否准确?
表达是否清楚?

评估工具

RAGAS

RAGAS 是一个专为RAG设计的评估框架

DeepEval

LangSmith

TruLens

LIamaIndex Eval