Files
siemens_ragas/README.md

200 lines
7.6 KiB
Markdown
Raw Permalink Normal View History

2026-06-12 14:02:15 +08:00
# RAG 评测平台骨架
## 1. 项目定位
这个仓库现在已经从“单脚本离线评测”重构成一个可继续扩展的 **RAG 评测平台骨架**。核心目标不变:统一离线与在线评测入口,沉淀本地 run 资产,并且让多应用、多数据集、多场景对比变成标准流程。
架构边界来自 [docs/rag-eval-architecture.md](/C:/Users/A200477427/Learnings/ragas-template/docs/rag-eval-architecture.md),当前代码已经按该文档落了第一版工程结构。
如果你想快速理解一次评测在代码里是怎么跑起来的,可以继续看:
- [docs/rag-eval-engine-flow.md](/C:/Users/A200477427/Learnings/ragas-template/docs/rag-eval-engine-flow.md)
## 2. 当前结构
```text
.
├── apps/
│ └── sample_python/
├── datasets/
│ ├── normalized/
│ └── raw/
├── scenarios/
│ └── offline/
├── rag_eval/
│ ├── adapters/
│ ├── config/
│ ├── datasets/
│ ├── execution/
│ ├── metrics/
│ ├── reporting/
│ └── shared/
├── runs/
├── docs/
├── tests/
└── main.py
```
当前已实现的核心能力:
- `YAML` 场景加载与校验
- 离线 dataset 加载、标准化、无效样本分流
- `PDF -> online dataset draft` 的 dataset build 链路
- `ragas` 指标流水线装配
- 统一 `Evaluator` 执行流程
- 标准 `runs/<scenario>/` 本地资产输出
## 3. 简单离线 dataset 案例
仓库里已经放了一个最小离线样例:
- dataset: [datasets/normalized/sample_offline_rag_eval.csv](/C:/Users/A200477427/Learnings/ragas-template/datasets/normalized/sample_offline_rag_eval.csv)
- scenario: [scenarios/offline/sample-offline.yaml](/C:/Users/A200477427/Learnings/ragas-template/scenarios/offline/sample-offline.yaml)
另外还补了一套和 PDF dataset build 配对的离线 smoke 样例:
- dataset: [datasets/normalized/sample_pdf_offline_smoke.csv](/C:/Users/A200477427/Learnings/ragas-template/datasets/normalized/sample_pdf_offline_smoke.csv)
- scenario: [scenarios/offline/sample-pdf-offline-smoke.yaml](/C:/Users/A200477427/Learnings/ragas-template/scenarios/offline/sample-pdf-offline-smoke.yaml)
这个 dataset 是纯本地文件,不依赖任何在线数据源,包含 3 条标准离线样本,字段就是平台统一要求的:
- `question`
- `contexts`
- `answer`
- `ground_truth`
- 以及可选的 `sample_id / scenario / language / retrieval_config`
## 4. 运行方式
先准备环境变量:
```powershell
Copy-Item .env.example .env
```
`.env` 中至少需要设置:
- `OPENAI_API_KEY`
- `OPENAI_BASE_URL`
如果你现在的 OpenAI 兼容模型都可用,这里直接填你已有的网关和 key 即可。默认模型现在是:
- `OPENAI_BASE_URL=http://6.86.80.4:30080/v1`
- `RAGAS_JUDGE_MODEL=deepseek-v4-flash`
- `RAGAS_EMBEDDING_MODEL=text-embedding-v3`
推荐直接走统一入口:
```powershell
uv run main.py --scenario scenarios/offline/sample-offline.yaml
or
.\.venv\Scripts\python.exe main.py --scenario scenarios/offline/sample-offline.yaml
```
如果你想直接验证 `sample-pdf-build.yaml` 对应的离线 smoke 评测,可以运行:
```powershell
uv run main.py --scenario scenarios/offline/sample-pdf-offline-smoke.yaml
or
.\.venv\Scripts\python.exe main.py --scenario scenarios/offline/sample-pdf-offline-smoke.yaml
```
运行完成后会输出到:
```text
runs/sample-offline-baseline/<run_id>/
├── scenario.snapshot.yaml
├── scores.csv
├── invalid.csv
├── summary.md
└── metadata.json
```
## 5. 在线接入预留
当前骨架已经预留了两类一等公民 adapter
- `http`
- `python`
本地 Python adapter 示例在 [apps/sample_python/adapter.py](/C:/Users/A200477427/Learnings/ragas-template/apps/sample_python/adapter.py)。你后面要接自己的 RAG 应用时,只需要把真实逻辑适配成:
```python
def run(question: str, **kwargs) -> dict:
return {
"answer": "...",
"contexts": ["...", "..."],
"raw_response": {...},
}
```
其中 [apps/sample_python/adapter.py](/C:/Users/A200477427/Learnings/ragas-template/apps/sample_python/adapter.py) 只是最小 contract 示例。
如果你要直接评测 `dataset_build` 产出的 PDF 题库,仓库里现在提供了专用实现:
- adapter: [apps/pdf_question_bank/adapter.py](/C:/Users/A200477427/Learnings/ragas-template/apps/pdf_question_bank/adapter.py)
- online scenario: [scenarios/online/sample-pdf-question-bank-online.yaml](/C:/Users/A200477427/Learnings/ragas-template/scenarios/online/sample-pdf-question-bank-online.yaml)
这个 adapter 会读取题库行中的 `source_chunk_ids`,再从 `source_chunks.jsonl` 里解析出证据块,把这些证据块直接作为 `contexts`,并调用本地 OpenAI 兼容模型生成 `answer`
## 6. 结果资产
每次运行都会写出标准本地资产:
- `scenario.snapshot.yaml`:本次运行的实际配置快照
- `scores.csv`:逐样本评分结果
- `invalid.csv`:无效样本
- `summary.md`:汇总报告
- `metadata.json`:机器可读元数据
这意味着后续你比较不同模型、不同 prompt、不同检索策略时不需要再靠手工记参数。
## 7. PDF 题库构建
仓库现在额外支持把 PDF 文档解析成可人工复核的在线题库草稿。最推荐的阅读顺序是:
- 快速入口看本节
- 端到端案例看 [docs/sample-pdf-question-bank-workflow.md](/C:/Users/A200477427/Learnings/ragas-template/docs/sample-pdf-question-bank-workflow.md)
样例配置在:
- [scenarios/dataset_build/sample-pdf-build.yaml](/C:/Users/A200477427/Learnings/ragas-template/scenarios/dataset_build/sample-pdf-build.yaml)
运行方式:
```powershell
uv run main.py --dataset-build-config scenarios/dataset_build/sample-pdf-build.yaml
or
.\.venv\Scripts\python.exe main.py --dataset-build-config scenarios/dataset_build/sample-pdf-build.yaml
```
这条链路会:
- 扫描单个 PDF 或 PDF 目录
- 调用阿里云解析能力并归一化成 `source chunks`
- 调用 LLM 生成在线评测题库草稿
- 输出带时间戳的 run 资产,以及稳定入口 `latest/source_chunks.jsonl``latest/dataset_draft.csv``latest/metadata.json`
生成后的草稿 dataset 默认只要求 `question``ground_truth`,后续进入 `online` 评测时再由 adapter 补齐 `answer``contexts`
现在这条在线链路已经有一个真实样例:
```powershell
uv run main.py --scenario scenarios/online/sample-pdf-question-bank-online.yaml
or
.\.venv\Scripts\python.exe main.py --scenario scenarios/online/sample-pdf-question-bank-online.yaml
```
这个 scenario 会:
- 读取 [datasets/raw/generated/sample-pdf-question-bank.csv](/C:/Users/A200477427/Learnings/ragas-template/datasets/raw/generated/sample-pdf-question-bank.csv)
- 使用 `apps/pdf_question_bank/adapter.py`
- 显式绑定到 sample build 的稳定入口 `outputs/dataset-builds/sample-pdf-question-bank/latest/source_chunks.jsonl`
- 在线生成 `answer`
- 再用 `ground_truth` 对生成结果打分
如果你想按完整顺序跑一遍 sample从环境变量、dataset build、online eval 到结果查看,直接看:
- [docs/sample-pdf-question-bank-workflow.md](/C:/Users/A200477427/Learnings/ragas-template/docs/sample-pdf-question-bank-workflow.md)
如果你只想先快速跑通离线评测,不想先重新生成题库,可以直接用上面的 [scenarios/offline/sample-pdf-offline-smoke.yaml](/C:/Users/A200477427/Learnings/ragas-template/scenarios/offline/sample-pdf-offline-smoke.yaml)。它是从 sample PDF build 产物固化出来的 smoke dataset使用 `source chunks` 作为 `contexts`,并用 `ground_truth` 复用为 `answer`