使用Ragas与Langfuse评估RAG系统性能的完整指南
引言
在构建检索增强生成(RAG)系统时,评估系统性能是一个关键但具有挑战性的任务。本文将详细介绍如何利用Ragas和Langfuse这两个强大工具的组合,对RAG系统进行全面评估和监控。
工具介绍
Ragas是什么?
Ragas是一个专门为RAG系统设计的开源评估框架。它提供了一系列参考无关(reference-free)的评估指标,这意味着你不需要预先准备标准答案(ground truth)就能评估系统性能。Ragas特别适合生产环境中的持续监控和评估。
Langfuse是什么?
Langfuse是一个开源的LLM应用监控平台,提供三大核心功能:
- 调用链追踪(Tracing):记录LLM应用的完整执行流程
- 提示词管理(Prompt Management):集中管理各种提示词模板
- 评估系统(Evaluation):支持自定义评分和模型评估
为什么选择Ragas+Langfuse组合?
这一组合为RAG系统评估提供了完整解决方案:
- 全面指标覆盖:Ragas提供专业评估指标,Langfuse提供可视化分析
- 生产友好:无需标准答案即可评估,适合真实生产环境
- 灵活部署:支持单次调用评估和批量采样评估两种模式
环境准备
安装必要依赖
%pip install datasets ragas llama_index python-dotenv --upgrade
配置API密钥
import os
# Langfuse项目密钥
os.environ["LANGFUSE_SECRET_KEY"] = "sk-..."
os.environ["LANGFUSE_PUBLIC_KEY"] = "pk-..."
# OpenAI API密钥
# os.environ["OPENAI_API_KEY"] = "sk-..."
评估数据集准备
我们使用一个预处理的QA数据集,包含以下字段:
question: 问题列表answer: RAG系统生成的答案contexts: 提供给LLM的上下文ground_truth: 标准答案(可选)
from datasets import load_dataset
amnesty_qa = load_dataset("explodinggradients/amnesty_qa", "english_v2")["eval"]
评估指标详解
Ragas提供了多种专业评估指标,我们重点介绍四个核心指标:
-
Faithfulness(忠实度)
- 评估生成答案与提供上下文的事实一致性
- 检测是否存在"幻觉"(hallucination)问题
-
Answer Relevancy(答案相关性)
- 评估答案与问题的直接相关程度
- 检测答案是否切题、简洁
-
Context Precision(上下文精确度)
- 评估相关上下文是否被优先排序
- 反映检索系统的排序质量
-
Aspect Critique(方面评价)
- 自定义评价维度(如有害性、正确性等)
- 提供特定维度的细粒度评估
from ragas.metrics import faithfulness, answer_relevancy, context_precision
from ragas.metrics.critique import harmfulness
metrics = [faithfulness, answer_relevancy, context_precision, harmfulness]
评估流程实现
1. 初始化评估指标
from ragas.run_config import RunConfig
from ragas.metrics.base import MetricWithLLM, MetricWithEmbeddings
from langchain_openai.chat_models import ChatOpenAI
from langchain_openai.embeddings import OpenAIEmbeddings
from ragas.llms import LangchainLLMWrapper
from ragas.embeddings import LangchainEmbeddingsWrapper
def init_ragas_metrics(metrics, llm, embedding):
for metric in metrics:
if isinstance(metric, MetricWithLLM):
metric.llm = llm
if isinstance(metric, MetricWithEmbeddings):
metric.embeddings = embedding
run_config = RunConfig()
metric.init(run_config)
llm = ChatOpenAI()
emb = OpenAIEmbeddings()
init_ragas_metrics(metrics,
llm=LangchainLLMWrapper(llm),
embedding=LangchainEmbeddingsWrapper(emb))
2. 单次调用评估实现
from langfuse import Langfuse
langfuse = Langfuse()
async def score_with_ragas(query, chunks, answer):
scores = {}
for m in metrics:
scores[m.name] = await m.ascore(
row={"question": query, "contexts": chunks, "answer": answer}
)
return scores
3. 集成到RAG流程中
from langfuse.decorators import observe, langfuse_context
from asyncio import run
import hashlib
# 示例数据映射
q_to_c = {} # 问题到上下文的映射
q_to_a = {} # 问题到答案的映射
for row in amnesty_qa:
q_hash = hash_string(row["question"])
q_to_c[q_hash] = row["contexts"]
q_to_a[q_hash] = row["answer"]
@observe()
def retriever(question: str):
return q_to_c[question]
@observe()
def generator(question):
return q_to_a[question]
@observe()
def rag_pipeline(question):
q_hash = hash_string(question)
contexts = retriever(q_hash)
generated_answer = generator(q_hash)
# 评估当前调用
score = run(score_with_ragas(question, contexts, answer=generated_answer))
for s in score:
langfuse_context.score_current_trace(name=s, value=score[s])
return generated_answer
评估结果分析
在Langfuse平台上,你可以:
- 查看每个调用的详细评分
- 分析不同时间段的性能趋势
- 识别低质量样本进行针对性优化
- 对比不同用户群体的体验差异
生产环境建议
-
评估策略选择:
- 全量评估:每个调用都评估,数据全面但成本高
- 抽样评估:定期随机抽样评估,成本低但可能遗漏问题
-
性能优化:
- 将评分过程异步化,避免阻塞主流程
- 对关键指标设置告警阈值
-
持续改进:
- 定期分析评估结果,识别系统弱点
- 建立评估基准,跟踪优化效果
总结
Ragas与Langfuse的组合为RAG系统提供了从评估到监控的完整解决方案。通过本文介绍的方法,你可以:
- 全面评估RAG系统的各项关键指标
- 实时监控生产环境中的系统表现
- 基于数据驱动持续优化系统性能
这种评估方法特别适合需要持续改进的复杂RAG系统,帮助团队在保证质量的同时快速迭代。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



