别再把 PDF 直接喂给大模型了:我用 MinerU 做了一次从文档解析到 RAG 问答的完整实战
别再把 PDF 直接喂给大模型了:我用 MinerU 做了一次从文档解析到 RAG 问答的完整实战
做知识库、RAG、AI Agent 的同学,几乎都会踩到同一个坑:文档能读到,不代表文档能读懂。
很多项目一开始都以为这一步很简单。PDF 能提文本,Word 能转 Markdown,不行就上 OCR,把字识别出来再喂给模型,不就可以了?
但真正上线后,问题很快就暴露出来:
- 论文是双栏,阅读顺序乱了
- 财报有复杂表格,数字关系丢了
- 合同混着扫描页,部分内容直接读不到
- 技术文档里有公式,最后全成了乱码
这也是为什么很多团队明明模型选得不差,回答效果却始终不稳定。问题不一定出在模型,而是前面的文档解析已经丢掉了大量结构信息。
这也是我最近重点研究 MinerU 的原因。
如果只用一句话概括它的价值,我会这么说:
MinerU 不是“再造一个 PDF 提文本工具”,而是一层把复杂文档转换成大模型可用结构化知识的基础设施。
这篇文章我会从一个真实应用场景出发,讲清楚 MinerU 在 RAG 链路里到底解决了什么问题,同时再和几类主流方案做一次工程视角的对比和评测。
1. 文档解析为什么会成为 RAG 的第一道门槛
很多人画 RAG 链路时,都会写成这样:
文档 -> 切块 -> 向量化 -> 检索 -> 大模型回答
但真实工程里,真正决定上限的其实是最前面的“文档怎么变成可用文本”。
因为一旦解析阶段出错,后面几乎没法补救:
- 段落顺序错,切块就会把语义打散
- 表格结构没了,模型看到的只是一堆数字
- 公式损坏,问答和总结都会失真
- 页眉页脚混进正文,召回噪音会很大
所以,文档解析不是预处理的小步骤,而是整个知识工程质量的起点。
过去那种“能抽纯文本就够了”的方案,在 Agent 时代明显不够用了。Agent 真正需要的不是“看到文字”,而是“理解文档结构”。
2. MinerU 到底是什么
根据 MinerU 官方仓库、llms.txt 和 API 文档,MinerU 面向 LLM / RAG / Agent 场景,支持把 PDF、图片、DOCX、PPTX、XLSX、网页等内容转换成结构化 Markdown / JSON,并支持表格、公式、图片等复杂元素处理。
公开资料里,有几个信息非常关键:
- 支持
VLM + OCR - 支持
109种 OCR 语言 - 支持
MCP Server - 支持
LangChain、LlamaIndex、Dify、RAGFlow - 同时提供开源部署、在线 API、CLI 和 SDK
简单说,MinerU 做的不是“提字”,而是“还原结构”。
它更像这样一条链路:
PDF / 图片 / Office 文档
↓
OCR / 版面分析 / 元素检测
↓
阅读顺序恢复
↓
表格、公式、图片结构化
↓
Markdown / JSON / HTML / LaTeX
↓
RAG / Agent / 知识库
这就是它和传统 PDF reader 的根本差异。
3. 一个真实可落地的案例:MinerU + LangChain 做 PDF 问答
最常见的落地场景其实很直接:
把一份 PDF 文档解析后接进 LangChain,做一个可问答的小型知识库。
比如:
- 产品文档问答
- 合同条款检索
- 研究报告摘要
- 财报知识问答
安装依赖
pip install langchain-mineru
pip install langchain-text-splitters
pip install langchain-openai
pip install faiss-cpu
核心代码
from langchain_mineru import MinerULoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings
from langchain_community.vectorstores import FAISS
loader = MinerULoader(
source="demo.pdf",
split_pages=True
)
docs = loader.load()
splitter = RecursiveCharacterTextSplitter(
chunk_size=1200,
chunk_overlap=200
)
chunks = splitter.split_documents(docs)
vs = FAISS.from_documents(chunks, OpenAIEmbeddings())
results = vs.similarity_search("这份文档的核心结论是什么?", k=3)
for r in results:
print(r.page_content[:200])
如果文档更复杂,比如扫描页、长报告、表格和公式比较多,可以切到更高精度模式:
loader = MinerULoader(
source="manual.pdf",
mode="precision",
token="your-api-token",
split_pages=True
)
docs = loader.load()
这一步最大的价值不是“我拿到了字符串”,而是拿到的内容更适合后续检索:
- 标题层级更清晰
- 页面切分更自然
- 表格没那么容易碎掉
- 扫描页也能进入同一条链路
- 多栏布局更容易保住阅读顺序
换句话说,MinerU 在 RAG 里真正重要的地方,不是替代大模型,而是先把文档变成“机器也能按人类方式读”的结构。
4. 为什么很多传统方案在复杂文档上会失灵
如果只是简单文本 PDF,很多工具都能工作,比如 PyMuPDF、pdfplumber、MarkItDown。
但一旦文档复杂起来,问题就会集中暴露。
双栏论文
很多纯文本抽取方案的输出会像这样:
左栏第一段
右栏第一段
左栏第二段
右栏第二段
这对 RAG 很致命,因为上下文已经被打散。
财报和研报表格
表格不是普通文字。如果工具把表格抽成一串数字和字段,大模型很难稳定回答“哪一年营收更高”“哪一项同比最大”这类问题。
公式文档
公式如果在解析阶段已经碎掉,后面的总结和检索都会失真。MinerU 官方资料里明确提到支持公式输出为 LaTeX,这一点对科研和技术知识库非常关键。
扫描件
这类文档如果没有 OCR,基本直接失效;如果只有 OCR,没有版面理解和结构化,输出仍然是一坨连续文本,对 Agent 的帮助也有限。
所以,MinerU 的核心优势不是“会 OCR”,而是把 OCR 放进了更长的结构化链路。
5. 工程视角下,MinerU 和几类主流方案怎么比
为了避免单点吹捧,我把常见方案放到一起做一个工程视角的对比。这里不是统一硬件下的严格跑分,而是站在开发者落地角度看能力边界。
我这里选择 5 类典型方案:
PyMuPDF:轻量 PDF 文本抽取Docling:开源文档解析工具LlamaParse:云端解析服务Unstructured:偏企业数据管线的文档处理方案MinerU:面向 LLM / RAG / Agent 的文档解析方案
工程能力对比表
| 工具 | 原生 PDF | 扫描 PDF | 多栏顺序 | 表格 | 公式 | Office | 本地部署 | Agent / RAG 接入 |
|---|---|---|---|---|---|---|---|---|
| PyMuPDF | 强 | 弱 | 弱 | 弱到中 | 弱 | 弱 | 强 | 弱 |
| Docling | 强 | 中 | 中到强 | 中到强 | 中 | 强 | 强 | 中到强 |
| LlamaParse | 强 | 强 | 强 | 强 | 中到强 | 中 | 弱 | 强 |
| Unstructured | 中到强 | 中 | 中 | 中 | 弱到中 | 强 | 强 | 强 |
| MinerU | 强 | 强 | 强 | 强 | 强 | 强 | 强 | 强 |
如果只看“能不能提文字”,MinerU 不是唯一答案。
但如果从完整工作流看:文档能不能被大模型稳定消费,MinerU 的能力会更均衡。尤其在这些场景里:
- PDF + 扫描混合文档
- 多栏论文
- 表格和公式密集的报告
- Office 文档统一入库
- 需要进入 LangChain / LlamaIndex / MCP / Agent 流程
6. 一个更像“实战”的评测思路
如果你们团队真的要选型,我不建议只看仓库 Star 或 README,最好按真实样本文档做一次内部评测。
最少准备这 4 类文档:
- 普通原生 PDF
- 扫描合同 PDF
- 双栏论文 PDF
- 含表格和公式的技术报告
不要只看“抽出了多少字”,建议至少看这些指标:
- 文字是否完整
- 标题层级是否保留
- 阅读顺序是否正确
- 表格是否还能当表格用
- 公式是否能复用
- OCR 页面是否可读
- Markdown 是否适合切块
- 最终 Agent 问答是否稳定
如果最后要做结论,我建议可以直接按下面这个模板收口:
- 轻量文本 PDF:
PyMuPDF或MarkItDown就够 - 企业文档清洗 / 数据管线:
Unstructured值得看 - 云端高保真解析:
LlamaParse适合 API 接入 - 开源文档解析:
Docling是重要参考项 - 面向复杂文档、RAG、Agent 的统一入口:
MinerU更完整
7. 为什么我认为 MinerU 更适合 Agent 时代
看完上面的案例和对比,我最终会把 MinerU 放在一个非常明确的位置:
它不是单点 OCR 工具,也不是单点 PDF reader,而是一层 Agent 时代的文档入口。
原因有四个。
第一,它解决的是结构化问题,而不是单纯识别问题。很多工具能把文字抽出来,但 Agent 真正需要的是结构,MinerU 更强调 Markdown、JSON、表格、公式和页面关系。
第二,它的生态已经足够完整。根据我在 2026-06-01 查到的官方公开资料,MinerU-Ecosystem 已经覆盖 CLI、Python / Go / TypeScript SDK、MCP、LangChain、LlamaIndex、Dify、RAGFlow、FastGPT 等接入方式。
第三,它同时兼顾本地和云端。很多团队在选型时都会同时考虑:本地能不能跑,云端能不能快速接。MinerU 在这两点上都比较完整。
第四,它和 Agent 的关系更自然。Agent 最需要的是“工具可调用”,而 MinerU 已经能通过 MCP、SDK、Loader 直接进入工作流。
结语
过去我们做文档处理,常常把“解析”理解成一个输入输出动作。
但在大模型时代,文档解析更像是一道编译步骤。它把人类世界里格式混乱、结构复杂、版面丰富的文档,转换成机器可以检索、切块、引用、推理和生成的知识结构。
从这个角度看,MinerU 的价值不在于它是不是某一项单点能力最强,而在于它把复杂文档进入 AI 工作流这件事做得更完整。
如果你正在做文档问答、企业知识库、研究资料解析、合同检索、财报理解,或者任何需要“让大模型真正读懂文档”的事情,MinerU 很值得你认真上手一轮。
很多时候,RAG 的上限,不是由大模型决定的,而是由你前面喂给它的文档质量决定的。而 MinerU,恰恰就在这道最容易被低估、却最关键的入口上。
参考资料
- MinerU 开源仓库:https://github.com/opendatalab/MinerU
- MinerU-Ecosystem:https://github.com/opendatalab/MinerU-Ecosystem
- MinerU llms.txt:https://mineru.net/llms.txt
- MinerU API 文档:https://mineru.net/apiManage/docs
- OmniDocBench:https://github.com/opendatalab/OmniDocBench
- Docling:https://www.docling.ai/
- LlamaParse:https://developers.api.llamaindex.ai/cloud/llamaparse
- Unstructured Partitioning:https://docs.unstructured.io/concepts/partitioning
- PyMuPDF:https://pymupdf.readthedocs.io/
更多推荐




所有评论(0)