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 评估

维度 传统 ML RAG
输出 结构化(类别/数值) 自然语言文本
评估方式 精确率/F1 等公式 LLM-as-judge / Embedding
难点 类别不平衡 主观性、多面性
工具 sklearn.metrics RAGAS / 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 生产监控的可观察性 行车记录仪
DeepEval pytest 风格的 CI 评估 单元测试
LlamaIndex Eval LlamaIndex 内置 A/B 测试 对照实验

3.2 核心特征对比

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

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

评估维度 RAGAS TruLens DeepEval LlamaIndex Eval
忠实度 Faithfulness Groundedness FaithfulnessMetric FaithfulnessEvaluator
答案相关性 Answer Relevancy Answer Relevance AnswerRelevancyMetric RelevancyEvaluator
上下文精确度 Context Precision Context Relevance ContextualPrecisionMetric (无直接对应)
上下文召回 Context Recall - ContextualRecallMetric (无直接对应)
答案正确性 Answer Correctness - AnswerCorrectnessMetric CorrectnessEvaluator

💡 重点洞察字段名不同但含义一样。比如 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
Faithfulness NLI(自然语言推理)
Answer Relevancy 反向问题生成 + 余弦相似度
Context Precision Precision@k 加权
Context Recall NLI(反向,验证参考答案)
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. 跑 pytestpytest 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 才是工程。

必读论文

官方文档

资源 链接
RAGAS https://docs.ragas.io
TruLens https://www.trulens.org/
DeepEval https://docs.confident-ai.com/
LlamaIndex Evaluation https://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技术的奥秘。

更多推荐