Ragas 自动化评估代码示例

📅 2026/7/8 2:09:08
Ragas 自动化评估代码示例
import os from datasets import Dataset from langchain_openai import ChatOpenAI, OpenAIEmbeddings from ragas import evaluate from ragas.metrics import ( context_recall, faithfulness, answer_relevancy, context_precision ) # # 1. 配置 LLM 和 Embedding模型 # # 注意请替换为你自己的 API Key 和 Base URL (如果是本地模型或中转站) os.environ[OPENAI_API_KEY] your-api-key-here # 如果使用本地模型或特定中转站取消下面注释并配置 # os.environ[OPENAI_BASE_URL] http://localhost:11434/v1 # 初始化用于评估的 LLM (裁判) # 建议使用能力较强的模型如 gpt-4o, gpt-4-turbo 或 qwen-max 等 evaluator_llm ChatOpenAI(modelgpt-4o, temperature0) # 初始化 Embedding 模型 (用于计算答案相关性等需要向量比对的指标) embeddings OpenAIEmbeddings(modeltext-embedding-3-small) # # 2. 准备测试数据 # # 数据格式必须包含: question, answer, contexts, ground_truths # contexts 是列表形式因为检索可能返回多个文档片段 data_samples { question: [ 故宫位于哪个城市, Python中列表和元组的主要区别是什么 ], answer: [ 故宫位于中国北京市中心。, 列表是可变的而元组是不可变的。此外列表使用方括号元组使用圆括号。 ], contexts: [ [故宫旧称紫禁城位于中国北京市中心是中明清两代的皇家宫殿。], [在Python中列表(list)是可变序列通常用于存储同质集合元组(tuple)是不可变序列。列表用[]定义元组用()定义。] ], ground_truths: [ [故宫位于北京。], [列表可变元组不可变。] ] } # 转换为 Ragas 需要的 Dataset 格式 dataset Dataset.from_dict(data_samples) # # 3. 执行评估 # print(开始评估 RAG 系统性能...) result evaluate( datasetdataset, metrics[ context_recall, # 检索召回率是否找全了关键信息 faithfulness, # 忠实度回答是否基于上下文有无幻觉 answer_relevancy, # 答案相关性回答是否切题 context_precision # 上下文精度检索到的内容是否精准且排序合理 ], llmevaluator_llm, # 指定裁判 LLM embeddingsembeddings # 指定 Embedding 模型 ) # # 4. 输出结果 # # 转换为 Pandas DataFrame 方便查看 df result.to_pandas() print(\n--- 评估详细得分 ---) print(df) # 打印平均分 print(\n--- 平均指标得分 ---) for metric_name in result.scores.keys(): avg_score sum(result.scores[metric_name]) / len(result.scores[metric_name]) print(f{metric_name}: {avg_score:.4f})开始评估 RAG 系统性能...Evaluating: 100%|██████████| 2/2 [00:0500:00, 2.50s/it]--- 评估详细得分 ---question ... context_precision0 故宫位于哪个城市 ... 1.0000001 Python中列表和元组的主要区别是什么 ... 1.000000[2 rows x 6 columns]--- 平均指标得分 ---context_recall: 1.0000faithfulness: 1.0000answer_relevancy: 0.9850context_precision: 1.0000