RAGFlow 适配 MinerU v2.5.4, 支持 vlm 和 pipline 双模式;MinerU/Dots 无缝接入 RAGFlow,新增父子、语义、标题、正则切片方法
摘要:RAGFlow适配MinerUv2.5.4,支持vlm和pipline双模式,新增父子、语义、标题、正则切片方法。架构设计采用解析器与分块方法分离,提升复用性和维护性。优化了RBAC权限检查,响应速度从700ms提升至200ms,并修复了坐标映射等问题。MinerUv2.5.4识别效果显著,支持自动跨页表格合并。未来将聚焦多模态开发,实现图文搜索功能。开源社区版已更新至v2.0.8。
前言
对于 RAGFlow 集成 MinerU/Dots ,我们期望能够复用 TaskQueue 以及自动关键词、关键问题、Raptor、知识图谱。
为了解决这个问题,架构设计遵循 RAGFlow 最佳实践,我们将 MinerU/Dots 定义为布局解析器,父子、语义、标题、正则分块策略调整为切片方法。

带来的好处在于能够充分复用 RAGFlow 已有的功能,同时技术架构设计上也更加合理,产品可维护性大大提升。

MinerU/Dots 全新架构设计
系统分层架构

架构设计原则
核心设计理念:解析器与分块方法分离
-
解析器职责(MinerU/DOTS/DeepDoc)
将 PDF 转换为结构化的 markdown + 坐标信息-
返回格式:
[(text_with_position_tag, layout_type), ...] -
示例:
("@@0\t100\t200\t50\t70##这是一段文本", "text")
-
-
分块方法职责(naive/paper/book 等)
-
接收解析器输出,按照语义规则进行分块
-
处理格式:
[(text, position_tag), ...] -
支持调用 Smart Chunk API 进行智能分块
-
-
Smart Chunk API 职责
-
基于 middle.json 的精确坐标映射
-
提供多种分块策略(smart、parent_child、regex 等)
-
为每个 chunk 返回精确的坐标数组
-
实现细节
class MinerUParser(object):
def __init__(self):
# 从环境变量读取 KnowFlow Server URL
self.knowflow_server_url = os.getenv(
'KNOWFLOW_SERVER_URL',
'http://localhost:5000'
)
self.timeout = int(os.getenv('MINERU_PARSE_TIMEOUT', '300'))
def chunk(self, filename, binary=None, from_page=0, to_page=100000,
lang="Chinese", callback=None, kb_id=None, **kwargs):
"""
MinerU 文档解析入口
Returns:
List[dict]: [
{
"content_with_weight": str, # 文本内容
"positions": [[page, x0, x1, y0, y1], ...], # 坐标数组
"layout_type": str, # 布局类型
"image": PIL.Image (可选) # 图片对象
},
...
]
"""
# 1. 调用 KnowFlow API 进行 MinerU 解析
response = self._call_mineru_api(
binary, from_page, to_page, kb_id, callback
)
# 2. 获取结果
boxes = response['boxes'] # 语义块级别(用于 general 分块)
markdown_text = response['markdown'] # 逐行级别(用于 smart 分块)
coordinate_map = response['coordinate_map'] # 坐标映射
# 3. 转换为标准格式:(text_with_tag, layout_type)
sections = self._convert_to_sections(boxes)
return sections
格式转换示例:
# MinerU 输出格式(由 KnowFlow API 返回)
boxes = [
{
'text': '# 第一章 引言',
'page_number': 0,
'x0': 100, 'x1': 500, 'top': 50, 'bottom': 80,
'layout_type': 'title'
},
{
'text': '这是一段正文内容。',
'page_number': 0,
'x0': 100, 'x1': 500, 'top': 100, 'bottom': 120,
'layout_type': 'text'
}
]
# 转换为 sections 格式(传递给分块方法)
sections = [
("@@0\t100\t500\t50\t80##第一章 引言", "title"),
("@@0\t100\t500\t100\t120##这是一段正文内容。", "text")
]
值得一提的是坐标映射,对于语义分块/父子分块/标题分块等切块方法,通过解析 OCR block 数据,构建行级别的坐标映射关系。而对于 RAGFlow 已有的 naive/paper/book 等方法,我们提供了和 DeepDoc 类似的基于语义结构的 sections。这样的设计方案保障了 MinerU/Dots 支持 RAGFlow 原有的 naive/paper/book 等分块方法。
MinerU v2.5.4 适配
MinerU v2.5.4 相比于我们之前适配的 v2.1.0 版本差异巨大,去除了 sglang 模式,提供了 vllm 模式用于替代原先 sglang。
MinerU v2.5 默认参数下 vllm 显存占用 23G 左右,pipline 2G 左右。
现在已支持自动跨页表格功能合并。
实测下来 MinerU v2.5 识别效果在闭源离线模型中可谓是惊艳,强烈安利。

优化
-
RBAC 权限检查优化为批量检查,提升网页响应速度
原先知识库列表页面,对于列表每一个知识库单独调用权限检查;现优化成统一批量接口进行批量权限检查,网页响应速度从 700ms 优化成 200ms.
-
分块预览支持 MarkDown ,支持标题、公式、列表渲染

修复
-
坐标映射从文本相似度调整为基于 block 数据按行映射,100% 准确
-
修复 flow 创建失败的问题
未来展望
本版本技术重构遵循了 RAGFlow 设计规范,从根本上提升了产品的易用性和可维护性。
下个版本我们将会围绕多模态场景进行开发,实现图文搜图文功能。
开源
本项目社区版已更新至 v2.0.8 版本,支持 RBAC 简略版以及适配 v0.20.1 版本。
欢迎关注公众号「KnowFlow 企业知识库」加入内部交流群,学习和分享 RAG 知识库。
更多推荐

所有评论(0)