☰
Langfuse 导出 JSON 数据用于 RAG 评测方案
2026/10/11 6:04:26 网站建设 项目流程

Langfuse 导出 JSON 数据用于 RAG 评测方案

Langfuse 导出 JSON 数据用于 RAG 评测比人工构造测试集更具业务价值的评测数据源。Langfuse 导出的 JSON 包含了真实线上交互的全链路 Trace 数据,天然匹配 RAG 分层评测方法论,尤其适合生成层忠实度、检索层精确率的零标注自动化评测,以及线上真实质量巡检、Bad Case 闭环沉淀,完美解决「离线评测全达标、线上效果差」的行业通病。

核心优势:数据来自真实用户请求、覆盖真实业务场景、无需人工构造测试集、可直接用于版本效果验证与线上质量监控。


一、Langfuse 导出 JSON 的核心可用字段

Langfuse 导出的 JSON 为标准 Trace 结构,包含完整的链路节点信息,只需做字段映射即可直接喂给 RAGAS / EvalScope 做评测。

标准导出结构

{"data":[{"id":"trace_xxx","input":"用户原始问题","output":"最终回答","metadata":{"version":"v1.2.3","env":"production"},"tags":["prod","rag"],"spans":[{"name":"query_rewrite","input":"用户原始问题","output":"改写后查询","type":"llm"},{"name":"hybrid_retriever","input":"改写后查询","output":["片段1内容","片段2内容","片段3内容"],"type":"retrieval"},{"name":"answer_generation","input":{"query":"xxx","contexts":["xxx"]},"output":"生成的回答","type":"llm"}],"totalCost":0.002,"latency":1.23}]}

RAG 评测核心字段映射

RAG 评测所需字段Langfuse 对应位置说明
user_input根 Trace.input / query_rewrite 节点.output用户原始问题或改写后查询
retrieved_contextshybrid_retriever / retrieval 节点.output召回的上下文片段列表
responseanswer_generation 节点.output / 根 Trace.output模型生成的最终回答
reference无(需额外标注/伪标注)标准答案,仅正确率/召回率需要
辅助字段trace_id、version、latency、totalCost版本追踪、性能成本分析

前提:你的 RAG 系统必须按之前的规范做了节点级 Span 埋点,检索、生成节点分别打独立 Span,命名规范统一。


二、分层评测落地方案

完全匹配分层解耦评测方法论,不同层级对应不同的数据用法,从「零标注天然支持」到「补充标注扩展」。

第一层:生成层评测(零标注,性价比最高)

核心价值

完全不需要任何人工标注,直接用 Langfuse 里的真实上下文+真实回答,计算生成忠实度与相关性,是线上幻觉管控的最佳方案。

对应指标
  • Faithfulness(生成忠实度):衡量回答是否基于召回上下文,有没有幻觉
  • AnswerRelevancy(回答相关性):衡量回答是否和问题相关,有没有跑题
实现逻辑
  1. 从导出 JSON 中提取每条 Trace 的retrieved_contexts+response+user_input
  2. 直接构造 RAGAS 生成层评测数据集
  3. 批量计算忠实度、相关性,输出整体分布与低分案例
业务意义
  • 监控线上真实幻觉率
  • 定位幻觉高发的问题类型
  • 验证 Prompt 优化、模型升级后的真实效果

第二层:检索层评测(零标注可做精确率,扩展可做召回率)

1. 零标注:上下文精确率(ContextPrecision)
  • 实现逻辑:提取user_input+retrieved_contexts,用 RAGAS 自动判断每个片段是否相关,计算精确率
  • 业务意义:衡量线上真实检索的噪音水平,有没有召回大量无关内容
2. 扩展:上下文召回率(ContextRecall)
  • 实现逻辑:用强模型基于完整知识库做伪标注,或补充少量人工标注,作为标准相关片段
  • 业务意义:评估线上真实召回的漏检率

第三层:端到端评测(组合评估+扩展正确率)

1. 零标注:健康度组合评估

通过「检索精确率 + 生成忠实度 + 回答相关性」组合判断整体质量健康度,无需标注。

2. 扩展:答案正确率(AnswerCorrectness)
  • 实现逻辑:伪标注法(强模型生成标准答案)或抽样人工标注
  • 业务意义:评估线上真实回答的正确率

三、完整操作步骤(含代码示例)

第一步:导出 Langfuse 数据

两种方式二选一:

  1. UI 导出:Langfuse 控制台 → Traces 页面 → 筛选条件(时间范围、标签、环境)→ Export → JSON 格式
  2. API 导出:调用 Langfuse API 批量拉取 Trace,适合自动化定时执行
# API 导出示例fromlangfuseimportLangfuse langfuse=Langfuse()traces=langfuse.fetch_traces(tags=["production","rag"],from_time="2024-09-01T00:00:00",to_time="2024-09-07T23:59:59",limit=500)

第二步:数据清洗与字段提取

必须清洗,避免测试流量、异常请求污染评测结果。

清洗规则
  • 过滤:env != production、测试标签、空上下文、空回答
  • 去重:重复问题去重,保留一条
  • 筛选:只保留完整走完检索+生成链路的 Trace
  • 规范化:上下文统一为字符串列表格式
代码示例:解析导出 JSON 并提取字段
importjsonfromragas.datasetimportDataset# 1. 加载导出的 Langfuse JSONwithopen("langfuse_traces_export.json","r",encoding="utf-8")asf:raw_data=json.load(f)["data"]# 2. 清洗与提取eval_samples=[]fortraceinraw_data:# 过滤无效数据ifnottrace.get("spans")ortrace.get("metadata",{}).get("env")!="production":continue# 提取检索节点retrieval_span=next((sforsintrace["spans"]ifs["name"]=="hybrid_retriever"),None)generation_span=next((sforsintrace["spans"]ifs["name"]=="answer_generation"),None)ifnotretrieval_spanornotgeneration_span:continuecontexts=retrieval_span["output"]response=generation_span["output"]user_input=trace["input"]# 过滤空上下文、空回答ifnotcontextsornotresponse:continueeval_samples.append({"user_input":user_input,"retrieved_contexts":contexts,"response":response,"trace_id":trace["id"]})print(f"清洗后有效样本数:{len(eval_samples)}")

第三步:构造 RAGAS 评测数据集

# 转成 RAGAS Dataset 格式dataset_dict={"user_input":[s["user_input"]forsineval_samples],"retrieved_contexts":[s["retrieved_contexts"]forsineval_samples],"response":[s["response"]forsineval_samples]}ragas_dataset=Dataset.from_dict(dataset_dict)

第四步:RAGAS 分层评测

fromragasimportevaluatefromragas.metricsimportFaithfulness,AnswerRelevancy,ContextPrecisionfromlangchain_openaiimportChatOpenAI# 初始化裁判模型(提前做好校准)judge_llm=ChatOpenAI(model="qwen3-max",temperature=0.1)# 执行分层评测result=evaluate(dataset=ragas_dataset,metrics=[Faithfulness(llm=judge_llm),AnswerRelevancy(llm=judge_llm),ContextPrecision(llm=judge_llm)])# 输出整体指标print("=== 线上真实数据 RAG 评测结果 ===")print(f"生成忠实度:{result['faithfulness']:.2f}")print(f"回答相关性:{result['answer_relevancy']:.2f}")print(f"上下文精确率:{result['context_precision']:.2f}")print(f"估算幻觉率:{1-result['faithfulness']:.2f}")# 输出单样本明细,关联 trace_id 方便定位df=result.to_pandas()df["trace_id"]=[s["trace_id"]forsineval_samples]# 筛选低忠实度 Bad Casebad_cases=df[df["faithfulness"]<0.7]print(f"低忠实度案例数:{len(bad_cases)}")

第五步:结果回写与沉淀

  1. 低分项通过trace_id跳转 Langfuse 页面,回放全链路定位根因
  2. 典型 Bad Case 一键导入 Langfuse Dataset,人工标注后补充进回归测试集
  3. 评测结果通过 API 回写到对应 Trace 的评分与标签中,形成闭环

四、进阶工程化玩法

1. 定时线上质量巡检

  • 每日/每周自动导出线上流量,抽样跑 RAG 分层评测
  • 监控忠实度、精确率、幻觉率的趋势变化
  • 指标跌破阈值自动告警,快速发现质量漂移

2. 版本效果真实验证

版本上线后,导出新版本与旧版本的线上流量,分别评测对比:

  • 忠实度提升/下降了多少
  • 检索精确率有没有优化
  • 幻觉率有没有下降

比离线测试集更真实,直接反映真实业务效果。

3. Bad Case 自动闭环

  • 自动筛选忠实度 < 0.7、精确率 < 0.6 的 Trace
  • 自动分类问题类型(检索问题/生成幻觉)
  • 沉淀到 Bad Case 库,每次优化后自动回归验证

4. 与 EvalScope 联动

将构造好的评测数据集导出为 JSON,直接导入 EvalScope 1.8.0 的 RAGEval 后端,一键执行全量分层评测、生成可视化报告、多版本对比。


五、局限性与避坑

1. 天然局限性

  • 没有标准答案:原生只能做忠实度、相关性、精确率这类无需标注的指标;要做答案正确率、召回率,需要补充伪标注或人工标注
  • 无法算绝对召回率:不知道知识库中所有相关片段,只能算精确率,不能算 Recall

2. 常见避坑

坑点后果规避方案
不清洗直接用测试流量、异常请求混入,结果失真按环境、标签过滤,去重,校验链路完整性
检索节点输出不完整上下文缺片段,忠实度虚高确保埋点时完整记录所有召回片段,不截断
裁判模型不校准线上批量评测偏差大先用 10~20 条人工样本校准 Kappa ≥ 0.7 再批量用
样本量过少结果波动大,无统计意义每次评测至少 50 条以上有效样本
跨版本数据混比对比无意义按版本标签筛选,同一时间段、同一场景对比

六、总结

Langfuse 导出的 JSON 不仅能做 RAG 评测,而且是最贴近真实业务的评测数据源:

  1. 生成层:零标注直接算忠实度、相关性,是线上幻觉管控的首选方案
  2. 检索层:零标注算精确率,扩展可做召回率对比
  3. 工程化:可定时巡检、版本验证、Bad Case 闭环,完全融入质量运营体系
  4. 工具链:无缝对接 RAGAS 与 EvalScope,和现有评测体系完全兼容

随着标注数据逐步沉淀,可以从「无标注相对评测」逐步过渡到「有标注绝对质量判定」,是成本最低、见效最快的 RAG 质量运营路径。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询