1. 什么是 MinerU?
在大模型应用开发中,RAG(Retrieval-Augmented Generation,检索增强生成)已经成为企业知识库问答的重要技术方案。
一个完整的 RAG 流程通常包括:
文档数据 ↓ 文档解析 ↓ 文本切片 ↓ Embedding向量化 ↓ 向量数据库存储 ↓ 用户检索 ↓ 大模型生成答案其中,文档解析是整个流程的第一步,也是影响后续检索效果的重要环节。
MinerU 就是用于解决这一问题的开源文档解析工具。
简单来说:
MinerU 是一个面向大模型应用场景的 PDF 文档解析工具,可以将复杂 PDF 转换为结构化 Markdown 或 JSON 数据,为后续 RAG 知识库构建提供高质量数据。
传统 PDF 解析工具通常只能简单提取文字,但面对论文、报告、技术文档等复杂 PDF 时,会出现:
阅读顺序混乱
图片丢失
表格结构破坏
公式无法识别
页眉页脚干扰
而 MinerU 的目标就是让 PDF 变成大模型能够理解的知识数据。
2. MinerU在RAG中的位置
在实际的大模型应用中,MinerU通常处于知识库构建阶段:
PDF文件 | ↓ MinerU文档解析 | ↓ Markdown结构化文本 | ↓ 文本切片Chunk | ↓ Embedding模型 | ↓ Milvus等向量数据库 | ↓ Retriever检索 | ↓ LLM生成回答可以看到:
MinerU负责“理解文档结构”
Embedding负责“理解文本语义”
向量数据库负责“快速检索”
三者作用不同。
3. MinerU调用方式
MinerU主要有三种使用方式:
3.1 命令行调用
这是最简单也是最常见的方式。
安装:
pip install magic-pdf查看版本:
magic-pdf --version准备一个PDF:
data/ └── test.pdf执行解析:
magic-pdf -p data/test.pdf -o output参数说明:
-p: 指定输入PDF文件 -o: 指定输出目录执行完成后:
output | ├── test.md ├── images └── middle.json其中:
Markdown文件
主要用于RAG:
例如:
# 运动康复指南 ## 膝关节损伤注意事项 避免高强度训练...相比普通文本,Markdown保留了:
标题层级
段落关系
表格结构
更方便后续切片。
images目录
保存PDF中的图片资源。
例如:
images/ | ├── image1.png └── image2.png如果后续做多模态RAG,可以继续处理这些图片。
JSON文件
保存更加详细的结构化信息。
例如:
{ "type":"text", "content":"运动注意事项" }方便程序进一步处理。
4. Python代码调用
如果希望把 MinerU 集成到自己的应用中,可以通过 Python 调用。
基本流程:
读取PDF ↓ 创建数据集 ↓ 执行解析Pipeline ↓ 生成Markdown示例:
from magic_pdf.data.data_reader_writer import FileBasedDataReader from magic_pdf.data.dataset import PymuDocDataset pdf_path = "test.pdf" reader = FileBasedDataReader("") pdf_bytes = reader.read(pdf_path) dataset = PymuDocDataset(pdf_bytes) result = dataset.apply( dataset.get_pipe() ) markdown = result.get_markdown() print(markdown)得到结构化文本后:
chunks = text_splitter.split_text(markdown) vectors = embedding.embed_documents(chunks) milvus.insert(vectors)即可进入RAG后续流程。
5. 企业项目中的调用方式
在实际生产环境中,一般不会让业务服务直接调用 MinerU。
更常见的是:
用户上传PDF | ↓ 文件存储服务 (MinIO/S3) | ↓ 文档解析服务 | ↓ MinerU | ↓ Markdown/JSON结果 | ↓ 知识库构建流程例如:
后端使用 Spring Boot:
Spring Boot | | HTTP请求 | ↓ FastAPI + MinerU原因:
MinerU基于Python生态
AI处理任务和业务服务解耦
方便扩容和维护
6. MinerU底层处理流程
MinerU并不是简单地读取PDF文字,而是包含多个处理阶段。
6.1 PDF解析
首先读取PDF文件:
PDF | ↓ 页面信息获取:
页面大小
文本对象
图片对象
坐标信息
6.2 页面布局分析(Layout Analysis)
这是MinerU的重要能力。
PDF本质上不是一个有语义结构的文档。
例如:
人看到:
标题 图片 文字 表格但是PDF内部可能只是:
文字块A 坐标(100,200) 文字块B 坐标(500,300)所以需要布局分析模型判断:
这个区域是标题 这个区域是正文 这个区域是表格 这个区域是图片形成文档结构。
6.3 OCR文字识别
如果PDF是扫描图片:
扫描PDF ↓ 图片 ↓ OCR ↓ 文字MinerU通过OCR模型识别图片中的文字。
例如:
图片:
一个运动康复注意事项有关的图片转换:
运动康复注意事项6.4 表格解析
普通PDF解析:
姓名 年龄 性别 张三 20 男表格关系丢失。
MinerU会尝试恢复:
|姓名|年龄|性别| |-|-|-| |张三|20|男|这样LLM更容易理解。
6.5 公式解析
对于论文中的数学公式:
PDF:
E=mc²解析后:
E=mc^2保留公式语义。
6.6 输出结构化文档
最终生成:
PDF ↓ 文本 图片 表格 公式 ↓ Markdown/JSON供后续RAG使用。
7. MinerU为什么适合RAG?
RAG效果不仅取决于模型,也取决于知识库质量。
如果解析质量差:
PDF ↓ 错误文本 ↓ 错误Embedding ↓ 错误检索 ↓ 错误回答MinerU通过:
保留标题结构
保留表格关系
提取图片信息
处理公式
减少无效文本
提高知识库质量。
8. MinerU与Embedding的区别
很多初学者容易混淆。
MinerU:
解决:
文档怎么变成结构化内容?
例如:
PDF ↓ MarkdownEmbedding:
解决:
文本怎么变成可以计算相似度的向量?
例如:
运动损伤注意事项 ↓ [0.23,0.56,-0.12...]二者关系:
PDF | MinerU | 文本 | Embedding | 向量数据库9. 面试回答模板
如果面试官问:
“你们RAG里面为什么使用MinerU?”
可以回答:
在知识库构建阶段,我们使用MinerU对PDF等非结构化文档进行解析。相比传统PDF文本提取工具,MinerU能够识别文档布局,同时保留标题、表格、公式等结构信息,并输出Markdown格式。之后我们基于解析结果进行文本切片和Embedding向量化,将处理后的知识存入向量数据库,提高后续检索的准确性。
10. 总结
MinerU本质上是:
一个面向大模型应用的智能文档解析框架。
它解决的问题:
复杂PDF ↓ 结构化知识 ↓ RAG可用数据核心流程:
PDF输入 ↓ 页面解析 ↓ 布局分析 ↓ OCR识别 ↓ 表格/公式处理 ↓ Markdown输出 ↓ 进入RAG流程在大模型应用开发中,MinerU属于知识库构建阶段的数据预处理组件,是连接原始文档和大模型之间的重要桥梁。