RAGFlow 实战(二):文档解析实战——按文档类型选切块策略

系列导航:(一)部署、鉴权与排障;(二)本篇;(三)检索调参实录;(四)API 自动化。

一、一个反直觉的结论:解析质量的上限在「切块」,不在「识别」

刚开始用 RAGFlow,我默认「扫描件才需要担心解析,文本文件还不是随便切」。直到拿一份 CSV 产品参数表做问答,检索结果一塌糊涂,才反应过来:

CSV 是纯文本,根本不需要 OCR——OCR 是给像素的。CSV 的病在切块方式,不在识别。

同一份 CSV,两种切块方法的实测对比:

切块方法结果
General(naive)切出 ~2000 个「合并块」,一行数据被切得七零八落
Table切出 ~10000 个「行级块」,每行一个块,字段齐全

行级块长这样,检索和阅读都友好:

1
2
3
4
- Product ID: M20978
- Torque: 45 N·m
- Voltage: 24V
- 负责人: 唐博涛

RAGFlow 的 Table 切块会按列类型生成可过滤字段,等于给每行数据建了结构化索引。表格类文档(CSV/Excel/数据库导出)无脑选 table,这是这篇最核心的一条经验。

二、按文档类型选策略:一张决策表

小半年用下来,我把常见文档类型和切块方法的对应关系整理成这张表:

文档类型推荐切块方法关键配置 / 注意
CSV / Excel 数据表table行级块 + 列类型字段;验收看块数 ≈ 行数
合同、条款类laws 或 naive + 结构保护「第X条」不可分割,靠结构保护兜底
技术文档(多级标题)naive 或 paperlanguage 必须设 Chinese
扫描件 / 图片 PDFnaive(走 OCR)OCR 在这类文档才有意义
论文paper按论文结构(摘要/章节)切
演示文稿presentation按页切,每页一图一文
邮件归档email按邮件线程切
知识图谱knowledge_graph实体关系抽取

三、中文语料:不设 language,等于按英文断句切中文

这是第二个吃过大亏的坑。中文技术文档建库后,检索怎么调都不准,查了一圈才发现:**建库时没把 language 设成 Chinese**。

RAGFlow 的默认语言是 English,会按英文的句读习惯给中文断句,块边界一塌糊涂——意思完整的句子被切两半,检索自然残血。

1
2
# 建库时显式指定
kb create --name "技术文档库" --lang Chinese --chunk_method naive

中文语料建库第一件事:设 language = Chinese。这条没有报错,只会 quietly 让你的检索效果打八折。

四、结构化单元保护:表格、列表、条款的 A/B 测试法

RAGFlow 有个「结构化单元保护(后置修正)」开关——初次切片按 token 数机械切,切完再来一轮「结构修复」,把被切断的表格/列表/条款合并回完整单元。

怎么验证它有没有用?我专门造了一篇「专治各种切断」的测试文档,覆盖四类最易被切坏的结构:

  1. 大表格:40 行 × 6 列,行数多到必然被从中间切断;
  2. 长列表:25 项验收检查项;
  3. 合同条款:「第X条」开头的条款块;
  4. 多级标题:三级标题下挂小表格 + 结尾说明。

测试方法就一招——开关对比法:

1
2
关闭保护 → 上传解析 → 记录切片情况
开启保护 → 重新解析 → 对比四个指标
结构单元关闭时的典型问题开启后的预期
大表格从中间某行切成两半表格完整成块
长列表列表项跨块断裂列表连续
合同条款「第X条」只剩前半段条款完整
多级标题标题孤悬在块末尾标题 + 内容同块

判断标准很朴素:检索这个表格时,能不能一次拿回整张表。拿不回来,就是切坏了。

五、一个必须养成的习惯:改切块方法,要删文档重传

改完切块方法,必须删除文档重新上传再解析,否则你看到的还是旧切片——页面不报错,只是不更新。验收标志:

  • 块数 ≈ 数据行数(table 方法);
  • 切片内容是竖排 - 字段: 值;
  • 表格/条款完整成块。

我一开始在 Web 里改完设置就直接重新解析,盯着旧切片看了半小时,以为功能坏了。

六、入库前先清洗:AI 的「思考过程」会污染检索

最后一条血泪教训:素材里混进 AI 的「思考过程」文本,会长期占据检索 Top-1。

比如这种段落:

1
好的,用户正在创作一部古装短剧,需要设计一个开篇钩子。让我分析一下目标受众……

它语义宽泛、和什么都像,一旦入库,各种查询都能命中它,把真正有用的内容挤下去。入库前把 AI 思考过程、寒暄、元描述类文本洗掉——这条对「用 AI 辅助生产再入库」的流水线尤其重要。

七、小结

文档解析的经验可以浓缩成五条:表格用 table、中文设 Chinese、结构化文档开保护、改方法要重传、入库前清洗。全部是「不报错但效果打折」的坑,也全部可以用 A/B 测试验证。下一篇讲检索侧——切好了只是上半场,检得准才是胜负手。