📝 KnowFlow v0.0.5 发布:新增 Markdown 智能分块和按标题分块策略
🎉 版本亮点
KnowFlow v0.0.5 重磅发布!新增 Markdown 智能分块和按标题分块策略,检索效果显著提升。
📈 版本演进
v0.0.4 → v0.0.5 升级路径
版本 | 核心特性 | 状态 |
---|---|---|
v0.0.4 | MinerU 模型文档解析,多文件格式支持 | ✅ 可用状态 |
v0.0.5 | Markdown 智能分块,三方接入增强 | 🚀 好用状态 |
🎯 本次更新重点
- 分块策略优化:增强 MinerU 解析产物 Markdown 文件的分块策略
- 检索效果提升:显著提升分块检索效果和最终召回准确率
- 三方接入增强:完善微信、企业微信应用等接入能力
基于从可用到好用的产品迭代思路,v0.0.5 专注于提升用户体验和系统性能。
🤔 为什么要优化 Markdown 分块?
📊 现状分析
随着 OCR 技术不断完善,市场上绝大多数 OCR 开源项目都会将 PDF、DOC 等格式文件转化为 Markdown,生成质量持续提升。
⚠️ 传统分块策略的问题
RAGFlow 原有的 Markdown 分块策略存在以下问题:
问题类型 | 具体表现 | 影响 |
---|---|---|
结构破坏 | 简单中间分割破坏句子/段落完整性 | 语义丢失 |
语法忽略 | 未考虑 Markdown 语法,代码块中间分割 | 内容错乱 |
上下文分离 | 表格行与上下文分离 | 信息孤立 |
粗暴拆解 | 固定 token 数拆解,破坏结构 | 检索效果差 |
🎯 核心问题
缺乏语义理解:直接提取 Markdown 元素,通过固定 token 数粗暴拆解,破坏表格、列表、标题的上下文结构,直接影响检索效果。
理想化的分块效果是什么?
对于 Markdown 文件来说,我们期望的效果是:每一个分块都应该是语义完整、上下文连贯、结构明确且内容相关的最小单元。
• 分块太细,向量数量增加,检索成本和索引开销上升 • 分块太粗,效果下降,由于内容分布稀疏,召回率降低
对于 token 数量,业内一般实践经验如下:对于 Markdown 我们推荐在 300 左右,根据文档的结构适当调整。
我们是怎么实现分块增强的?
考虑到不同场景需要用到不同的分块策略,我们提供了三种策略模式,适用于不同的场景,可以通过配置项进行选择。
策略 1:Basic 分块方法(基础原生方案)
这是 RAGFlow 原生方案,原理如下:
- 基于简单的文本规则进行分块
- 优先处理表格,转换为 HTML 格式
- 按换行符等分隔符进行文本段落合并
- 基本的 Token 数量控制
优点在于性能最快、简单可靠,缺点语义理解较差,分块质量一般。
策略 2:Smart AST 分块策略
Smart AST 分块策略技术实现如下:
- 通过 markdown-it-py 解析 Markdown 为 AST(抽象语法树)
- 基于语义边界进行智能分块,如标题、段落、表格、代码块
- 维护上下文关系,保持标题间的层级关系,如 H1、H2、H3
- 对于特殊内容,如表格、代码块,我们特殊考虑,可以突破 token 数量限制,保证且内容完整性
基于 AST 理解文档结构,在合理的语义边界分块
✅ 质量稳定 - Token 分布更均匀(106-1672,平均422) ✅ 内容保护 - 自动保持表格、代码块、列表的完整性 ✅ 上下文感知 - 维护标题层级关系,分块时考虑文档结构 ✅ 性能平衡 - 在样本数据测试仅比基础方案慢 0.005s,性价比高
策略 3:基于标题层级的 Markdown 分块
该策略主要设计思路是以标题驱动为主,所以相对来说分块较大,同时支持上下文增强以及重叠串设置:
- 标题驱动分块 - 以 H1、H2、H3 作为主要分块边界
- 动态大小控制 - 目标 300-600 tokens,最大 800 tokens,最小 50 tokens
- 智能分割策略 - 处理超大分块时在段落边界进一步分割
- 智能合并策略 - 处理超小分块时与相邻分块合并
- 特殊内容保护 - 维护表格、代码块、公式的完整性
- 上下文增强 - 为小分块添加上下文信息
相比原生和 Smart 方案的优势:
✅ 最佳分块质量 - 平均 504 tokens,分布最合理 ✅ 智能优化 - 自动处理过大/过小分块问题 ✅ 上下文增强 - 小分块自动添加相关标题背景 ✅ 容错性强 - 出错时自动降级到 Smart 方案 ✅ 灵活配置 - 支持重叠分块、最小 Token 数等高级参数
缺点在于分块偏大,不太稳定,适合于标题层级较多,层与层之前文本不多,细而碎的这种文本结构。
三方接入支持自动创建会话
之前的微信三方接入系统中,要求在配置文件中配置会话 ID,在并发场景下,多个人采用相同会话 ID 会串行等待。本次优化针对不同的会话 ID 创建不同的 RAGFlow 会话,这种设计支持不同的会话存在不同的上下文,且同时简化了配置复杂度,更好满足企业生产环境三方应用接入。
总结
本次在测试过程中,发现同一份文档不同的分块策略,在特定的问题检索上差异巨大,其中策略 2 表现效果远远超出预期。但文档的结构解析仍然存在巨大的提升空间,我们把 PDF 送到 MinerU 在线体现环境里测试,对于表格结构的识别效果有了显著提升。
通过这次版本更新,KnowFlow 在文档处理和检索准确性方面又迈进了一大步,为用户提供了更加智能和精准的文档分析能力。