基于 RAGAS 评估 RAG 系统¶
学习目标¶
- 理解RAGAS库在RAG(检索增强生成)系统评估中的作用。
- 掌握如何使用RAGAS评估RAG系统的核心指标。
RAGAS 评估脚本¶
功能描述¶
ragas_evaluate.py脚本用于评估RAG系统的性能,具体功能包括:
-
数据集加载:从JSON文件加载包含问题、答案、上下文和真实答案的评估数据集。
-
数据格式转换:将JSON数据转换为RAGAS要求的
Dataset格式。 -
环境配置:使用LangChain的OpenAI模型和嵌入模型初始化RAGAS评估环境。
-
评估执行:计算四个核心指标:
- Faithfulness(忠实度):答案是否忠于上下文。
- Answer Relevancy(答案相关性):答案与问题的匹配程度。
- Context Relevancy(上下文相关性):上下文是否与问题相关。
- Context Recall(上下文召回率):上下文是否包含所有必要信息。
-
结果输出与保存:打印评估结果并保存为CSV文件,便于后续分析。
完整代码¶
# 导入pandas库,用于数据处理和保存CSV文件
import pandas as pd
# 导入ragas库的evaluate函数,用于执行RAG评估
from ragas import evaluate
# 导入ragas的评估指标,包括忠实度、答案相关性、上下文相关性和上下文召回率
from ragas.metrics import (
faithfulness,
answer_relevancy,
context_relevancy,
context_recall
)
# 导入datasets库的Dataset类,用于构建RAGAS所需的数据格式
from datasets import Dataset
# 导入langchain_openai的嵌入模型和聊天模型,用于评估时的语义计算和推理
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
# 导入json库,用于加载JSON格式的评估数据集
import json
# 1. 加载生成的数据集
# 使用with语句打开JSON文件,确保文件正确关闭,指定编码为utf-8
with open("rag_evaluation_dataset.json", "r", encoding="utf-8") as f:
# 将JSON文件内容加载到data变量中,data为包含多个数据条目的列表
data = json.load(f)
# 2. 转换为RAGAS格式
# 创建字典eval_data,将JSON数据转换为RAGAS要求的字段格式
eval_data = {
# 提取每个数据条目的question字段,组成问题列表
"question": [item["question"] for item in data],
# 提取每个数据条目的answer字段,组成答案列表
"answer": [item["answer"] for item in data],
# 提取每个数据条目的context字段,组成上下文列表(每个context为列表)
"contexts": [item["context"] for item in data],
# 提取每个数据条目的ground_truth字段,组成真实答案列表
"ground_truth": [item["ground_truth"] for item in data]
}
# 使用Dataset.from_dict将字典转换为RAGAS所需的Dataset对象
dataset = Dataset.from_dict(eval_data)
# 3. 配置RAGAS评估环境
# 初始化ChatOpenAI模型,指定使用gpt-4模型,并设置OpenAI API密钥
llm = ChatOpenAI(model="gpt-4", openai_api_key="your_openai_api_key")
# 初始化OpenAI嵌入模型,用于计算语义相似度,设置API密钥
embeddings = OpenAIEmbeddings(openai_api_key="your_openai_api_key")
# 4. 执行评估
# 调用evaluate函数,传入数据集、评估指标、LLM模型和嵌入模型
result = evaluate(
# 传入转换好的Dataset对象
dataset=dataset,
# 指定使用的评估指标列表
metrics=[
faithfulness, # 忠实度:答案是否基于上下文
answer_relevancy, # 答案相关性:答案与问题的匹配度
context_relevancy, # 上下文相关性:上下文是否仅包含相关信息
context_recall # 上下文召回率:上下文是否包含所有必要信息
],
# 传入配置好的LLM模型
llm=llm,
# 传入配置好的嵌入模型
embeddings=embeddings
)
# 5. 输出并保存结果
# 打印评估结果标题
print("RAGAS评估结果:")
# 打印评估结果,包含各指标的分数
print(result)
# 将评估结果转换为pandas DataFrame,便于保存
result_df = pd.DataFrame([result])
# 将DataFrame保存为CSV文件,文件名为ragas_evaluation_results.csv,不保存索引
result_df.to_csv("ragas_evaluation_results.csv", index=False)
说明¶
-
数据集格式:
- RAGAS要求数据集包含
question、answer、contexts(列表格式)和ground_truth四个字段。 contexts必须是列表,即使每个问题只对应一个上下文(如["context text"])。
- RAGAS要求数据集包含
-
评估指标:
- Faithfulness:依赖LLM(如gpt-4)判断答案是否基于上下文,避免生成无关内容。
- Answer Relevancy:使用嵌入模型(OpenAIEmbeddings)计算答案与问题的语义相似度。
- Context Relevancy:评估上下文是否仅包含与问题相关的信息,减少冗余。
- Context Recall:检查上下文是否覆盖所有必要信息,需高质量的
ground_truth支持。
-
环境配置:
ChatOpenAI用于生成评估所需的推理(如判断忠实度),需指定模型(如gpt-4)和API密钥。OpenAIEmbeddings用于计算语义相似度(如答案相关性),需确保API密钥有效。- 可替换为其他LLM(如通义千问),需适配LangChain的模型接口。
-
结果分析:
-
评估结果为字典,包含各指标的分数(0-1,1为最佳),如:
{'faithfulness': 0.95, 'answer_relevancy': 0.92, 'context_relevancy': 0.90, 'context_recall': 0.93}
- 结果保存为CSV文件(
ragas_evaluation_results.csv),便于统计分析和多次运行比较。
-
-
迁移性:
- 代码结构通用,可用于任何RAG系统评估,只需替换数据集和LLM配置。
- 可扩展指标(如
answer_correctness)或添加自定义数据处理逻辑(如过滤低质量数据)。
章节总结¶
本课件通过ragas_evaluate.py代码,详细介绍了使用RAGAS评估RAG系统的完整流程。