跳到主要内容

📝 KnowFlow v0.0.5 发布:新增 Markdown 智能分块和按标题分块策略

· 阅读需 5 分钟
KnowFlow 团队
KnowFlow 核心开发团队

🎉 版本亮点

KnowFlow v0.0.5 重磅发布!新增 Markdown 智能分块按标题分块策略,检索效果显著提升。

📈 版本演进

v0.0.4 → v0.0.5 升级路径

版本核心特性状态
v0.0.4MinerU 模型文档解析,多文件格式支持✅ 可用状态
v0.0.5Markdown 智能分块,三方接入增强🚀 好用状态

🎯 本次更新重点

  1. 分块策略优化:增强 MinerU 解析产物 Markdown 文件的分块策略
  2. 检索效果提升:显著提升分块检索效果和最终召回准确率
  3. 三方接入增强:完善微信、企业微信应用等接入能力
产品理念

基于从可用到好用的产品迭代思路,v0.0.5 专注于提升用户体验和系统性能。

🤔 为什么要优化 Markdown 分块?

📊 现状分析

随着 OCR 技术不断完善,市场上绝大多数 OCR 开源项目都会将 PDF、DOC 等格式文件转化为 Markdown,生成质量持续提升。

⚠️ 传统分块策略的问题

RAGFlow 原有的 Markdown 分块策略存在以下问题:

问题类型具体表现影响
结构破坏简单中间分割破坏句子/段落完整性语义丢失
语法忽略未考虑 Markdown 语法,代码块中间分割内容错乱
上下文分离表格行与上下文分离信息孤立
粗暴拆解固定 token 数拆解,破坏结构检索效果差

🎯 核心问题

关键问题

缺乏语义理解:直接提取 Markdown 元素,通过固定 token 数粗暴拆解,破坏表格、列表、标题的上下文结构,直接影响检索效果。

理想化的分块效果是什么?

对于 Markdown 文件来说,我们期望的效果是:每一个分块都应该是语义完整、上下文连贯、结构明确且内容相关的最小单元。

• 分块太细,向量数量增加,检索成本和索引开销上升 • 分块太粗,效果下降,由于内容分布稀疏,召回率降低

对于 token 数量,业内一般实践经验如下:对于 Markdown 我们推荐在 300 左右,根据文档的结构适当调整。

我们是怎么实现分块增强的?

考虑到不同场景需要用到不同的分块策略,我们提供了三种策略模式,适用于不同的场景,可以通过配置项进行选择。

策略 1:Basic 分块方法(基础原生方案)

这是 RAGFlow 原生方案,原理如下:

  1. 基于简单的文本规则进行分块
  2. 优先处理表格,转换为 HTML 格式
  3. 按换行符等分隔符进行文本段落合并
  4. 基本的 Token 数量控制

优点在于性能最快、简单可靠,缺点语义理解较差,分块质量一般。

策略 2:Smart AST 分块策略

Smart AST 分块策略技术实现如下:

  1. 通过 markdown-it-py 解析 Markdown 为 AST(抽象语法树)
  2. 基于语义边界进行智能分块,如标题、段落、表格、代码块
  3. 维护上下文关系,保持标题间的层级关系,如 H1、H2、H3
  4. 对于特殊内容,如表格、代码块,我们特殊考虑,可以突破 token 数量限制,保证且内容完整性

基于 AST 理解文档结构,在合理的语义边界分块

✅ 质量稳定 - Token 分布更均匀(106-1672,平均422) ✅ 内容保护 - 自动保持表格、代码块、列表的完整性 ✅ 上下文感知 - 维护标题层级关系,分块时考虑文档结构 ✅ 性能平衡 - 在样本数据测试仅比基础方案慢 0.005s,性价比高

策略 3:基于标题层级的 Markdown 分块

该策略主要设计思路是以标题驱动为主,所以相对来说分块较大,同时支持上下文增强以及重叠串设置:

  1. 标题驱动分块 - 以 H1、H2、H3 作为主要分块边界
  2. 动态大小控制 - 目标 300-600 tokens,最大 800 tokens,最小 50 tokens
  3. 智能分割策略 - 处理超大分块时在段落边界进一步分割
  4. 智能合并策略 - 处理超小分块时与相邻分块合并
  5. 特殊内容保护 - 维护表格、代码块、公式的完整性
  6. 上下文增强 - 为小分块添加上下文信息

相比原生和 Smart 方案的优势:

✅ 最佳分块质量 - 平均 504 tokens,分布最合理 ✅ 智能优化 - 自动处理过大/过小分块问题 ✅ 上下文增强 - 小分块自动添加相关标题背景 ✅ 容错性强 - 出错时自动降级到 Smart 方案 ✅ 灵活配置 - 支持重叠分块、最小 Token 数等高级参数

缺点在于分块偏大,不太稳定,适合于标题层级较多,层与层之前文本不多,细而碎的这种文本结构。

三方接入支持自动创建会话

之前的微信三方接入系统中,要求在配置文件中配置会话 ID,在并发场景下,多个人采用相同会话 ID 会串行等待。本次优化针对不同的会话 ID 创建不同的 RAGFlow 会话,这种设计支持不同的会话存在不同的上下文,且同时简化了配置复杂度,更好满足企业生产环境三方应用接入。

总结

本次在测试过程中,发现同一份文档不同的分块策略,在特定的问题检索上差异巨大,其中策略 2 表现效果远远超出预期。但文档的结构解析仍然存在巨大的提升空间,我们把 PDF 送到 MinerU 在线体现环境里测试,对于表格结构的识别效果有了显著提升。

通过这次版本更新,KnowFlow 在文档处理和检索准确性方面又迈进了一大步,为用户提供了更加智能和精准的文档分析能力。