Ch17: RAGFlow 架构精读——DeepDoc 与模板分块
Part 3 续:平台专章 前置:Ch16: Dify 后续:Ch18: FastGPT 完整精读:精读: RAGFlow
结论先行:RAGFlow 把 文档解析 当作 RAG 的天花板——DeepDoc 五步管线(版面→OCR→TSR→公式→组装)+ 9 种模板分块,检索端反而「够用即可」(BM25+向量)。WeKnora 竞赛的高 ROI 方向之一:在 IMA/docparser 层借鉴 DeepDoc,而非继续只卷 RRF。
调研元信息
| 项目 | 值 |
|---|---|
| 仓库 | infiniflow/ragflow |
| Stars | ~83K |
| 栈 | Python + Flask + React |
| 核心模块 | deepdoc/、rag/ |
一、设计哲学:向上游要质量
垃圾进垃圾出——再强的向量检索也拼不回被切碎的表格。
WeKnora 与 RAGFlow 互补:
| 环节 | RAGFlow | WeKnora |
|---|---|---|
| 摄入 | DeepDoc 极深 | IMA 中等 |
| 检索 | 双路+权重 | 三路+RRF+复合 Rerank |
| 图谱 | LLM Graph(实验) | PMI 统计 |
二、DeepDoc 五步管线
PDF 页图
→ Layout Analysis(文本/表/图/标题检测)
→ Text Extraction(内嵌文本 or OCR)
→ Table Structure Recognition(行列、跨行跨列)
→ Formula Extraction(→ LaTeX)
→ Structured Assembly(保序输出 HTML/MD chunk)
| 步骤 | 失败症状 | WeKnora issue 关联 |
|---|---|---|
| Layout | 表格当正文切 | docparser 类 |
| OCR | 扫描件空白 | docreader |
| TSR | 营收与数字分 chunk | case-1725 |
| 公式 | 论文检索不到 | 多模态向 |
详见 Ch13 多模态 RAG。
三、九种模板分块
| 模板 | 分块逻辑 | 典型文档 |
|---|---|---|
| 通用 | 语义段 | Markdown |
| 论文 | 摘要/方法/实验 | PDF 论文 |
| 法律 | 条/款/项 | 合同法规 |
| 财报 | 整表不切断 | 年报 |
| 简历 | 字段块 | CV |
| 问答 | Q-A 对 | FAQ |
代价:用户须选对模板——错模板比固定分块更糟。
四、检索与 Graph RAG(实验)
检索:BM25 + 向量 → 权重融合 → 可选 Rerank。深度弱于 WeKnora,** intentional**。
Graph RAG:LLM 抽 (头, 关系, 尾) 三元组。对比 WeKnora PMI 无向共现:
| RAGFlow Graph | WeKnora PMI | |
|---|---|---|
| 成本 | 高(每页多次 LLM) | 低(统计) |
| 关系类型 | 有向、有语义 | 共现强度 |
| 冷启动 | 依赖 LLM 质量 | 依赖共现频次 |
五、部署与性能
组件:RAGFlow Server + ES/Milvus + MinIO + Redis + MySQL。
- DeepDoc GPU 显著加速;CPU 复杂 PDF 可达分钟级。
- Graph 模块标注 experimental,生产需谨慎。
六、WeKnora 可迁移实践清单
| 借鉴点 | 实现提示 | 竞赛价值 |
|---|---|---|
| 表格整 chunk | chunker 识别 <table> / MD 管道表 |
高 |
| 模板分块 | 上传时选 doc type | 中 |
| 版面分析 | 与 PaddleOCR-VL 输出对齐 | 高(#1725 类) |
| HTML→MD 保结构 | docparser 转换层 | 中 |
章末自检
- 画出 DeepDoc 五步及每步输出
- 解释「财报模板」如何解决表格撕碎
- 对比 PMI 与 LLM Graph 的 cost/quality trade-off
- 若 PDF 表格 QA 全错,列出从 Layout 到 chunker 的排查顺序