实现EduRAG系统的评估
发布于 2025-12-31
基于 RAGAS 评估 RAG 系统
Section titled “基于 RAGAS 评估 RAG 系统”- 理解RAGAS库在RAG(检索增强生成)系统评估中的作用。
- 掌握如何使用RAGAS评估RAG系统的核心指标。
RAGAS 评估脚本
Section titled “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-8with 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系统的完整流程。
发布于 2025-12-31