Siemens RAGAS RAG 评估平台:面向 CT 知识库的自动化质量评估闭环
本项目将 PDF 文档解析、题库生成、在线/离线 RAGAS 评测、报告沉淀与 Web 可视化
统一进一个可复用平台。CLI 与 FastAPI Web 控制台共享同一套 rag_eval 核心引擎,适合批量评估、持续优化与 Dify 实时评分集成。
CLI / Web / REST API
含 GT 依赖与非依赖
Build / Eval / Pipeline / Score
HTTP / Python Adapter
1. 项目概述
项目名称:Siemens RAGAS RAG 评估平台。
目标:为西门子医疗影像 CT 知识库 RAG 系统提供自动化质量评估。
定位:既能作为离线评测框架,也能作为在线评估控制台与 API 服务,为知识库 QA、Prompt 迭代、检索策略优化提供统一基线。
业务闭环
PDF解析 → 题库生成 → RAGAS评测 → 报告可视化 → 再迭代。项目不仅覆盖评测本身,还覆盖评测数据源建设与运行产物管理。
运行方式
main.py 负责 CLI 评估与 dataset build,webmain.py 负责启动 FastAPI 控制台,webapp.server 暴露 REST API 与静态前端。
2. 系统架构
平台采用“多入口 + 单评估核心”的结构。CLI 和 Web 控制台都汇入 rag_eval 核心引擎;API 层只负责任务编排、配置管理与结果查询。
┌─────────────────────────────────────────────────────────┐ │ siemens_ragas 平台 │ ├─────────────┬───────────────────┬───────────────────────┤ │ CLI 入口 │ Web 控制台 │ REST API │ │ main.py │ webmain.py │ FastAPI │ ├─────────────┴───────────────────┴───────────────────────┤ │ 核心评估引擎 (rag_eval) │ ├──────────────┬──────────────────┬────────────────────────┤ │ dataset_ │ execution/ │ metrics/ │ │ builder/ │ evaluator.py │ pipeline.py │ │ (PDF→题库) │ (评估流程) │ (RAGAS指标) │ ├──────────────┴──────────────────┴────────────────────────┤ │ 外部依赖 │ │ 阿里云DocMind (PDF解析) │ OpenAI兼容API (LLM/Embedding) │ └─────────────────────────────────────────────────────────┘
CLI 编排
main.py 通过互斥参数在 --scenario 与 --dataset-build-config 之间分派,分别进入评估流程与题库构建流程。
Web 服务
webmain.py 负责 uvicorn 启动、日志文件轮转与 host/port 配置;webapp.server 注册 runs、scenarios、evaluations、pipeline、score 等 API。
核心执行器
rag_eval.execution.runner 负责加载 scenario、构建模型与 adapter、调用 Evaluator 执行并写出标准化产物。
3. 核心模块说明
以下模块覆盖数据准备、评估执行、Web 管理与 Siemens 业务适配的主要职责边界。
| 模块 | 路径 | 职责 |
|---|---|---|
| dataset_builder | rag_eval/dataset_builder/ |
PDF解析、source chunk 归一化、LLM 题目生成、草稿题库与构建产物写出。 |
| execution | rag_eval/execution/ |
评估编排、在线/离线模式切换、adapter 调用、RAGAS 打分与结果聚合。 |
| metrics | rag_eval/metrics/ |
RAGAS 指标注册、模型构建、评估管道装配、指标权重与文档权重聚合。 |
| reporting | rag_eval/reporting/ |
运行产物写入、summary 生成、metadata 与 scenario 快照沉淀。 |
| adapters | rag_eval/adapters/ |
HTTP/Python 应用适配器封装,把外部应用结果统一为 answer / contexts / raw_response。 |
| webapp | webapp/ |
FastAPI Web 控制台、OpenAPI 文档、任务后台管理、场景扫描、历史报告查询。 |
| apps | apps/siemens_pdf_qa/ |
西门子 CT 知识库问答适配器,基于 source chunk 证据构造 Prompt 并调用 OpenAI 兼容模型生成答案。 |
settings.py
集中读取 .env:OpenAI Key/Base URL、RAGAS Judge/Embedding 模型、并发、阿里云 DocMind、SCORE_API_TOKEN 等。
registry.py
定义 7 个受支持指标:faithfulness、answer_relevancy、context_recall、context_precision、noise_sensitivity、factual_correctness、semantic_similarity。
inline_scorer.py
为 /api/score 提供模块级缓存评分器,按 (judge_model, embedding_model) 复用 LLM 与 embedding 连接。
4. 数据流说明
项目围绕四条关键流程展开:题库构建、在线评估、API 全链路 Pipeline 与 Dify 实时评分。
Flow A: 题库生成流程(Dataset Build)
PDF文件 → 阿里云DocMind解析 → 文档切片(source_chunks) → LLM生成题目 → CSV题库文件 → 人工审核
对应入口:main.py --dataset-build-config;核心实现:rag_eval.dataset_builder.runner。
Flow B: RAGAS评估流程(Online Evaluation)
CSV题库 → 规范化样本 → 应用适配器(siemens_pdf_qa) → LLM答题 → RAGAS指标计算 → 加权得分 → 报告产物
对应 Siemens 场景:scenarios/online/siemens-pdf-question-bank-online.yaml,由 apps.siemens_pdf_qa.adapter:run 提供答案与证据片段。
Flow C: 全链路 Pipeline(API触发)
POST /api/pipeline/jobs → 后台线程 → Flow A → Flow B → 产物路径
由 webapp.services.pipeline_task_manager 在线程池中串行执行 parsing_documents → generating_questions → evaluating 三阶段,并返回 scores.csv / summary.md / dataset.csv 等路径。
Flow D: Dify实时评分(/api/score)
Dify Agent → POST /api/score → InlineScorer → RAGAS metrics → 得分JSON
当 ground_truth 缺失时,会自动跳过依赖参考答案的指标,并在响应中给出 skipped_metrics。
5. RAGAS 评估指标
平台当前支持 7 个指标,既覆盖回答忠实度和相关性,也覆盖对参考答案、噪声片段和语义相似度的衡量。
faithfulness
无需 ground_truth回答对检索内容的忠实度,用于防止模型脱离证据“幻觉式”作答。
answer_relevancy
无需 ground_truth衡量回答与问题本身的相关性,判断是否真正命中用户所问。
context_precision
无需 ground_truth衡量检索片段的精准度,关注上下文中与回答真正相关的比例。
context_recall
需要 ground_truth检索内容对标准答案覆盖程度,反映召回是否足够支撑正确作答。
noise_sensitivity
需要 ground_truth系统对噪声检索片段的鲁棒性,越不受无关片段干扰越好。
factual_correctness
需要 ground_truth与标准答案对齐的事实准确性,代码中作为端到端事实正确度指标。
semantic_similarity
需要 ground_truth回答与标准答案的语义相似度,依赖 embedding,不需要额外 LLM 调用。
指标默认集合
在线评分默认/api/score 的默认指标集合为 faithfulness、answer_relevancy、context_recall、context_precision。
6. API 接口文档
Web 层基于 FastAPI 提供任务提交、历史查询、LLM 配置管理与 Dify 实时评分接口。
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /api/pipeline/jobs | 提交全链路评估任务,后台线程自动执行 PDF 解析、题库生成和在线评估。 |
| GET | /api/pipeline/jobs/{id} | 查询指定 Pipeline 任务状态、阶段、日志和产物路径。 |
| POST | /api/score | Dify 实时评分接口,接收单条问答并返回各指标得分与综合得分。 |
| POST | /api/llm-profiles/probe | 临时测试 LLM / Embedding 连通性,无需先保存配置。 |
| POST | /api/llm-profiles | 创建命名的 LLM 配置档案,可供场景或控制台复用。 |
| POST | /api/evaluations | 基于已有场景 YAML 启动一次后台评估任务。 |
| GET | /api/runs | 获取历史运行列表,用于控制台报告页与明细页渲染。 |
/api/score 请求示例
POST /api/score
Authorization: Bearer <token>
Content-Type: application/json
{
"question": "双源CT的时间分辨率是多少?",
"answer": "双源CT的单扇区时间分辨率为75ms。",
"contexts": "双源CT采用两套管-探测器系统 |||| 单扇区采集旋转135度",
"ground_truth": "双源CT单扇区时间分辨率为75ms,需旋转135度。",
"context_separator": " |||| ",
"metrics": [
"faithfulness",
"answer_relevancy",
"context_recall",
"context_precision"
],
"judge_model": "gpt-5",
"embedding_model": "text-embedding-3-small"
}
/api/score 响应示例
{
"scores": {
"faithfulness": 0.875,
"answer_relevancy": 0.92,
"context_recall": 0.81,
"context_precision": 0.85
},
"weighted_score": 0.8638,
"latency_ms": 3420,
"skipped_metrics": [],
"error": null
}
Pipeline API
返回 job_id 后即可轮询。阶段枚举包括 queued、running、parsing_documents、evaluating 与 done。
LLM Profiles
支持保存 base URL、API Key、model、timeout,并通过 /apply 将配置写回场景 YAML,同时可补充 metric/doc 权重。
Runs API
历史 run 会读取 summary.md、scores.csv 与 scenario.snapshot.yaml,聚合指标均值、分布和最低分样本。
7. 指标权重配置
平台支持两级权重:metric_weights 控制不同指标的重要性,doc_weights 控制不同文档对总体分数的影响。
metric_weights: faithfulness: 0.35 context_recall: 0.25 context_precision: 0.20 answer_relevancy: 0.20 doc_weights: "322_双源CT.pdf": 2.0
1. 单样本综合分 = Σ(有效指标分 × 指标权重) / Σ(有效指标权重)
2. 总体综合分 = Σ(单样本综合分 × 文档权重) / Σ(文档权重)
3. 当权重未配置时,代码会自动退化为默认 1.0,即普通平均。
4.
doc_weights 不仅影响总体综合分,也会影响控制台中按文档聚合后的指标均值。
代码依据
rag_eval.metrics.weights.compute_weighted_score() 负责单样本指标加权;compute_overall_weighted_score_mean() 负责跨样本文档加权。
配置入口
场景 YAML 可直接定义;Web 控制台也可通过 /api/llm-profiles/apply 将权重补丁写回场景文件。
8. 部署说明
仓库自带 deploy.sh,适合 Linux 一键部署 Web 控制台与相关依赖。
Linux 部署步骤
- 准备 Python 3.12+ 环境,执行
bash deploy.sh。 - 脚本会自动创建
.venv、安装pyproject.toml依赖,并补装fastapi / uvicorn / httpx。 - 若
.env不存在,将从.env.example复制一份模板。 - 脚本初始化
configs / logs / outputs / datasets目录,并尝试生成 demo 数据。 - 最后使用
webmain.py后台启动服务,默认端口 8800,冲突时回退到 8801。
常用命令
# 依赖安装 uv sync # CLI 运行在线/离线评估 .\.venv\Scripts\python.exe main.py --scenario scenarios\online\siemens-pdf-question-bank-online.yaml # CLI 运行题库生成 .\.venv\Scripts\python.exe main.py --dataset-build-config scenarios\siemens_build\siemens-pdf-build.yaml # 启动 Web 控制台 .\.venv\Scripts\python.exe webmain.py --host 127.0.0.1 --port 8800
| 变量 | 用途 | 示例 / 默认 |
|---|---|---|
OPENAI_API_KEY | OpenAI 兼容接口凭据 | your-api-key |
OPENAI_BASE_URL | 统一 LLM / Embedding 网关地址 | http://6.86.80.4:30080/v1 |
RAGAS_JUDGE_MODEL | RAGAS Judge 默认模型 | gpt-5 |
RAGAS_EMBEDDING_MODEL | Embedding 默认模型 | text-embedding-3-small |
ALIBABA_ACCESS_KEY_ID / ALIBABA_ACCESS_KEY_SECRET | 阿里云 DocMind 凭据 | dataset build 必填 |
ALIBABA_ENDPOINT | DocMind 服务域名 | docmind-api.cn-hangzhou.aliyuncs.com |
DATASET_GENERATOR_MODEL | 题库生成默认模型 | qwen3.6-plus |
SCORE_API_TOKEN | /api/score Bearer 鉴权令牌 | 留空则不鉴权 |
RAGAS_METRIC_TIMEOUT_SECONDS | RAGAS 指标计算超时 | 300(7指标建议值) |
9. 技术栈
从依赖声明、Web 服务实现与测试代码来看,项目的技术栈如下。
依赖声明
pyproject.toml 中列出了 ragas==0.4.3、langchain-openai、datasets、pydantic-settings、阿里云 DocMind SDK 等核心依赖。
Web 生态
控制台基于 FastAPI + 静态页面,服务器通过 webmain.py 配置日志和 uvicorn,前端报告页结合图表与表格展示历史 run。
测试现状
仓库同时存在 pytest 与 fastapi.testclient.TestClient 用例,涵盖 Pipeline、权重聚合、实时评分与 LLM 配置接口。
10. 目录结构
以下树状图概括了项目中最关键的源码、配置、数据、输出与测试位置。
siemens_ragas/
├── README.md
├── pyproject.toml
├── main.py
├── webmain.py
├── deploy.sh
├── .env.example
├── apps/
│ ├── pdf_question_bank/
│ ├── sample_python/
│ └── siemens_pdf_qa/
├── datasets/
│ ├── raw/
│ └── normalized/
├── docs/
├── outputs/
├── scenarios/
│ ├── online/
│ ├── offline/
│ └── siemens_build/
├── tests/
│ ├── webapp/
│ ├── test_pipeline.py
│ ├── test_weights.py
│ └── test_webapp_report_builder.py
├── rag_eval/
│ ├── adapters/
│ ├── advisor/
│ ├── config/
│ ├── datasets/
│ ├── dataset_builder/
│ │ ├── generator/
│ │ └── parser/
│ ├── execution/
│ ├── metrics/
│ ├── reporting/
│ └── shared/
└── webapp/
├── api/
├── services/
└── static/
├── css/
└── js/
源码主路径
rag_eval/ 是平台核心,webapp/ 负责服务端 API 与控制台,apps/ 放置面向不同业务应用的 adapter。
配置与产物
scenarios/ 维护 YAML 场景,datasets/ 存放原始/规范化数据,outputs/ 产出评测运行结果与 dataset build 工件。