RAG 评估全家桶|四大框架对比 + 核心指标算法揭秘 + 生产实战 Recipe,一篇打通评估全链路

导读:你改了 embedding 模型,"应该"效果更好吧?你加了 reranker,"应该"更准吧?你把 chunk_size 从 500 改到 1024,"应该"更全吧?所有"应该"都是猜测,没有数据支撑。RAG 系统没有评估 = 玄学开发,本文带你从 0 到 1打通评估全链路——4 大维度、4 大框架、5 大指标算法、4 套生产 Recipe、10 大常见坑。

阅读时长:约 30 分钟。适合有 RAG 基础、想从"能跑"走向"能用"的工程师。


一、为什么 RAG 必须要评估?

1.1 没有评估的 RAG 是"玄学"

工程师 A: 我换了 embedding 模型,应该效果更好吧?
工程师 B: 我加了 reranker,应该更准吧?
工程师 C: 我把 chunk_size 从 500 改到 1024,应该更全吧?

问题:所有"应该"都是猜测,没有数据支撑。

1.2 评估解决的核心问题

问题不评估时评估后
改动是否引入回归?拍脑袋量化对比
不同模型哪个更好?看 demo多维度打分
线上 RAG 表现如何?等用户投诉主动发现
prompt 改了影响多大?心里没数A/B 对比

1.3 RAG 评估 vs 传统 ML 评估

维度传统 MLRAG
输出结构化(类别/数值)自然语言文本
评估方式精确率/F1 等公式LLM-as-judge / Embedding
难点类别不平衡主观性、多面性
工具sklearn.metricsRAGAS / TruLens / DeepEval

二、RAG 评估的四大维度

2.1 全图速览

                  用户问题 (query)
                       │
       ┌───────────────┼───────────────┐
       │               │               │
       ▼               ▼               ▼
   ① 检索阶段      ② 生成阶段      ③ 业务定制
       │               │               │
   ┌───┴───┐       ┌───┴───┐       │
   │上下文  │       │答案   │       │
   │召回率  │       │忠实度 │       │
   │上下文  │       │答案   │       │
   │精确度  │       │相关性 │       │
   └───────┘       │答案   │       │
                   │正确性 │       │
                   └───────┘       │
                                   │
                              ④ 安全/合规
                                   │
                              毒性/偏见/幻觉

2.2 四大维度速查表

维度评估什么防什么典型指标
检索质量上下文好不好检索不到 / 检索噪声Context Precision / Recall
生成忠实度答案有没有瞎编幻觉Faithfulness / Groundedness
生成相关性答案有没有跑题答非所问Answer Relevancy
生成正确性答案对不对事实错误Correctness / Similarity

2.3 失败案例 → 对应维度

失败现象对应评估维度
用户问 A,检索到 B(无关文档)上下文精确度
答案漏了关键信息上下文召回率
答案里有文档没说的内容忠实度(幻觉)
答案东拉西扯不切题答案相关性
答案和参考答案不一致答案正确性

三、四大主流框架对比

3.1 框架定位

框架一句话定位核心比喻
RAGAS离线评估的事实标准考试评分
TruLens生产监控的可观察性行车记录仪
DeepEvalpytest 风格的 CI 评估单元测试
LlamaIndex EvalLlamaIndex 内置 A/B 测试对照实验

3.2 核心特征对比

维度RAGASTruLensDeepEvalLlamaIndex Eval
集成度独立独立独立与 LlamaIndex 绑定
API 风格函数式装饰器类 unittest类 LlamaIndex
数据来源dataset在线请求测试用例query_engine 输出
典型场景模型选型生产监控CI/CD配置调优
可视化pandasStreamlitConfident AIpandas
学习曲线低中中中(依赖 LlamaIndex)

3.3 指标对应表(同名不同算法)

评估维度RAGASTruLensDeepEvalLlamaIndex Eval
忠实度FaithfulnessGroundednessFaithfulnessMetricFaithfulnessEvaluator
答案相关性Answer RelevancyAnswer RelevanceAnswerRelevancyMetricRelevancyEvaluator
上下文精确度Context PrecisionContext RelevanceContextualPrecisionMetric(无直接对应)
上下文召回Context Recall-ContextualRecallMetric(无直接对应)
答案正确性Answer Correctness-AnswerCorrectnessMetricCorrectnessEvaluator

💡 重点洞察:字段名不同但含义一样。比如 RAGAS 的 ground_truth = DeepEval 的 expected_output = LlamaIndex 的 reference,本质都是"标准答案"。


四、核心心智模型

4.1 RAG 评估的目标函数

RAG 系统质量 = 检索质量 × 生成质量 × 业务定制

检索质量 = α₁·Precision + α₂·Recall + α₃·EntitiesRecall
生成质量 = β₁·Faithfulness + β₂·Relevancy + β₃·Correctness
业务定制 = γ₁·Safety + γ₂·Politeness + ...

权重 α, β, γ 由业务决定(客服 vs 医疗 vs 法律差异巨大)

4.2 评估的三个阶段

开发期(设计/调优)
─────────────────
· 数据集:固定测试集(DatasetGenerator 自动生成)
· 工具:LlamaIndex Eval(A/B 对比)、RAGAS(量化)
· 目标:找到最优配置(chunk_size、embedding、模型等)

上线前(验收/回归)
─────────────────
· 数据集:业务专家标注的金标准集
· 工具:DeepEval(pytest 集成)、RAGAS(深度评估)
· 目标:保证 PR 不引入回归

生产期(监控/调试)
─────────────────
· 数据集:真实用户请求(采样)
· 工具:TruLens(实时追踪)、Confident AI(云看板)
· 目标:发现线上问题、追踪某次失败

4.3 评估的成本曲线

评估准确度
    ▲
    │
1.0 │                ★★★ 人工评估(成本极高)
    │              ★
    │            ★    LLM-as-Judge(gpt-4)
    │          ★
    │        ★      LLM-as-Judge(gpt-4o-mini)
    │      ★
    │    ★
    │  ★            Embedding 相似度
    │★
    │
    └─────────────────────────────────► 评估成本

关键洞察:评估本身也要 ROI——不是越准越好,而是"够用就好"。


五、核心指标的数学本质

这一节是整篇文章最硬核的部分。

5.1 四大指标的算法分类

指标算法分类是否需 LLM是否需 Embedding
FaithfulnessNLI(自然语言推理)✅❌
Answer Relevancy反向问题生成 + 余弦相似度✅✅
Context PrecisionPrecision@k 加权✅❌
Context RecallNLI(反向,验证参考答案)✅❌
Semantic Similarity余弦相似度❌✅

5.2 Faithfulness 的 NLI 本质

NLI(Natural Language Inference)任务:
给定前提 P 和假设 H,判断关系:
  · Entailment(推出):P → H 成立
  · Contradiction(矛盾):P → H 不成立
  · Neutral(中立):P 推不出 H

Faithfulness 应用:
  · 前提 P = 检索到的上下文
  · 假设 H = 答案的每条原子陈述
  · 判断:上下文能否推出这条陈述?
  
公式:Faithfulness = |Entailment| / |总陈述|

5.3 Answer Relevancy 的反向问题生成

这是 RAGAS 最巧妙的设计:

正向比较:原问题 vs 答案
  → 短问题 vs 长答案 → 向量分布不同 → 相似度天然偏低

反向比较:让 LLM 根据答案反推 N 个问题
  Q_orig = "孙悟空武器?"
  Q_gen  = ["武器是什么?", "用什么兵器?", "金箍棒是谁的?"]
  
  sim = mean([cos(embed(Q_orig), embed(q_i)) for q_i in Q_gen])
  
  → 同维度比较,更稳定
  → 多个反向问题求平均,降低方差

5.4 Context Precision 的 Mean Reciprocal Rank

检索结果:[doc1, doc2, doc3, doc4, doc5]
相关性:  [✅,    ❌,    ✅,    ❌,    ❌]

Precision@1 = 1/1 = 1.0
Precision@2 = 1/2 = 0.5
Precision@3 = 2/3 = 0.67
...

加权(只算 relevant 的位置):
Context Precision = (1.0/1 + 0.67/3) / |relevant| 
                  = (1.0 + 0.22) / 2
                  = 0.61

5.5 余弦相似度

两个向量 v⃗₁, v⃗₂ 的余弦相似度:
cos(θ) = (v⃗₁ · v⃗₂) / (|v⃗₁| × |v⃗₂|)

取值范围:[-1, 1]
  · 1 = 完全同向(语义相同)
  · 0 = 正交(语义无关)
  · -1 = 反向(语义相反)

工程上通常归一化到 [0, 1]:(cos + 1) / 2

六、LLM-as-Judge 工程化

6.1 LLM 当裁判的 5 种姿势

姿势原理代表
直接打分“给这个答案 1-10 分”朴素 LLM-as-Judge
二元判断“这个文档相关吗?是/否”NLI 风格
CoT 推理“先思考再打分”GEval、TruLens
反向生成“根据答案反推问题”RAGAS Answer Relevancy
Pairwise 对比“答案 A 和 B 哪个更好?”LlamaIndex PairwiseComparisonEvaluator

6.2 LLM 裁判的 5 大偏见

问题现象解决方案
位置偏见Pairwise 时偏好第一个随机交换位置,求平均
冗长偏见偏好长答案提示词强调"长度不重要"
格式不稳定输出不是 JSON用 function calling / JSON mode
裁判能力不足gpt-3.5 评 gpt-4,分数虚高评估器 LLM 比生成器更强
方差大同一输入多次评分不一致多次采样取平均

6.3 ⚠️ 评估器 LLM 的铁律

铁律:评估器 LLM 应该 ≥ 生成器 LLM

生成用 qwen-turbo → 评估用 qwen-plus / qwen-max
生成用 gpt-3.5   → 评估用 gpt-4 / gpt-4o
生成用 7B 开源   → 评估用 70B 开源 或 GPT-4

反模式:
  · 评估和生成同模型(裁判不客观)
  · 评估用弱模型(评不出细微差异)
  · 评估用太强模型(成本爆炸,但收益递减)

七、Answer Relevancy 在短答案上失效(深度避坑)

⚠️ 这是工程中最容易踩的坑——RAGAS Answer Relevancy 的算法软肋。

7.1 失效原理

Answer Relevancy 的隐含假设:答案里包含足够多的"语义信号",让 LLM 能反推出问题。

长答案(正常工作):
  Q: "孙悟空武器?"
  A: "孙悟空使用金箍棒,重 13500 斤,能大能小。"
  LLM 反推: ["孙悟空武器是什么?", "金箍棒多重?", ...]
  → 都和原问题高度相关 ✅

短答案(是/否)失效:
  Q: "公司支持退款吗?"
  A: "是"
  LLM 反推: ???
  → 没有动词/名词/上下文线索 → 只能"猜"问题 ❌

Embedding 相似度计算:
  embed("公司支持退款吗?") vs embed("X 是否成立?")
  → 相似度可能很低(虽然语义对,但词汇不同)
  → Answer Relevancy 给极低分(误判"答非所问")

7.2 会失效的答案类型

答案类型例子失效程度
纯是/否“是” / “否” / “yes” / “no”🔴 严重失效
极短数字“3” / “999”🔴 严重失效
单词答案“孙悟空” / “北京”🟡 中度失效
多选答案“A 和 B”🟡 中度失效
短列表“苹果、香蕉、橘子”🟢 轻微
完整句子“孙悟空使用金箍棒…”✅ 正常工作

7.3 4 种解决方案

方案 1:换算法(推荐)—— 用直接 LLM 判断

# DeepEval 的 AnswerRelevancyMetric 不走反向问题生成
from deepeval.metrics import AnswerRelevancyMetric
from deepeval.test_case import LLMTestCase

test_case = LLMTestCase(
    input="公司支持 7 天无理由退款吗?",
    actual_output="是",  # ✅ 短答案也能正确评估
)
metric = AnswerRelevancyMetric(threshold=0.7)
metric.measure(test_case)
# LLM 直接判断"是"回答了"是否"问题,分数正常

方案 2:用 Answer Correctness(需要 ground_truth)

from ragas.metrics import AnswerCorrectness

data = {
    "question":     ["公司支持 7 天无理由退款吗?"],
    "answer":       ["是"],
    "ground_truth": ["是,公司支持 7 天无理由退款。"],
    "contexts":     [["公司政策: 支持 7 天无理由退款..."]],
}
# AnswerCorrectness 通过 LLM 拆解 + 实体匹配判断
# 不受答案长度影响

方案 3:用 TruLens 的 relevance(不走反向问题生成)

from trulens.core import Feedback, Select
from trulens.providers.openai import OpenAI

provider = OpenAI()
f_relevance = Feedback(
    provider.relevance_with_cot_reasons,
    name="Relevance"
).on_input().on_output()

方案 4:组合策略(工业界最常用)

# 不依赖单一指标,组合多个指标交叉验证
metrics = [
    Faithfulness(llm=llm),
    AnswerRelevancy(llm=llm, embeddings=emb),       # 长答案适用
    AnswerCorrectness(llm=llm, embeddings=emb),     # 需要 ground_truth
    ContextRelevancy(llm=llm),
]

# 决策逻辑:
# · Faithfulness 高 + Answer Relevancy 低 + 答案短
#   → 可能是"是/否"型,Answer Relevancy 失效,看 Correctness

7.4 业务场景的影响

客服 RAG 系统的常见问题分布:

30% ── 是否类问题("能不能"、"有没有"、"是否")   ← Answer Relevancy 失效区
25% ── 列举类问题("有哪些"、"分别是什么")
20% ── 步骤类问题("怎么操作"、"如何退款")
15% ── 数字类问题("几天"、"多少钱"、"几个")
10% ── 实体类问题("谁能"、"哪个部门")

30% 的"是否"类问题——客服场景里 Answer Relevancy 对 1/3 的问题不可靠。

业务场景Answer Relevancy 适用性
客服 RAG(大量是否问题)🔴 不推荐单独用
法律咨询(长答案解释)✅ 适用
医疗问答(症状描述)✅ 适用
API 文档查询(短答案多)🔴 不推荐
产品比较(优缺点列表)🟡 中等

7.5 一句话避坑

不要单独依赖 Answer Relevancy 做 go/no-go 决策,尤其是客服、API 文档等短答案场景。组合使用 Faithfulness + Correctness 交叉验证才是工程正解。


八、ground_truth 详解:评估里最贵的东西

8.1 ground_truth 是什么?

ground  = 地面、底座、基础
truth   = 真相、事实
─────────────────────
ground truth = 地面真相 → "基准事实" / "标准答案" / "金标准"

词源故事(帮助记忆):来自遥感 / 测绘领域。1970s 卫星遥感时,卫星从太空拍地球推测"这块地是森林",但卫星推测可能错。怎么验证?派人实地去看 → “走到 ground(地面)上看 truth(真相)” → ground truth = 实地核实的真值。后来 AI 圈沿用。

8.2 在 RAG 评估数据中的位置

# 一个完整的 RAG 评估数据点
{
    "question":      "孙悟空的武器是什么?",          # 用户问题
    "answer":        "孙悟空使用金箍棒,重 13500 斤。",  # RAG 系统生成的答案
    "contexts":      ["金箍棒是孙悟空的武器..."],     # 检索到的文档
    "ground_truth":  "孙悟空的武器是金箍棒。"           # ← 人工写的"标准答案"
}

ground_truth 就是业务专家针对这个问题,手工写出的"理想答案"——所有评估"对错"的指标都拿它当参照物。

8.3 不同指标对 ground_truth 的依赖

指标评估什么需要 ground_truth?
Faithfulness答案 vs 上下文❌ 不需要
Answer Relevancy答案 vs 问题❌ 不需要
Context Precision上下文 vsground_truth✅需要
Context Recall上下文 vsground_truth✅需要
Answer Correctness答案 vsground_truth✅需要

关键洞察:所有"判断对错"的指标都需要 ground_truth。没有它,只能判断"自洽性",判断不了"事实正确性"。

8.4 标注成本困境

准备 100 条评估数据集的成本:

方案 A:用 LLM 自动生成
  · 时间:5 分钟 / 成本:~$1
  · 质量:参差不齐(问题太简单/重复)

方案 B:用 DatasetGenerator(LlamaIndex)
  · 时间:30 分钟 / 成本:~$5
  · 质量:中等(LLM 生成 + 人工筛)

方案 C:业务专家手工标注
  · 时间:5-10 小时 / 成本:~$200-500
  · 质量:高(业务知识 + 准确答案)

💡 4 个脚本看起来只评估生成阶段的根本原因:标注成本太高,脚本作者做了取舍,不是框架本身局限。


九、生产组合策略:4 套 Recipe

⚠️ 重要原则:评估方案应该由项目本身的规模和特性决定,而不是由团队大小或预算决定。

9.1 选型的 5 个核心维度

  1. 知识库规模:XS(<1k 文档)→ XL(>100 万)
  2. 查询量 QPS:极低(<100/天)→ 极高(>100k/天)
  3. 业务关键性(最重要 ⭐):L1 Demo / L2 内部工具 / L3 C 端产品 / L4 高风险(医疗法律金融)
  4. 合规要求:公开 / 内部 / 敏感 / 极敏感(强制私有)
  5. 数据复杂度:纯文本 / PDF / 扫描件 / 跨语言

9.2 Recipe A:小型项目(XS-S 知识库 + L1-L2 业务)

项目特征:
  · 知识库: XS-S(< 1万文档)
  · QPS: 极低-低(< 1k/天)
  · 业务关键性: L1-L2(demo 或内部工具)

典型场景: 个人项目、PoC、技术验证、部门小工具、产品 FAQ

评估方案:
  · 工具栈: RAGAS(离线评估)
  · 测试集: 50-100 条人工标注
  · 主要指标: Faithfulness + Answer Relevancy
  · 频次: 每周 1 次完整评估
  · 评估 LLM: qwen-plus 或 gpt-4o-mini

9.3 Recipe B:中型项目(M 知识库 + L3 业务)⭐ 最常见

项目特征:
  · 知识库: M(1万-10万文档)
  · QPS: 中(1k-10k/天)
  · 业务关键性: L3(C 端产品,错答影响用户体验)

典型场景: 客服系统、产品助手、企业内部搜索、SaaS AI 功能

评估方案(4 工具协作):
  · 开发期: LlamaIndex Eval 做 A/B(chunk_size、splitter 调优)
  · 离线评估: RAGAS 完整 4 指标(含 Context Precision/Recall)
  · CI/CD: DeepEval 集成 pytest,PR 阻断
  · 生产监控: TruLens 实时追踪 + Streamlit 看板
  · 测试集: 500+ 条人工标注
  · 评估 LLM: qwen-max 或 gpt-4o

9.4 Recipe C:高风险项目(L4 业务,强制合规)

项目特征:
  · 知识库: L-XL(> 10万文档)
  · 业务关键性: L4(医疗/法律/金融,错答有法律责任)
  · 合规: 敏感/极敏感 → 强制私有部署

典型场景: 医疗诊断辅助、法律咨询、金融分析、政务问答

评估方案(全栈 + 合规闭环):
  · 工具栈: RAGAS + DeepEval + TruLens + LlamaIndex Eval
  · 数据集: 1000+ 条业务专家标注
  · 业务定制指标: GEval / AspectCrit(如"建议安全性"、"免责声明")
  · 双轨评估: LLM 评估 + 人工抽样复核(每月 5-10%)
  · 合规审计: 每月生成评估报告,可追溯
  · 在线 A/B: 持续对比模型版本(影子流量)
  · 业务专家闭环: 错答案例 → 标注 → 反哺训练

9.5 Recipe D:超大规模项目(XL 知识库 + 极高 QPS)

项目特征:
  · 知识库: XL(> 100万文档)
  · QPS: 极高(> 100k/天)
  · 复杂度: 极复杂(多模态、跨语言)

典型场景: 搜索引擎、行业垂直搜索(法律案例库)、跨企业联合知识库

评估方案(自动化管道):
  · 工具栈: 全栈 + 自动化编排(Airflow / Kubeflow)
  · 在线 A/B + 影子流量(shadow traffic)
  · 实时指标监控 + 异常告警(Prometheus + Grafana)
  · 业务闭环: 用户反馈 → 隐式标注 → 模型迭代
  · 分布式评估(多机并发,Ray / Spark)
  · 持续学习:每周模型微调

9.6 反模式警告

❌ 反模式 1: 大团队做 demo 项目,硬上 Recipe C
   问题: 浪费资源,demo 不需要复杂评估

❌ 反模式 2: 小团队做医疗 RAG,用 Recipe A
   问题: 合规风险,错答可能导致法律责任

❌ 反模式 3: 用预算倒推方案
   问题: 预算不够时砍评估,等于裸奔上线

✅ 正确: 先看业务关键性 → 再看项目规模 → 推导需要的工具/团队/预算

十、10 大常见坑与避坑

10.1 评估器和生成器同模型

# ❌ 反模式:自己评自己
gen_llm = ChatOpenAI(model="gpt-3.5")
eval_llm = ChatOpenAI(model="gpt-3.5")  # 同模型评估
# 问题:分数虚高,看不出问题

# ✅ 正确:评估器更强
gen_llm = ChatOpenAI(model="gpt-3.5")
eval_llm = ChatOpenAI(model="gpt-4")  # 至少强一档

10.2 RAGAS 字段名搞错

# ❌ 错:用 input/output 而不是 question/answer
data = {"input": [...], "output": [...], "ground_truth": [...]}

# ✅ 对:用 RAGAS 约定的字段名
data = {
    "question": [...],
    "answer": [...],
    "contexts": [[...]],
    "ground_truth": [...],
}

10.3 contexts 字段类型错

# ❌ 错:contexts 是字符串列表
data = {"contexts": ["doc1", "doc2"]}  # RAGAS 报错

# ✅ 对:contexts 是 List[List[str]]
data = {"contexts": [["doc1", "doc2"]]}  # 外层是问题维度

10.4 TruLens 漏贴 @instrument

class RAG:
    def retrieve(self, query):  # ❌ 漏贴 @instrument
        ...
  
    @instrument
    def query(self, query):
        ctx = self.retrieve(query)  # retrieve 调用不被记录
        # → Feedback 的 selector 找不到数据

# ✅ 每个方法都要贴
class RAG:
    @instrument
    def retrieve(self, query): ...

10.5 DeepEval 不设阈值

# ❌ 默认 threshold=0,永远 successful=True
metric = AnswerRelevancyMetric()

# ✅ 显式设阈值
metric = AnswerRelevancyMetric(threshold=0.7)

10.6 LlamaIndex 分数范围混淆

# ❌ 直接比较不同范围
if faithfulness > semantic_similarity:  # 1-5 vs 0-1
    # 永远成立,无意义

# ✅ 归一化后再比
faithfulness_norm = (faithfulness - 1) / 4  # 1-5 → 0-1

10.7 异步事件循环嵌套

# ❌ Jupyter 里直接 asyncio.run
asyncio.run(main())  # RuntimeError

# ✅ 加 nest_asyncio
import nest_asyncio
nest_asyncio.apply()
asyncio.run(main())

10.8 LLM 输出格式不稳定

# ❌ 依赖 LLM 输出 JSON,偶尔失败
prompt = "请输出 JSON: {score: 0-1, reason: ...}"

# ✅ 用 function calling / structured output
llm = ChatOpenAI(model="gpt-4o-mini")
structured_llm = llm.with_structured_output(EvalResult)

10.9 评估数据集泄露到 prompt

# ❌ 把 ground_truth 塞进 RAG 的 prompt(作弊)
prompt = f"问题: {q}\n参考答案: {gt}\n请基于参考答案回答"
# → Faithfulness 必然满分(作弊)

# ✅ RAG 系统不应该看到 ground_truth
prompt = f"问题: {q}\n上下文: {contexts}\n请回答"
# ground_truth 只用于评估阶段

10.10 Answer Relevancy 在短答案失效

(详见第七章)—— 客服、API 文档等短答案场景不要单独依赖 Answer Relevancy。


十一、10 个面试高频题

Q1:为什么需要 RAG 评估?不能直接看 demo 吗?

答:

  • Demo 是 cherry-picking(挑好看的),不具代表性
  • 改动效果需要量化对比,不能凭感觉
  • 线上失败案例需要追溯根因
  • 不同模型/prompt 的对比需要统一指标
  • CI/CD 自动化必须有可断言的指标

Q2:Faithfulness 和 Answer Relevancy 有什么区别?

答:

  • Faithfulness:答案 vs 上下文——答案有没有瞎编
  • Answer Relevancy:答案 vs 问题——答案有没有跑题

举例:问"孙悟空武器?“,答"猪八戒用钉耙”

  • Faithfulness 高(如果上下文有猪八戒)
  • Answer Relevancy 低(答非所问)

Q3:RAGAS、TruLens、DeepEval、LlamaIndex Eval 怎么选?

答:

  • RAGAS:离线评估首选,模型选型 / A/B 测试
  • TruLens:生产监控首选,实时追踪每次调用
  • DeepEval:CI/CD 首选,pytest 风格可断言
  • LlamaIndex Eval:LlamaIndex 项目内做配置调优

理想方案:组合使用——开发期 LlamaIndex Eval、离线 RAGAS、CI 用 DeepEval、生产用 TruLens。

Q4:LLM-as-Judge 有什么问题?怎么解决?

答:5 大偏见:

  1. 位置偏见:Pairwise 时偏好第一个 → 随机交换位置
  2. 冗长偏见:偏好长答案 → 提示词强调长度不重要
  3. 格式不稳定:JSON 偶尔出错 → 用 function calling
  4. 裁判能力不足:弱模型评强模型 → 评估器 ≥ 生成器
  5. 方差大:同输入多次评分不一致 → 多次采样取平均

Q5:为什么 Answer Relevancy 要反向生成问题?

答:直接对比问题和答案的 embedding 不靠谱——短问题 vs 长答案的向量分布天然不同,相似度总是偏低。

反向生成把答案翻译成问题,统一到同一语义空间比较;同时生成 N 个反向问题求平均,降低单次 LLM 输出的方差。

Q6:Context Precision 和 Context Recall 的区别?

答:

  • Context Precision:检索到的文档排序好不好(相关文档排第几)
  • Context Recall:检索到的文档全不全(关键信息有没有召回)

举例:库里有 10 篇相关文档

  • 检索 5 篇,3 篇相关排在前 3 → Precision 高,Recall 低(漏 7 篇)
  • 检索 20 篇,10 篇相关排在后 10 → Precision 低,Recall 高(都召回)

Q7:评估 100 条数据大概花多少钱?

答:

  • RAGAS + gpt-4o-mini:~$1-3
  • RAGAS + gpt-4:~$30-100
  • DeepEval + gpt-4o-mini:~$0.5-2
  • TruLens + gpt-4(实时):每千次请求 ~$5-15
  • LlamaIndex Eval + qwen-plus:~¥10-30

省钱策略:分层评估(粗筛用便宜模型)、缓存评估结果、增量评估。

Q8:什么是评估器 LLM 的"铁律"?

答:评估器 LLM 应该 ≥ 生成器 LLM。

  • 生成用 gpt-3.5 → 评估用 gpt-4
  • 生成用 qwen-plus → 评估用 qwen-max
  • 生成用 7B 开源 → 评估用 GPT-4 或 70B

原因:弱模型评强模型,无法识别细微差异,分数虚高且方差大。

Q9:DeepEval 怎么集成到 CI/CD?

答:

  1. 写 pytest 文件:用 LLMTestCase + assert_test
  2. 加阈值:metric = XxxMetric(threshold=0.7)
  3. 跑 pytest:pytest tests/eval/
  4. CI 配置:GitHub Actions 加 pytest 步骤
  5. PR 阻断:分数 < 阈值则 fail,自动阻止合并
  6. (可选) 上传 Confident AI 看可视化

Q10:ground_truth 是什么?为什么重要?

答:ground_truth = 业务专家手写的"标准答案",是评估"对错"的参照物。

没有 ground_truth:只能评"答案自洽性"(Faithfulness / Answer Relevancy)
有 ground_truth:能评"答案正确性"(Correctness / Context Recall)

关键洞察:所有"判断对错"的指标都需要 ground_truth。它标注成本最高、最难获得,但价值最大。


十二、总结

回到开头的核心问题,本文给出了完整解法:

痛点解决方案
改动是否引入回归?量化对比(RAGAS / DeepEval)
不同模型哪个更好?多维度打分(4 大指标)
线上 RAG 表现如何?实时追踪(TruLens)
prompt 改了影响多大?A/B 对比(LlamaIndex Eval)

核心心智模型

RAG 系统质量 = 检索质量 × 生成质量 × 业务定制

检索质量 = α₁·Precision + α₂·Recall
生成质量 = β₁·Faithfulness + β₂·Relevancy + β₃·Correctness
业务定制 = γ₁·Safety + γ₂·Politeness + ...

权重 α, β, γ 由业务决定(客服 vs 医疗 vs 法律差异巨大)。

最重要的认知

评估不是 RAG 的"附加品",而是 RAG 工程化的基石。没有评估的 RAG 是玄学,有评估的 RAG 才是工程。

必读论文

官方文档

资源链接
RAGAShttps://docs.ragas.io
TruLenshttps://www.trulens.org/
DeepEvalhttps://docs.confident-ai.com/
LlamaIndex Evaluationhttps://docs.llamaindex.ai/en/stable/module_guides/evaluating/

写在最后:RAG 评估是工程化的"最后一公里"——没有它,你的所有改动都是赌运气;有了它,每一次优化都能被验证。希望这篇笔记能帮你建立完整的评估体系。

如果觉得有用,点赞👍收藏⭐关注三连支持一下,这是我持续分享的动力。


📌 标签建议:RAG LLM RAGAS TruLens DeepEval LlamaIndex 大模型评估 LLM-as-Judge 人工智能 Python

📢 下一篇预告:《从 0 到 1 搭建生产级 RAG:成本、延迟、可靠性的三角权衡》——敬请关注。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐