DeepEval + Langfuse 构建高自定义 RAG 评测体系
核心定位与角色分工
DeepEval 是一款高度可定制的 LLM 应用评测框架,和 RAGAS 相比,核心优势是支持自定义业务规则、多维度扩展、灵活的评分 Prompt 配置、原生兼容安全合规类评测。搭配 Langfuse 全链路可观测底座,可实现「业务定制化分层评测 + 全链路可追溯 + 质量闭环运营」,尤其适合有强业务规则、合规要求高的企业级 RAG 场景。
工具分工
| 工具 | 推荐版本 | 核心定位 | 核心职责 |
|---|---|---|---|
| Langfuse | v2.42.0+ | 可观测与数据资产底座 | 全链路 Trace 埋点、数据集管理、Bad Case 沉淀、性能成本采集、权限审计 |
| DeepEval | v0.22+ | 自定义评测执行引擎 | 分层指标计算、LLM-as-Judge 评分、自定义业务指标、安全合规评测、版本对比 |
核心数据流
业务RAG系统 → Langfuse全节点Span埋点 → Trace落库 → 数据清洗提取 ↓(异步非侵入,不影响业务) DeepEval分层评测引擎 ↓ 标准指标计算 + 自定义业务规则校验 ↓ 结果回写Langfuse ↓ 看板 → 质量门禁 → Bad Case闭环 → 版本对比一、前置准备:埋点规范与数据打通
1. Langfuse 全节点埋点(复用标准规范)
和 RAGAS 方案的埋点规范完全通用,严格按「查询预处理→混合检索→上下文拼装→答案生成→输出校验→最终输出」全节点打独立 Span,每个节点完整记录输入输出,全程透传版本三元组。
核心要求:
hybrid_retriever(检索节点)必须记录完整召回片段内容,answer_generation(生成节点)必须记录输入上下文与输出回答,是分层评测的数据基础。
2. 数据字段映射
从 Langfuse 导出/拉取的 Trace 数据,只需做简单字段映射,即可转换为 DeepEval 评测数据集:
| DeepEval 数据集字段 | Langfuse 对应位置 | 说明 |
|---|---|---|
input | 根 Trace.input /query_preprocess输出 | 用户问题/预处理后查询 |
actual_output | answer_generation输出 /final_output输出 | 模型生成回答 |
expected_output | Langfuse Dataset 中标注的标准答案 | 可选,仅正确率/召回率需要 |
retrieval_context | hybrid_retriever节点输出 | 召回上下文片段列表 |
context | answer_generation节点输入上下文 | 生成层固定上下文 |
3. 裁判模型配置与校准
和 RAGAS 方案一致,LLM-as-Judge 必须先校准再批量使用:
- 用 Langfuse Dataset 管理 50~100 条人工标注校准集
- DeepEval 配置裁判模型(能力显著强于被测模型,推荐 Qwen3-Max、GPT-4o),
temperature=0.1 - 计算加权 Cohen’s Kappa 系数,≥0.75 为合格,低于则优化评分 Prompt、补充 Few-shot 边界案例
- DeepEval 原生支持自定义评分 Prompt,可针对中文场景、业务场景做本地化适配,灵活度高于 RAGAS
二、核心:三层分层评测实现
严格遵循分层解耦原则,自下而上逐层验证,每层控制单一变量,精准归因。
1. 检索层评测:量化召回质量
控制变量:固定检索策略与索引版本,独立评测检索效果,排除生成模型干扰。
对应 DeepEval 指标
| 指标类 | 核心指标 | 计算逻辑 | 业务意义 |
|---|---|---|---|
ContextPrecisionMetric | 上下文精确率 | LLM 实时判断每条召回片段是否与问题相关,计算相关片段占比 | 衡量检索噪音水平,精确率越低,噪音越多,越易引发幻觉 |
ContextRecallMetric | 上下文召回率 | 计算召回片段覆盖答案所需关键信息的比例 | 衡量漏检率,是回答质量的上限 |
数据来源
Langfusehybrid_retriever节点的输入(query)+ 输出(召回片段列表),零标注即可算精确率,有标注/伪标注可算召回率。
代码示例
fromdeepevalimportevaluatefromdeepeval.metricsimportContextPrecisionMetricfromdeepeval.test_caseimportLLMTestCasefromlangfuseimportLangfuse# 1. 从Langfuse拉取生产环境检索数据langfuse=Langfuse(public_key="your-key",host="https://your-langfuse-host")traces=langfuse.fetch_traces(tags=["prod","rag"],limit=100)# 2. 转换为DeepEval标准测试用例test_cases=[]trace_ids=[]fortraceintraces.data:retrieval_span=next(sforsintrace.spansifs.name=="hybrid_retriever")ifnotretrieval_span.output:continuetest_cases.append(LLMTestCase(input=trace.input,retrieval_context=retrieval_span.output))trace_ids.append(trace.id)# 3. 初始化检索评测指标precision_metric=ContextPrecisionMetric(model="qwen3-max",model_kwargs={"base_url":"https://your-model-endpoint/v1","temperature":0.1})# 4. 执行批量评测result=evaluate(test_cases=test_cases,metrics=[precision_metric],print_results=False)# 5. 输出整体结果print(f"上下文精确率:{result.overall_score:.2f}")2. 生成层评测:量化忠实度与幻觉
控制变量:固定输入召回上下文,独立评测生成效果,排除检索质量干扰。
对应 DeepEval 指标
| 指标类 | 核心指标 | 计算逻辑 | 业务意义 |
|---|---|---|---|
FaithfulnessMetric | 生成忠实度 | 原子声明拆解法,逐条判断事实是否有上下文支撑 | 直接对应幻觉率:幻觉率 = 1 - 忠实度 |
AnswerRelevancyMetric | 回答相关性 | 判断回答与用户问题的语义匹配度 | 衡量有没有答非所问、跑题 |
HallucinationMetric | 幻觉专项检测 | 专门针对无中生有、事实错误的深度检测 | 高风险场景强化校验 |
铁则
必须使用固定的标准上下文,禁止接入实时检索接口,否则变量不唯一,结果无法归因。
代码示例
fromdeepeval.metricsimportFaithfulnessMetric,AnswerRelevancyMetric# 构造生成层测试用例:上下文固定不变generation_cases=[]fortraceintraces.data:gen_span=next(sforsintrace.spansifs.name=="answer_generation")ifnotgen_span.outputor"contexts"notingen_span.input:continuegeneration_cases.append(LLMTestCase(input=trace.input,actual_output=gen_span.output,context=gen_span.input["contexts"]# 固定输入上下文))# 初始化指标faithfulness_metric=FaithfulnessMetric(model="qwen3-max")relevancy_metric=AnswerRelevancyMetric(model="qwen3-max")# 执行评测gen_result=evaluate(test_cases=generation_cases,metrics=[faithfulness_metric,relevancy_metric])print(f"生成忠实度:{gen_result.overall_score:.2f}")print(f"估算幻觉率:{1-gen_result.get_metric_score('faithfulness'):.2f}")3. 端到端评测:量化整体效果 + 自定义业务规则
DeepEval 核心优势:支持自定义业务指标,可将企业专属的业务规则、合规要求嵌入评测,这是标准 RAGAS 难以灵活实现的。
标准指标:AnswerCorrectnessMetric
对比最终回答与标准答案的事实一致性、完整性,衡量端到端正确率。
进阶:自定义业务指标
通过继承BaseMetric实现自定义评测逻辑,支持规则引擎 + LLM 评分混合模式,典型场景:
- 格式校验:回答必须包含指定字段、符合固定结构
- 业务规则:禁止承诺收益、必须提示风险、必须包含免责声明
- 合规校验:敏感词拦截、行业规范匹配
- 体验要求:语气友好、分点作答、符合客服规范
自定义业务指标代码示例
fromdeepeval.metricsimportBaseMetricfromdeepeval.test_caseimportLLMTestCaseclassBusinessComplianceMetric(BaseMetric):"""业务合规校验:必须包含风险提示,禁止保本承诺"""def__init__(self):super().__init__()self.threshold=1.0defmeasure(self,test_case:LLMTestCase):answer=test_case.actual_output has_risk="风险提示"inanswer has_forbidden=any(wordinanswerforwordin["保本","固定收益","稳赚"])self.success=has_riskandnothas_forbidden self.score=1.0ifself.successelse0.0self.reason="符合业务规则"ifself.successelse"违反合规要求:缺失风险提示或存在禁止表述"returnself.score三、组合归因与结果回写 Langfuse
1. 三维组合归因(和 RAGAS 方案逻辑完全对齐)
根据三层指标得分组合,自动定位根因,输出优化方向:
| 检索精确率 | 生成忠实度 | 端到端正确率 | 自动根因标签 | 优化优先级 |
|---|---|---|---|---|
| < 0.7 | ≥ 0.85 | 低 | bottleneck:retrieval | P0 |
| ≥ 0.85 | < 0.7 | 低 | bottleneck:generation | P0 |
| ≥ 0.85 | ≥ 0.85 | 低 | bottleneck:knowledge/business | P1 |
2. 结果回写与链路溯源
评测完成后,通过 Langfuse API 将指标、评分、根因标签回写到对应 Trace 中:
- 检索节点 Span:写入
context_precision得分、retrieval_level等级标签 - 生成节点 Span:写入
faithfulness得分、generation_level等级标签 - 根 Trace:写入综合质量分、
bottleneck_type根因标签
链路溯源:在 Langfuse 控制台按根因标签筛选,点击即可跳转对应 Trace,逐层回放 Span 输入输出,人工复核确认,无需复现问题。
3. Bad Case 沉淀闭环
- 自动筛选低得分 Trace,一键导入 Langfuse Dataset
- 人工复核标注根因与标准答案,补充进评测集
- 每次优化后自动回归验证,形成「发现→定位→沉淀→验证」的质量飞轮
四、工程化落地:自动化评测体系
1. 定时线上质量巡检
- 每日/每周自动从 Langfuse 拉取线上真实流量,抽样批量评测
- 监控核心指标趋势,跌破阈值自动告警,附带 Trace 跳转链接
- 输出质量周报,包含分层指标、根因分布、Top 问题类型
2. 版本迭代自动回归
- 知识库更新、Prompt 迭代、模型升级时,通过 Webhook 自动触发评测
- 智能增量选例:仅变更对应层级的测试集,评测效率提升 60% 以上
- 自动对比基线版本,输出优化收益报告,核心指标劣化≥2% 自动拦截
3. CI/CD 三级质量门禁
嵌入交付流水线,逐级管控:
- MR 阶段:生成层忠实度、检索精确率校验
- 测试环境:全量分层评测 + 业务合规校验
- 灰度发布:端到端正确率 + 线上抽样验证
4. 多维度质量看板
基于 Langfuse 原生看板 + DeepEval 导出数据,搭建:
- 核心质量大盘:分层指标实时值与趋势
- 根因分布看板:各瓶颈类型占比
- 合规专项看板:业务规则通过率、违规类型分布
- 版本对比看板:新旧版本指标对比,量化优化收益
五、DeepEval vs RAGAS 选型建议
两者底层埋点规范、Langfuse 底座、归因逻辑完全通用,可平滑切换,按需选择:
| 维度 | DeepEval | RAGAS |
|---|---|---|
| 自定义程度 | 极高,支持自定义指标、业务规则、评分Prompt | 标准框架,自定义灵活度低 |
| 指标覆盖 | 全,标准RAG指标+安全合规+自定义扩展 | 以标准RAG三层指标为主 |
| 中文适配 | 需自行优化Prompt,灵活度高 | 原生适配一般,调整空间小 |
| 上手难度 | 稍高,适合定制化场景 | 简单,标准流程,快速落地 |
| Agent 支持 | 原生支持工具调用、任务规划评测 | 支持较弱 |
| 适用场景 | 企业级、强业务规则、高合规要求、Agent扩展场景 | 标准RAG分层评测、快速落地、通用场景 |
六、最佳实践与避坑
最佳实践
- 埋点规范统一:和 RAGAS 方案共用一套埋点规范,数据同源,评测引擎可平滑切换
- 先校准后批量:LLM-as-Judge 必须先校准,Kappa ≥ 0.75 再批量使用
- 业务规则前置:把核心业务规则做成自定义指标,纳入质量门禁,比事后排查效率高
- 分层优先:永远先分层定位问题,再端到端验证,排查效率提升数倍
- 异步非侵入:评测链路异步消费 Trace,不影响线上业务性能与可用性
常见避坑
- ❌ 自定义指标过多过杂:核心指标不超过5个,避免指标冗余、重点失焦
- ❌ 裁判模型能力不足:用小模型判大模型,再怎么校准都偏差极大
- ❌ 用实时检索测忠实度:变量不唯一,结果无法归因
- ❌ 只看总分不看个案:自定义规则场景必须抽样复核异常案例,避免误判
- ❌ 评测结果不回写:只评测不沉淀,无法形成质量闭环