

在RAG(检索增强生成)系统中,检索质量直接决定了大模型回答准不准。今天我用最接地气的方式,聊聊三个核心指标:Recall@K、MRR 和 NDCG。
别被名字吓到!一句话总结: Recall@K 看“找没找到”, MRR 和 NDCG 看“排得好不好”。
下面用例子、图示和对比,帮你一次性搞懂!
用户问一个问题,系统去知识库检索,返回前 K 条结果。 Recall@K 关心的只有一件事:正确答案有没有出现在这前 K 条里?
举个例子: 正确文档是 Doc B。 系统返回的前 5 条结果是:
计算结果:
它回答的问题就是:“检索器有没有把有用资料捞上来?” 超级适合评估向量检索、BM25、Hybrid retrieval 的召回能力。
缺点也很明显:它完全不在乎顺序!即使正确文档排在第 3 位,Recall@3 依然是 1,但用户体验差多了。
MRR = Mean Reciprocal Rank(平均倒数排名)。 它只盯着第一个正确结果排在第几名,越靠前得分越高。
直觉公式(不用背,懂意思就行):
下面这张图用真实 Query 示例,清晰展示了不同排名的得分和 MRR 计算过程:

适合场景:FAQ 系统、找唯一正确文档、找最佳答案页。 局限:如果一个问题有多个相关文档,MRR 只看“第一个”,忽略了后面的。
NDCG = Normalized Discounted Cumulative Gain(归一化折扣累积增益)。 它同时考虑三点:
经典好坏排序对比(这张图完美展示了“理想排序 vs 实际排序”的视觉差异):

为什么要 Normalized?把当前得分除以“理想最优排序”的得分,最后落在 0~1 之间:1 = 完美排序,越接近 1 越好。
下面这张图直接并列 MRR 和 NDCG 的公式,一眼看懂区别:

假设一个问题有 3 个相关文档:
优秀排序:Doc A → Doc B → 噪声 → Doc C → 噪声 → Recall@5=1,MRR=1,NDCG很高
糟糕排序:噪声 → Doc C → 噪声 → Doc B → Doc A → Recall@5=1,但 MRR=0.5,NDCG明显更低
这就说明:Recall@K 高,不代表排序好!
千万别只看一个指标! 推荐至少一起看:Recall@K(有没有漏) + MRR 或 NDCG(排得够不够好)。
常见坑:Recall@10 很高,但 MRR 很低 → 说明“能找到,但总排不靠前”。这时问题通常出在排序、query rewrite 或 chunk 太噪上。
掌握了这三个指标,你的 RAG 系统评估就有了“灵魂”!
点赞、收藏、转发给需要的朋友~ 下期我们聊怎么用这些指标做自动化评测,敬请期待!