# RAG_check **Repository Path**: modier123/rag_check ## Basic Information - **Project Name**: RAG_check - **Description**: No description available - **Primary Language**: Python - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-04 - **Last Updated**: 2026-01-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 🔍 RAG 评估工具:基于 Ragas 的质量审核 一个使用 **Ragas** 框架与大语言模型(LLM)对 RAG 系统回答进行自动化质量评估的工具。严格从**准确性、完整性、忠实度**三个维度进行审核,并输出可解释的中文评判结果。 > 💡 **通用性说明**:本项目基于户政领域示例构建,但通过简单的提示词修改即可适用于其他任何领域(如医疗、法律、教育等)。只需调整评估提示词中的领域术语和评判标准即可快速适配。 --- ## 📖 项目背景 在 RAG 系统中,确保生成的回答**准确、完整、忠于原文**至关重要。本项目通过定制化 Ragas 评估指标,利用大语言模型作为"裁判",对每条 RAG 输出进行"通过/不通过"二元打分,并附带详细的中文评判理由,助力自动化质量把关与问题排查。 目前该项目是基于户政领域构建的示例,若要适配其他领域,只需修改评估提示词中的领域特定内容。 --- ## 📁 项目结构 ``` . ├── .env# 🔐 敏感信息配置(API Key、Base URL) ├── .gitignore ├── config.yaml# ⚙️ 主配置文件(路径、模型、任务设置) ├── evals.py# 🚀 主评估脚本 ├── README.md# 说明文档 └── evals/ ├── datasets/# 📂 输入数据集(Excel 格式) │├── 户政Difydemo.xlsx │└── 户政DifyQA_0-550.xlsx │ └── experiments/# 📊 评估结果输出目录(自动生成) └── 20260104_180331_户政评估详细结果.xlsx ``` --- ## ✨ 功能特点 - ✅ **定制化评估指标**:基于 Ragas 框架自定义 Metric,支持结构化输出(Pydantic) - ✅ **三维严格审核**:从**准确性、完整性、忠实度(防幻觉)** 三个维度综合评判 - ✅ **可解释性结果**:输出详细中文评判理由,便于人工复核与问题溯源 - ✅ **自动化流程**:一键运行,结果自动保存为带时间戳的 Excel 文件 - ✅ **配置与数据分离**:敏感信息存于 `.env`,运行配置存于 `config.yaml` - ✅ **兼容性强**:支持 OpenAI 格式接口,可轻松切换不同模型平台 - ✅ **领域通用**:通过修改提示词可快速适配各种垂直领域 --- ## 🔀 适配其他领域 本项目虽然以户政领域为例,但其核心框架是通用的。要适配其他领域,只需修改以下部分: ### 1. 修改评估提示词 在 `evals.py` 文件中,找到 `HuzhengQualityMetric` 类的 `prompt` 属性: ```python # 原始户政领域提示词 prompt: str = """ 你是一名资深的政务办事核查员。请严格对比【系统回答】与【标准答案】。 ... 评价标准: 1. 准确性:系统回答的内容是否与标准答案完全一致?(包括办理条件、所需材料、流程等) 2. 完整性:是否遗漏了标准答案中的任何关键信息? 3. 忠实度:是否基于上下文生成?(不允许幻觉) """ ``` 替换为对应领域的提示词,例如医疗领域: ```python # 医疗领域提示词示例 prompt: str = """ 你是一名资深的医疗信息审核专家。请严格对比【系统回答】与【标准答案】。 ... 评价标准: 1. 准确性:系统回答的医疗信息是否与标准答案完全一致?(包括症状描述、诊断建议、用药指导等) 2. 完整性:是否遗漏了标准答案中的任何关键医疗信息? 3. 忠实度:是否基于医疗指南和检索到的上下文生成?(不允许幻觉或误导性建议) """ ``` ### 2. 更新数据集列名(可选) 如果不同领域的数据集列名不同,可以在代码中相应调整: ```python # 在 load_dataset_from_excel 函数中修改列名映射 data_dict = { "user_input": df["用户提问"].astype(str).tolist(),# 原"问题" "reference": df["专家答案"].astype(str).tolist(),# 原"标准答案" "response": df["RAG系统回答"].astype(str).tolist(),# 原"RAG回答答案" } ``` ### 3. 修改输出文件前缀 在 `config.yaml` 中更新输出文件的前缀: ```yaml evaluation: output_filename_prefix: "医疗问答评估结果"# 修改为对应领域 ``` --- ## 🔄 更换模型与平台 ### 📊 当前配置 当前项目使用: - **平台**:硅基流动(SiliconFlow) - **模型**:DeepSeek-V3 - **调用方式**:兼容 OpenAI API 格式 ### 🛠️ 更换步骤 #### 1. 修改 `.env` 配置文件 根据目标平台的要求更新 API 信息: ```env # 原配置(硅基流动) SILICONFLOW_API_KEY=your_actual_api_key_here SILICONFLOW_BASE_URL=https://api.siliconflow.cn/v1 # 切换为其他平台的示例: # OpenAI 官方 OPENAI_API_KEY=sk-your-openai-api-key # 智谱AI ZHIPU_API_KEY=your_zhipu_api_key ZHIPU_BASE_URL=https://open.bigmodel.cn/api/paas/v4 ``` #### 2. 更新 `config.yaml` 中的模型名称 ```yaml llm: model_name: "deepseek-ai/DeepSeek-V3"# 修改为目标模型 # 常用模型名称示例: # OpenAI: "gpt-4", "gpt-3.5-turbo" # 智谱AI: "glm-4" # 月之暗面: "moonshot-v1-8k" # 零一万物: "yi-large" # 百度文心: "ernie-bot-4" ``` #### 3. 修改代码中的 API 调用配置 在 `evals.py` 中找到以下代码段并进行相应修改: ```python # --- LLM 配置 --- # 修改前(硅基流动) SILICONFLOW_API_KEY = os.getenv("SILICONFLOW_API_KEY") BASE_URL = os.getenv("SILICONFLOW_BASE_URL") # 修改后(以 OpenAI 为例) OPENAI_API_KEY = os.getenv("OPENAI_API_KEY") # OpenAI 官方不需要 base_url,直接创建客户端 openai_client = OpenAI(api_key=OPENAI_API_KEY) eval_llm = llm_factory(model=MODEL_NAME, client=openai_client) ``` > ⚠️ **注意**:部分国内平台可能需要额外的 SDK 或调用方式,请参考相应平台的官方文档。如果遇到问题,可以查看 `openai_client` 的初始化方式是否需要调整。 ### 🎯 支持的平台和模型 - **兼容 OpenAI API 的平台**:硅基流动、OpenAI 官方、通义千问、DeepSeek API 等 - **需要适配的平台**:智谱AI、百度文心、腾讯混元等(可能需要少量代码调整) - **模型要求**:需要支持结构化输出(如 OpenAI 的 JSON Mode 或 Function Calling) --- ## 📥 输入数据格式 评估数据集需为 `.xlsx` 文件,放置于 `evals/datasets/` 目录,至少包含以下列: | 列名 | 说明 | 是否必须 | |------|------|----------| | **问题** | 用户提问 | 是 | | **标准答案** | 官方/参考答案 | 是 | | **RAG回答答案** | RAG 系统实际输出 | 是 | | **上下文** | 检索到的相关文本(可选) | 否 | | **来源节点编号** | 用于追溯知识来源(可选) | 否 | > 示例文件:`户政Difydemo.xlsx` --- ## ⚙️ 安装与配置 ### 1. 安装依赖 ```bash pip install ragas openai pandas datasets pydantic python-dotenv pyyaml openpyxl ``` > 推荐 Ragas 版本 ≥ 0.1.9(支持自定义 Metric 与结构化输出)。 ### 2. 配置环境变量(`.env`) ```env # 根据所选平台填写 SILICONFLOW_API_KEY=your_actual_api_key_here SILICONFLOW_BASE_URL=https://api.siliconflow.cn/v1 ``` > ⚠️ 请务必将 `.env` 加入 `.gitignore`,避免泄露密钥。 ### 3. 调整运行配置(`config.yaml`) ```yaml llm: model_name: "deepseek-ai/DeepSeek-V3"# 可替换为其他支持模型 paths: datasets_dir: "./evals/datasets" experiments_dir: "./evals/experiments" evaluation: default_excel_filename: "户政Difydemo.xlsx"# 默认评估文件 output_filename_prefix: "户政评估详细结果"# 输出文件前缀 ``` --- ## 🚀 快速开始 1. **准备数据**:将评估 Excel 文件放入 `evals/datasets/` 目录。 2. **配置信息**:填写 `.env` 中的 API 信息,按需修改 `config.yaml`。 3. **运行评估**: ```bash python evals.py ``` 4. **查看结果**:评估完成后,结果将自动保存至 `evals/experiments/` 目录下带时间戳的 Excel 文件中。 --- ## 📊 输出结果说明 输出 Excel 文件包含以下列: | 列名 | 说明 | |------|------| | **问题** | 原始用户问题 | | **标准答案** | 官方参考答案 | | **RAG系统回答** | RAG 系统实际输出 | | **检索到的上下文** | 检索到的相关片段(可能为空) | | **评分(1为通过/0为不通过)** | 审核结果:1=通过,0=不通过 | | **LLM评价原因** | LLM 给出的详细中文评判理由 | --- ## 🔧 扩展建议 - 🧩 **增加自定义评估维度**:如友好度、简洁度、时效性等 - 📈 **支持批量多数据集评估**:自动生成汇总报告 - 🖥️ **集成简易 Web 界面**:可视化评估结果 - 📝 **接入日志系统**:记录每次评估的详细过程 - 🔄 **适配更多国产模型平台**:智谱、月之暗面、通义等 - 🌐 **多语言支持**:扩展为支持英文、日文等其他语言的评估 --- ## ⚠️ 注意事项 - 💸 **费用控制**:LLM 调用会产生费用,建议先用小批量数据测试确认效果 - 🧪 **提示词调试**:评估前建议在小样本上调试 Prompt,确保评判标准符合业务要求 - 🔧 **平台兼容性**:如更换模型平台,需要确保平台支持 OpenAI 格式接口或相应适配 - 📄 **数据安全**:敏感数据建议使用本地部署模型或确保 API 调用符合数据安全规定 - 🔍 **评估标准**:不同领域可能需要调整评估维度和标准,请根据实际情况调整 --- ## 📜 下一步计划 - 📊 更新展示结果形式(报告或图表) - ⭐ 增加具体评分机制(需优化提示词) - 🔄 支持多模型并行评估和比较 - 📝 添加评估标准配置化,支持动态加载不同领域的评估标准 - 🚀 提供 Docker 容器化部署方案 --- 如有任何问题或建议,欢迎提交 Issue 或 Pull Request!🎉