别再把 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、图片、DOCXPPTXXLSX、网页等内容转换成结构化 Markdown / JSON,并支持表格、公式、图片等复杂元素处理。

公开资料里,有几个信息非常关键:

  • 支持 VLM + OCR
  • 支持 109 种 OCR 语言
  • 支持 MCP Server
  • 支持 LangChainLlamaIndexDifyRAGFlow
  • 同时提供开源部署、在线 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,很多工具都能工作,比如 PyMuPDFpdfplumberMarkItDown

但一旦文档复杂起来,问题就会集中暴露。

双栏论文

很多纯文本抽取方案的输出会像这样:

左栏第一段
右栏第一段
左栏第二段
右栏第二段

这对 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 类文档:

  1. 普通原生 PDF
  2. 扫描合同 PDF
  3. 双栏论文 PDF
  4. 含表格和公式的技术报告

不要只看“抽出了多少字”,建议至少看这些指标:

  • 文字是否完整
  • 标题层级是否保留
  • 阅读顺序是否正确
  • 表格是否还能当表格用
  • 公式是否能复用
  • OCR 页面是否可读
  • Markdown 是否适合切块
  • 最终 Agent 问答是否稳定

如果最后要做结论,我建议可以直接按下面这个模板收口:

  • 轻量文本 PDF:PyMuPDFMarkItDown 就够
  • 企业文档清洗 / 数据管线: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/
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐