RAG系统上线前必修课:检索质量与生成效果评估体系

RAG(Retrieval-Augmented Generation,检索增强生成)真正进入企业生产环境后,最容易出现的问题并不是“模型不够聪明”,而是没有一套能够量化系统质量的评测体系


开发阶段经常出现这样的情况:测试人员输入几个问题,发现答案“看起来不错”,于是认为RAG已经可以上线;但正式接入数万份企业文档后,问题开始集中暴露——有些问题检索不到正确资料,有些问题虽然召回了正确文档,却把关键内容排在很靠后的位置,还有一些问题检索结果完全正确,但模型最终生成的答案仍然出现事实错误、遗漏甚至幻觉。


这说明一个核心事实:

RAG不是单一模型,而是一条由数据、切分、检索、重排、上下文组装和生成共同构成的链路。

因此,RAG系统不能只看最终回答是否“像人话”,而应该把系统拆成多个可观测、可测量的环节,分别回答三个问题:

  1. 该找的资料有没有找到?

  2. 找到的资料是否真正支持问题?

  3. 模型是否基于这些资料生成了正确、完整、可信的答案?

RAGAs等研究工作也明确指出,RAG评估至少涉及检索模块找到相关上下文的能力、模型对上下文的利用能力以及最终生成质量,而不能只评价最终文本。([ACL Anthology][1])


对于企业系统而言,更合理的做法是建立一条完整的评测流水线:

                    ┌──────────────────┐
                    │   企业知识库      │
                    └────────┬─────────┘
                             │
                        文档切分/索引
                             │
                             ▼
用户问题 ────────► Query处理
                             │
                             ▼
                  ┌────────────────────┐
                  │   Retriever        │
                  │ BM25 / Vector      │
                  │ Hybrid Search      │
                  └─────────┬──────────┘
                            │
                         Top-K
                            │
                            ▼
                  ┌────────────────────┐
                  │   Reranker         │
                  └─────────┬──────────┘
                            │
                         Top-N
                            │
                            ▼
                  ┌────────────────────┐
                  │ Context Assembly   │
                  └─────────┬──────────┘
                            │
                            ▼
                  ┌────────────────────┐
                  │       LLM          │
                  └─────────┬──────────┘
                            │
                            ▼
                         Answer
                            │
              ┌─────────────┴─────────────┐
              ▼                           ▼
       Retrieval Eval              Generation Eval
       Recall / MRR                 Faithfulness
       Precision / NDCG             Correctness
       Hit Rate                     Relevance
              │                           │
              └─────────────┬─────────────┘
                            ▼
                       评测报告
                            │
                            ▼
                    版本迭代 / 回归测试


一、为什么RAG上线前必须建立评测体系

传统搜索系统通常有明确的相关性判断:输入一个Query,系统返回一组文档,然后通过人工标注或者点击行为判断结果是否相关。


RAG则多了一层复杂性。


假设企业知识库中存在以下三个文档:

Doc A:2026年员工报销制度
Doc B:2025年员工报销制度
Doc C:差旅费用审批流程

用户问:

2026年员工出差住宿费最高可以报销多少?

系统可能发生三种情况。

情况一:正确检索,正确生成

Query
  ↓
Doc A
  ↓
LLM
  ↓
正确答案

这是理想情况。

情况二:检索错误,模型“自己发挥”

Query
  ↓
Doc B
  ↓
LLM
  ↓
引用2025年政策回答

最终答案可能语言非常流畅,但事实已经过期。

情况三:检索正确,生成错误

Query
  ↓
Doc A
  ↓
LLM误读/遗漏
  ↓
错误答案

这类问题尤其容易被传统RAG测试忽略。


因此,单纯统计最终答案正确率无法回答:

到底是Retriever有问题,还是LLM有问题?

企业RAG评测的第一原则,就是把检索评测与生成评测解耦


二、第一步:建立企业级Golden Dataset

没有评测数据集,就没有真正意义上的RAG评测。


企业应该建立自己的Golden Dataset,也就是一套经过人工确认、能够代表真实业务场景的问题集合。


一个基本的数据结构可以设计成:

{
  "id": "qa-000001",
  "question": "员工出差住宿费的报销标准是多少?",
  "reference_answer": "根据2026年差旅管理办法,员工住宿费按照职级和城市类别执行对应标准。",
  "relevant_documents": [
    "doc_2026_travel_policy"
  ],
  "relevant_chunks": [
    "chunk_01882"
  ],
  "category": "企业制度",
  "difficulty": "medium"
}

进一步,可以增加:

{
  "question_type": "factoid",
  "department": "财务",
  "version": "2026",
  "expected_entities": [
    "住宿费",
    "职级",
    "城市类别"
  ],
  "must_cite": true
}

这样做的意义在于:后续系统发生变化时,可以对同一批问题重复测试。


1. 数据集不能只包含简单问题

企业真实用户的问题远比Demo复杂。


至少应该覆盖:

类型

示例

事实查询

报销标准是多少?

条件查询

什么情况下可以申请退款?

多跳问题

A政策和B政策同时满足时如何处理?

对比问题

新旧制度有哪些变化?

时间问题

2026年政策与2025年有什么区别?

否定问题

哪些费用不能报销?

模糊问题

出差住宿怎么报?

长问题

某业务发生特定条件时应该执行什么流程?

无答案问题

公司制度中是否规定了某项不存在的政策?

特别要注意无答案问题


企业RAG不能只测试“有答案的问题”,还必须测试:

知识库没有答案时,模型能不能明确说“不知道”。

否则系统可能在知识库缺少信息时通过模型先验知识强行补答案。


三、检索质量评估:Recall到底意味着什么

检索阶段首先关注的是:

相关内容有没有进入Top-K?

这就是Recall@K。


设某个Query真正相关的文档集合为:


RRR


Retriever返回Top-K文档集合:


SKS_KSK


那么:


Recall@K=∣R∩SK∣∣R∣Recall@K=\frac{|R\cap S_K|}{|R|}Recall@K=RRSK


例如:

真实相关文档:
A、B、C

Top-5检索结果:
D、A、F、B、G

那么:

Recall@5 = 2 / 3 = 66.7%

因为A、B被召回,而C没有。


1. 为什么RAG尤其关注Recall

传统搜索系统可能更强调Precision。


但对于RAG来说,如果正确资料根本没有进入上下文,后面的LLM基本没有可靠依据。


可以简单理解:

正确答案不在Context
        ↓
LLM无法可靠回答

所以RAG通常首先应该解决:

Recall不能太低。

例如企业内部知识库的第一阶段评估可以设定:

Recall@5  >= 90%
Recall@10 >= 95%

这不是通用行业标准,而应该根据业务风险、知识库规模和问题类型建立自己的SLO。


四、MRR:不仅要找到,还要排得靠前

Recall只告诉我们:

找到了没有?

但没有告诉我们:

第几个结果才找到?

这就是MRR(Mean Reciprocal Rank)。


对于单个Query:


RR=1rankRR=\frac{1}{rank}RR=rank1


如果正确答案排名:

第1名 → RR = 1
第2名 → RR = 0.5
第3名 → RR = 0.333
第10名 → RR = 0.1

多个Query取平均:


MRR=1N∑i=1N1rankiMRR=\frac{1}{N}\sum_{i=1}^{N}\frac{1}{rank_i}MRR=N1i=1Nranki1


例如:

Query 1 → Rank 1
Query 2 → Rank 2
Query 3 → Rank 4

那么:


MRR=1+0.5+0.253=0.5833MRR=\frac{1+0.5+0.25}{3}=0.5833MRR=31+0.5+0.25=0.5833


MRR特别适合评价:

  • FAQ检索

  • 单答案查询

  • 企业制度查询

  • 知识库问答

  • 搜索结果排序

BEIR等信息检索基准也将Recall、Precision、NDCG、MAP、MRR等作为重要检索指标。([GitHub][2])


五、Recall高,为什么RAG仍然可能很差

这是企业RAG最常见的误区之一。


假设:

Recall@10 = 100%

看起来非常好。


但Top-10可能是:


1. 无关文档

2. 无关文档

3. 无关文档

4. 旧政策

5. 旧政策

6. 相关文档

7. 相关文档

8. 无关文档

9. 无关文档

10. 相关文档

虽然相关资料被召回,但上下文充满噪声。


这时候就需要Precision类指标。


六、Precision与Context Precision

传统Precision@K:


Precision@K=Top-K中的相关文档数KPrecision@K=\frac{\text{Top-K中的相关文档数}}{K}Precision@K=KTop-K中的相关文档数


例如Top-5中有3个相关文档:


Precision@5=3/5=60Precision@5=3/5=60%Precision@5=3/5=60


对于RAG,还可以进一步关注Context Precision

排在前面的上下文是否更加相关?

这比简单统计“相关文档数量”更加重要。


因为:

方案A:

相关
相关
相关
无关
无关

明显优于:

方案B:

无关
无关
相关
相关
相关

虽然两者Precision@5完全一样。


企业RAG因此通常应该同时观察:

Recall@K
Precision@K
MRR
NDCG@K
Context Precision

而不是只看一个指标。


七、NDCG:处理“相关程度不同”的问题

现实知识库中,文档并不是简单的“相关/不相关”。


例如:

文档A:完全回答问题
文档B:部分回答问题
文档C:背景介绍
文档D:完全无关

可以定义:

A = 3
B = 2
C = 1
D = 0

这时候NDCG(Normalized Discounted Cumulative Gain)会更加合适。


DCG的核心思想是:


DCG@K=∑i=1K2reli−1log⁡2(i+1)DCG@K=\sum_{i=1}^{K}\frac{2^{rel_i}-1}{\log_2(i+1)}DCG@K=i=1Klog2(i+1)2reli1


再通过理想排序进行归一化:


NDCG@K=DCG@KIDCG@KNDCG@K=\frac{DCG@K}{IDCG@K}NDCG@K=IDCG@KDCG@K


NDCG特别适用于企业知识库中存在大量“部分相关文档”的情况。


例如:

Query:
2026年上海地区员工住宿标准是多少?

结果:

1. 2026差旅住宿标准——上海

2. 2026差旅制度

3. 2025差旅制度

4. 全国差旅制度

5. 财务报销流程

显然第1个结果价值最高。


NDCG能够比简单Recall更加细致地描述这种排序质量。


八、RAG检索评测的正确分层方式

一个成熟系统不应该只测最终Retriever。


应该把检索链路拆开:

Query
  │
  ├── Query Rewrite
  │
  ▼
Retriever
  │
  ├── BM25
  ├── Vector Search
  └── Hybrid Search
  │
  ▼
Top-K
  │
  ▼
Reranker
  │
  ▼
Top-N Context

然后分别评估:

召回阶段:
Recall@K
Precision@K

排序阶段:
MRR
NDCG@K

上下文阶段:
Context Precision
Context Recall
Context Relevance

这样才能定位问题。


例如:

BM25 Recall@20       = 94%
Vector Recall@20     = 87%
Hybrid Recall@20     = 97%

Hybrid MRR@10        = 0.71
Reranker NDCG@5      = 0.89

那么显然:

问题不在基础召回,而可能集中在Reranker或者Context组装阶段。


九、生成效果评估:不能只用BLEU和ROUGE

传统NLP经常使用BLEU、ROUGE等指标。


但RAG问答存在一个特殊问题:

一个问题可能存在多个完全不同但都正确的答案。

例如:

问题:
如何申请VPN?

答案A:
登录IT门户提交VPN申请,经管理员审批后即可使用。

答案B:
员工需要进入IT服务平台创建VPN权限申请,审批通过后系统自动开通。

两句话表达方式不同,但事实完全一致。


因此单纯依赖文本字面重合并不合理。


RAG生成评估应该至少包含四个维度:

              生成质量
                 │
     ┌───────────┼───────────┐
     │           │           │
  Correctness  Faithfulness  Relevance
     │           │           │
     └───────────┼───────────┘
                 │
              Completeness


十、Faithfulness:答案是不是由Context支持

Faithfulness,也可以理解为事实忠实度/上下文一致性


核心问题:

模型回答中的事实,能否从检索上下文中得到支持?

例如Context:

公司规定:
普通员工年度培训预算为5000元。

模型回答:

普通员工年度培训预算为10000元。

即使模型语言非常自然,也应该判定:

Faithfulness = 0

一个常见实现方式,是把回答拆成若干原子事实:

Answer:

1. 普通员工有培训预算。

2. 年度预算为10000元。

3. 预算可以用于外部课程。

然后逐条判断Context是否支持。


最终可以近似表示为:


Faithfulness=SupportedClaimsTotalClaimsFaithfulness=\frac{SupportedClaims}{TotalClaims}Faithfulness=TotalClaimsSupportedClaims


这也是RAGAs评估体系中的核心思想之一。([ACL Anthology][1])


十一、Answer Correctness:正确不等于忠实

Faithfulness与Correctness必须区分。


例如知识库:

2026年公司员工餐补标准:
每人每天30元。

模型回答:

公司员工每天餐补30元。

这是:

Faithful = 1
Correct = 1

但如果知识库本身已经过期:

2026制度实际上规定为40元

而系统检索到了错误的旧文档,那么模型可能:

Faithful = 1
Correct = 0

这揭示了一个重要问题:

模型忠实地回答错误资料,仍然是错误。

所以企业评测不能只有Faithfulness,还必须存在Reference Answer或者人工标注,用于评价事实正确性。


十二、Answer Relevancy:有没有真正回答问题

另一个常见问题是:

模型说了一堆正确的话,但没有回答用户真正的问题。

例如用户问:

VPN申请需要多久?

模型回答:

VPN是一种虚拟专用网络技术,可以帮助员工安全访问企业内部资源。企业VPN通常采用加密通信……

这些内容都可能正确。


但用户真正想知道的是:

需要多久。

因此需要Answer Relevancy。


可以将其理解为:

Question
   ↓
用户真正意图
   ↓
Answer
   ↓
是否覆盖核心意图?

企业可以进一步按照业务场景进行评分:

0:没有回答问题
1:部分相关
2:基本回答
3:完整回答

对于高风险业务,可以要求人工评估,而不是完全依赖LLM-as-a-Judge。


十三、Completeness:企业RAG经常忽略的指标

对于复杂问题,“答案是否完整”非常重要。


例如:

新员工入职需要准备哪些材料?

标准答案可能包含:

身份证
银行卡
学历证明
劳动合同
照片
体检报告

模型只回答:

身份证、银行卡、学历证明。

它不能算完全错误。


但答案是不完整的。


因此可以将:


Completeness=正确覆盖的关键事实标准答案中的关键事实Completeness=\frac{正确覆盖的关键事实}{标准答案中的关键事实}Completeness=标准答案中的关键事实正确覆盖的关键事实


例如覆盖4项中的6项:


Completeness=66.7Completeness=66.7%Completeness=66.7


对于企业制度、操作流程、合规知识等场景,这个指标非常重要。


十四、建立统一的RAG评测数据结构

推荐在系统内部统一设计Evaluation Record:

{
  "query": "员工出差住宿标准是多少?",

  "retrieval": {
    "top_k": 10,
    "retrieved_ids": [
      "doc_01",
      "doc_07",
      "doc_12"
    ],
    "recall": 1.0,
    "mrr": 0.5,
    "ndcg": 0.86
  },

  "generation": {
    "answer": "……",
    "faithfulness": 0.95,
    "correctness": 0.92,
    "relevance": 0.98,
    "completeness": 0.88
  },

  "latency": {
    "retrieval_ms": 82,
    "rerank_ms": 46,
    "llm_ms": 1240,
    "total_ms": 1398
  }
}

最终可以形成统一的评测结果:

                 RAG Evaluation
                       │
       ┌───────────────┼────────────────┐
       ▼               ▼                ▼
   Retrieval       Generation       System
       │               │                │
 Recall@K         Correctness       Latency
 MRR              Faithfulness      Cost
 NDCG             Relevance         Error Rate
 Precision        Completeness


十五、推荐的企业RAG评测架构

一个可落地的工程架构可以设计成:

                   ┌─────────────────────┐
                   │ Evaluation Dataset  │
                   │ Golden QA / Cases   │
                   └──────────┬──────────┘
                              │
                              ▼
                    ┌──────────────────┐
                    │ Evaluation Runner│
                    └────────┬─────────┘
                             │
              ┌──────────────┼──────────────┐
              ▼              ▼              ▼
          Retriever       Reranker         LLM
              │              │              │
              ▼              ▼              ▼
        Retrieval Log   Ranking Log    Generation Log
              │              │              │
              └──────────────┼──────────────┘
                             ▼
                    ┌─────────────────┐
                    │ Metric Engine   │
                    ├─────────────────┤
                    │ Recall          │
                    │ MRR             │
                    │ NDCG            │
                    │ Precision       │
                    │ Faithfulness    │
                    │ Correctness     │
                    │ Relevance       │
                    │ Completeness    │
                    └────────┬────────┘
                             ▼
                    ┌─────────────────┐
                    │ Evaluation DB   │
                    └────────┬────────┘
                             ▼
                    ┌─────────────────┐
                    │ Dashboard / CI  │
                    └─────────────────┘

其中最关键的是:

每一次评测都必须保存检索结果和最终答案,而不能只保存最终Score。

否则出现问题时无法回溯。


十六、一个简单的Recall/MRR实现

例如使用Python实现基础检索指标:

def recall_at_k(retrieved, relevant, k):
    top_k = retrieved[:k]
    if not relevant:
        return 0.0

    return len(set(top_k) & set(relevant)) / len(set(relevant))


def reciprocal_rank(retrieved, relevant, k):
    relevant = set(relevant)

    for index, doc_id in enumerate(retrieved[:k], start=1):
        if doc_id in relevant:
            return 1.0 / index

    return 0.0


def mrr(results, k=10):
    if not results:
        return 0.0

    total = 0.0

    for retrieved, relevant in results:
        total += reciprocal_rank(
            retrieved,
            relevant,
            k
        )

    return total / len(results)

生产环境中还应该考虑:

重复chunk
文档级/Chunk级相关性
多个正确文档
部分相关文档
无答案Query

因此不要把上述代码直接当成完整的企业评测实现,而应该将其作为Metric Engine的基础组件。


十七、LLM-as-a-Judge应该怎么用

对于Faithfulness、Relevance、Completeness等语义指标,企业通常会使用LLM进行评估。


基本结构:

Question
Context
Answer
   │
   ▼
Evaluator LLM
   │
   ├── Correctness
   ├── Faithfulness
   ├── Relevance
   └── Completeness
   │
   ▼
JSON Score

Evaluator Prompt必须要求结构化输出,例如:

你是企业RAG质量评估器。

请根据Question、Context和Answer进行评价。

评分:
0 = 完全错误
1 = 部分正确
2 = 基本正确
3 = 完全正确

必须严格依据Context判断Faithfulness。

返回JSON:

{
  "faithfulness": 0-3,
  "correctness": 0-3,
  "relevance": 0-3,
  "completeness": 0-3,
  "reason": "简要说明"
}

但需要注意:

LLM-as-a-Judge本身也是一个需要被评估的系统。

如果Evaluator对某类答案存在系统性偏差,那么整个评测体系都会受到影响。


因此关键业务指标仍然应该保留人工抽检。


NIST的AI RMF及其生成式AI扩展也强调了AI系统测试、评估、验证与风险管理的重要性。([NIST][3])


十八、人工评测不能被完全替代

企业最合理的方案不是:

全部人工

也不是:

全部LLM

而是:

                 Evaluation
                     │
        ┌────────────┴────────────┐
        ▼                         ▼
   自动化评测                  人工评测
        │                         │
 Recall / MRR                高风险问题
 NDCG                        新问题类型
 Faithfulness                边界案例
 Relevance                   争议样本
        │                         │
        └────────────┬────────────┘
                     ▼
                最终质量判断

推荐:

80%~95% 自动化
5%~20% 人工抽检

具体比例应该根据业务风险调整。


金融、医疗、法律、企业合规等场景,对人工审核的要求显然高于普通企业知识问答。


十九、评测必须进入CI/CD

真正成熟的RAG系统,不应该上线前评一次就结束。


例如每次修改:

Embedding Model
Chunk Size
Chunk Overlap
Retriever
Reranker
Prompt
LLM
Knowledge Base

都应该自动执行Regression Test。


可以设计成:

Git Commit
    │
    ▼
Build RAG
    │
    ▼
Run Golden Dataset
    │
    ▼
Metric Evaluation
    │
    ▼
Compare Baseline
    │
    ├── Recall下降 > 3% ──► FAIL
    ├── Faithfulness下降 > 2% ──► FAIL
    ├── Latency增加 > 20% ──► WARN
    └── 全部通过 ──► PASS

例如:

evaluation:
  recall_at_10:
    threshold: 0.92
    direction: maximize

  mrr_at_10:
    threshold: 0.75
    direction: maximize

  faithfulness:
    threshold: 0.90
    direction: maximize

  answer_relevance:
    threshold: 0.90
    direction: maximize

  p95_latency_ms:
    threshold: 2000
    direction: minimize

这比“测试人员觉得效果不错”可靠得多。


二十、不要只看平均值,要看分桶指标

平均分很容易掩盖问题。


例如:

整体Recall@10 = 94%

看起来不错。


但拆开:

产品文档     98%
技术文档     96%
财务制度     95%
法律制度     73%
历史文档     61%

真正的问题已经非常明显。


因此企业应该至少按照:

问题类型
业务部门
知识库
语言
文档类型
难度
时间版本

进行分桶。


例如:

SELECT
    question_type,
    AVG(recall_at_10),
    AVG(mrr),
    AVG(faithfulness),
    AVG(correctness)
FROM evaluation_results
GROUP BY question_type;

这样可以直接发现:

系统不是“整体不好”,而是“某一类问题不好”。


二十一、建立错误分类体系

指标只能告诉你“哪里下降”,错误分类才能告诉你“为什么下降”。


建议企业建立以下Error Taxonomy:

Retrieval Error
├── Query理解错误
├── Chunk切分错误
├── Embedding语义不匹配
├── BM25关键词缺失
├── Hybrid权重错误
├── Reranker排序错误
├── Top-K过小
└── 数据版本错误

Generation Error
├── Hallucination
├── Context误读
├── 信息遗漏
├── 答非所问
├── 推理错误
├── 时间版本错误
└── 无答案时强行回答

例如:

Recall@10下降
        │
        ▼
检查Retriever
        │
        ├── BM25下降
        ├── Vector下降
        └── Hybrid正常

那么问题可能来自:

Embedding模型

而不是LLM。


这种定位能力,是建立评测体系真正的价值。


二十二、线上数据应该反哺离线评测

Golden Dataset不能永远不变。


生产环境中每天都会出现新的真实问题。


因此可以建立:

Production Query
       │
       ▼
匿名化/脱敏
       │
       ▼
困难样本筛选
       │
       ├── 低置信度
       ├── 用户重新提问
       ├── 用户点踩
       ├── 人工纠正
       └── 高风险问题
       │
       ▼
人工标注
       │
       ▼
Golden Dataset
       │
       ▼
Regression Test

这就形成真正的闭环:

线上问题 → 标注 → Golden Dataset → 自动评测 → 模型/检索优化 → 再上线 → 新数据继续进入评测集。

这比一次性建立1000道测试题更加有价值。


二十三、RAG评测最终应该关注“系统级质量”

不要把:

Recall = 95%

直接理解成:

RAG质量 = 95%

这是错误的。


RAG最终效果是多个环节共同决定的:


QRAG=f(Qretrieval,Qcontext,Qgeneration,Qknowledge)Q_{RAG}=f(Q_{retrieval},Q_{context},Q_{generation},Q_{knowledge})QRAG=f(Qretrieval,Qcontext,Qgeneration,Qknowledge)


可以进一步建立企业自己的综合评分:


Score=w1R+w2M+w3F+w4C+w5RelScore=w_1R+w_2M+w_3F+w_4C+w_5RelScore=w1R+w2M+w3F+w4C+w5Rel


其中:

R = Recall
M = MRR
F = Faithfulness
C = Correctness
Rel = Relevance

例如:

Recall       25%
MRR          15%
Faithfulness 25%
Correctness  25%
Relevance    10%

但需要强调:

综合分数只适合做总体趋势管理,不应该替代单项指标。

如果Faithfulness低于安全阈值,即使综合得分很高,也不应该上线。


因此实际生产中更推荐:

Hard Gate + Composite Score

即:

必须满足:
Recall       >= 90%
Faithfulness >= 90%
Correctness  >= 90%

同时:
Composite Score >= 92%

任何Hard Gate不通过,直接阻止发布。


二十四、上线前建议执行的RAG评测清单

一个企业RAG正式上线之前,至少应该完成以下检查。

数据层

□ Golden Dataset建立
□ 每个问题有标准答案
□ 关键问题存在人工标注
□ 有无答案问题
□ 有时间版本问题
□ 有多跳问题
□ 有困难样本

检索层

□ Recall@5
□ Recall@10
□ Precision@K
□ MRR@K
□ NDCG@K
□ Context Precision
□ Context Recall
□ Reranker评估

生成层

□ Answer Correctness
□ Faithfulness
□ Answer Relevance
□ Completeness
□ Hallucination
□ 无答案拒答能力

工程层

□ P50/P95/P99延迟
□ Token消耗
□ 单次请求成本
□ 错误率
□ 超时率
□ 检索日志
□ Prompt版本
□ Model版本
□ Embedding版本

发布层

□ Regression Test
□ Baseline对比
□ 自动化CI
□ 人工抽检
□ 高风险问题专项测试
□ 灰度发布
□ 线上质量监控


二十五、从“能回答”走向“可证明地回答”

RAG真正进入企业生产环境之后,评价标准应该发生变化。


Demo阶段关注:

“它能不能回答?”

生产阶段应该关注:

“它为什么这样回答?”

进一步还要回答:

“它引用的资料是否正确?”

“资料是否完整?”

“模型有没有产生知识库之外的事实?”

“如果换一个Embedding模型,效果有没有下降?”

“如果知识库更新了,旧答案是否仍然存在?”

“昨天的Recall是94%,为什么今天变成89%?”

这就是RAG评测体系存在的意义。


一个成熟的企业RAG系统,本质上应该形成下面这个闭环:

                 ┌───────────────────┐
                 │   企业真实问题     │
                 └─────────┬─────────┘
                           ▼
                 ┌───────────────────┐
                 │     RAG Pipeline  │
                 └─────────┬─────────┘
                           ▼
                 ┌───────────────────┐
                 │ Retrieval Metrics │
                 │ Recall / MRR/NDCG │
                 └─────────┬─────────┘
                           ▼
                 ┌───────────────────┐
                 │ Generation Metrics│
                 │ Correct/Faithful  │
                 └─────────┬─────────┘
                           ▼
                 ┌───────────────────┐
                 │ Error Analysis     │
                 └─────────┬─────────┘
                           ▼
                 ┌───────────────────┐
                 │ Golden Dataset     │
                 └─────────┬─────────┘
                           ▼
                 ┌───────────────────┐
                 │ Regression / CI    │
                 └─────────┬─────────┘
                           │
                           └──────► 下一版本RAG

RAGAs的研究已经证明,可以从检索上下文、上下文利用和最终回答多个维度对RAG进行系统化评估,而BEIR等信息检索基准则说明,Recall、MRR、NDCG等指标能够从不同角度描述检索系统性能。([ACL Anthology][1])


但企业真正落地时,不应该照搬某个框架的指标表。评测指标必须围绕业务风险设计。


对于普通企业知识库,可以重点关注:

Recall@K
MRR
Faithfulness
Correctness
Relevance

对于制度、财务、合规等高风险知识库,则应该进一步增加:

版本正确性
引用正确性
拒答准确率
关键事实完整率
人工审核通过率

最终,一个值得上线的RAG系统,不是因为它在几个Demo问题上表现得很好,而是因为它能够用数据证明:


该召回的内容基本都能召回,相关内容能够排在前面,模型能够忠实使用检索结果,最终答案能够正确、完整地解决用户问题,并且当代码、Prompt、Embedding、Reranker或知识库发生变化时,系统能够通过自动化回归测试及时发现质量退化。


这才是企业RAG从“AI Demo”走向“生产系统”的关键一步。


参考资料

  1. Shahul Es, Jithin James, Luis Espinosa-Anke, Steven Schockaert. RAGAs: Automated Evaluation of Retrieval Augmented Generation. EACL 2024. ([ACL Anthology][1])

  2. Nandan Thakur et al. BEIR: A Heterogenous Benchmark for Zero-shot Evaluation of Information Retrieval Models. NeurIPS 2021. ([arXiv][4])

  3. National Institute of Standards and Technology. Artificial Intelligence Risk Management Framework: Generative Artificial Intelligence Profile (NIST AI 600-1). 2024. ([NIST][3])

[1]: https://aclanthology.org/2024.eacl-demo.16/?utm_source=chatgpt.com "RAGAs: Automated Evaluation of Retrieval Augmented Generation - ACL Anthology"

[2]: https://github.com/beir-cellar/beir/wiki/Metrics-available?utm_source=chatgpt.com "Metrics available · beir-cellar/beir Wiki · GitHub"

[3]: https://www.nist.gov/publications/artificial-intelligence-risk-management-framework-generative-artificial-intelligence?utm_source=chatgpt.com "Artificial Intelligence Risk Management Framework: Generative Artificial Intelligence Profile | NIST"

[4]: https://arxiv.org/abs/2104.08663?utm_source=chatgpt.com "BEIR: A Heterogenous Benchmark for Zero-shot Evaluation of Information Retrieval Models"