Ch37: 五平台 RAG 对照实验——同一 corpus 横向评测
Part 9 终章 · 前置:Ch33–Ch36 + Ch20 Benchmark Lab
结论先行:大师不站队单个平台——用 同一套 lab corpus + queries-smoke-20.jsonl + 统一 LLM,在 WeKnora / Dify / RAGFlow / FastGPT / AnythingLLM 上跑 smoke,结果填入 results-smoke-template.md。这是选型与 PR 论证的 最低成本可复现实验;禁止写「X 全面最好」,只写 场景化赢家(A 组精确、D 组表格、C 组多跳等)。
一、日常类比
五平台对照像 同一份考卷五所学校联考:题目(query)、教材(corpus)、阅卷标准(expect 字段)固定,才能说「A 校数学强、B 校语文强」。换 corpus 或换 LLM 却不记录,等于换考卷却比较总分——结论无效。
二、Commit / 版本 Pin 说明
实验前填 results-smoke-template.md 元数据表:
| 平台 | Pin 建议 |
|---|---|
| WeKnora | git rev-parse HEAD |
| Dify | Docker 0.15.x 或 clone 日 2026-06 |
| RAGFlow | compose 镜像 tag + commit |
| FastGPT | main @ 2026-06 commit |
| AnythingLLM | master @ 2026-06 commit |
| LLM(统一) | 例 DeepSeek-chat,五平台同一 API Key |
Corpus 版本固定:lab/corpus/ v0.1(三篇 MD,见下表)。
三、Lab 资产目录地图
| 路径 | 用途 |
|---|---|
| lab/corpus/weknora-arch.md | 三路检索、RRF、Agentic(B/C/T 组) |
| lab/corpus/parse-pitfalls.md | DISPIMG、HTML 表(D 组) |
| lab/corpus/faq-version-conflict.md | 8 vs 10 库时效冲突(A3) |
| lab/queries-smoke-20.jsonl | 20 条分组 query(A–E + X/M/T) |
| lab/results-smoke-template.md | ✓/✗ 填表 + 200 字结论 |
| lab/README.md | 30 min 最小 smoke 步骤 |
与 benchmark/smoke-10.jsonl 关系:10 条走 RAGAS 脚本回归;20 条走 五平台横向——corpus 中 relevant_doc_ids 对齐。
四、一条具体调用链(以 WeKnora 跑 A1 为例)
固定 corpus 已 ingest 到知识库 kb-lab-v01:
用户输入「错误码 E1042 是什么意思?」 # queries-smoke-20.jsonl id=A1
→ internal/handler/chat_handler.go # POST /chat/query
→ internal/service/chat_service.go # Answer()
→ internal/service/retrieval_service.go # HybridSearch
→ internal/infrastructure/retrieval/bm25.go # 精确路命中 E1042
→ internal/infrastructure/retrieval/vector.go
→ internal/infrastructure/retrieval/graph.go # PMI(C 组才关键)
→ internal/infrastructure/retrieval/rrf.go # 融合
→ internal/infrastructure/rerank/... # 复合 Rerank
→ internal/infrastructure/llm/client.go # 生成(统一 DeepSeek)
其他平台见 Ch33–Ch36 各章调用链。同 query、不同链,结果才可比。
五、实验分组与 grep 辅助
| 组 | 类型 | 条数建议 | 预期差异点 |
|---|---|---|---|
| A | 精确错误码/参数 | ≥4 | BM25 / 关键词路 |
| B | 概念改写 | ≥4 | 向量语义 |
| C | 多跳关系 | ≥4 | WeKnora 三路/图谱 |
| D | 表格/解析 | ≥4 | RAGFlow DeepDoc |
| E | FAQ 口语 | ≥4 | FastGPT QA 索引 |
| X/M/T | 对抗/跨语言/长文 | 各 ≥1 | 鲁棒与成本 |
jq -r '.id + " " + .group' lab/queries-smoke-20.jsonl
rg 'E1042|DISPIMG|向量库' lab/corpus/
六、结果表示例(仅 WeKnora,其余平台待填)
摘自 results-smoke-template.md,示范行只填 WeKnora 的 A1、D3:
| query_id | WeKnora | Dify | RAGFlow | FastGPT | AnythingLLM | 备注 |
|---|---|---|---|---|---|---|
| A1 | ✓ | BM25 命中错误码(示例) | ||||
| D3 | ✓ | parse 过滤 DISPIMG(示例) |
图例:✓ · ✗ · △ · 空=未测。完整 smoke 见 lab/README.md(A3/X1/M1)。200 字结论必填,骨架见 results-smoke-template.md。
七、动手练习(45–60 分钟)
| 时段 | 任务 |
|---|---|
| 0–10 min | Fork/clone lab/corpus/ 三文件,五平台各建空知识库 |
| 10–25 min | WeKnora ingest 全套 corpus,跑 A1、D3 人工判 ✓/✗ |
| 25–40 min | 任选 第二平台(建议 RAGFlow)同 corpus ingest,只复跑 A1、D3 |
| 40–60 min | 复制 results-smoke-template.md,填元数据 + A1/D3 示例 + 100 字结论 |
Cases:D3→case-1785;D 组→case-1725;A3→faq-version-conflict.md。
章末自检
- 说出 lab 三篇 corpus 各测哪类 query(A/B/C/D/E)
- 在 results 模板中正确填写 pin 与统一 LLM 字段
- 完成至少 2 条 query 的 2 平台 smoke(含 A1 或 D3)
- 写一段 200 字内场景化选型(含「谁在哪组更强、为何」)
延伸阅读
- Lab README · 选型决策树
- Ch07 平台矩阵 · Ch20 Benchmark
- WeKnora 实战 · Ch33–Ch36 源码走读