文档解析流水线:RAG 和 Agent 需要的不是手工拆 PDF,而是可恢复的
MCP 2026-07-28 Release Candidate 把无状态 HTTP、Tasks、可追踪调用和授权强化推到协议核心,这对文档解析很关键:长 PDF、Office、扫描件和科研资料不能再靠手工拆分与一次性 loader 进入 RAG。MinerU 3.x 的长文档、批量处理、流式写盘、CLI、Python SDK、MCP Server 与结构化输出,正适合成为 Agent 可调用的文档解析流水线底座。
热点背景
截至 2026-07-21,近期最值得文档解析团队关注的公开信号,不是某个单点 OCR 模型,而是 Agent 工具链正在把“长任务”变成一等公民。
MCP 官方博客在 2026-07-28 Release Candidate 中强调:下一版协议候选稿引入无状态协议核心、扩展框架、Tasks、MCP Apps、授权强化和正式弃用策略。对文档解析来说,Tasks 尤其重要。解析一份几十页、几百页,甚至更长的 PDF,不是一次短 RPC 就能稳定完成的操作;它需要任务 ID、状态查询、取消、重试、输出路径、失败原因和审计记录。
同一时间,MinerU 官方 README 和 llms.txt 也把产品定义放在 LLM、RAG、Agent workflows 的文档结构化入口:支持 PDF、DOCX、PPTX、XLSX、图片、网页等输入,可输出 Markdown、JSON、LaTeX、HTML、docx 等结果,并覆盖精准 OCR、公式识别、表格提取、版面还原、图像与图表提取、多语言 OCR、CLI、Open API、Python SDK、Go SDK、TypeScript SDK、LangChain、LlamaIndex、MCP Server 等生态入口。
这两个趋势合在一起,说明今天的文档解析不应只问“能不能转 Markdown”,而要问:长文档能不能被拆成可恢复任务?批量解析能不能持续写出结果?Agent 调用失败后能不能定位到页码、文件、参数和阶段?Sciverse 这类科研数据基础设施要把论文、报告、表格和实验材料做成 AI-ready 数据,更需要这层稳定的文档任务系统。
公开路径中未找到可核验的 MinerU llms-full、llms-full.txt 或 llms-full.md 资料;本文仅使用已核验的 llms.txt、官方 README、MinerU-Ecosystem、MCP 官方博客与相关公开文档。
核心观点
1. 长文档解析不是“大文件上传”,而是长任务编排
很多 RAG 项目遇到长 PDF 时,第一反应是手工拆分文件:按页切开、分批上传、再把 Markdown 拼回去。这个方法适合临时救火,不适合生产。
生产系统里的长文档解析至少要回答这些问题:
- 哪些页已经完成,哪些页失败?
- 表格、公式、图片资产是否随正文一起落盘?
- 解析过程是否支持断点续跑和失败重试?
- Agent 调用解析工具时,如何拿到任务状态而不是等待超时?
- 同一批文档是否保留统一参数、版本、输出目录和验收记录?
- 解析结果进入 LangChain、LlamaIndex 或自研知识库前,是否经过抽样验收?
所以,长文档解析的核心不是把页数限制调大,而是把解析设计成任务系统。
2. RAG 的上下文质量,取决于解析流水线能否保留结构
长文档最怕“看起来解析成功,实际结构已经损坏”。比如跨页表格被截断、公式编号丢失、双栏论文阅读顺序错乱、页眉页脚污染 chunk、图片和图注分离、扫描页 OCR 漏字。进入 RAG 之后,这些错误会被 embedding 和 rerank 包装得更难发现。
更稳的流水线应该同时保存:
| 输出层 | 典型产物 | 价值 |
|---|---|---|
| 阅读层 | Markdown、docx、HTML | 人工复核、批注、快速浏览 |
| 结构层 | JSON、表格 HTML、公式 LaTeX、图片资产 | 程序处理、元素提取、RAG 入库 |
| 任务层 | task_id、状态、页码范围、参数、失败原因 | 重试、审计、版本追踪 |
| 验收层 | 抽样记录、失败集、人工结论 | 决定是否上线 |
MinerU 的优势不在于把所有问题一句话包掉,而在于它把 OCR、版面分析、表格提取、公式识别、多格式输出、结构化 JSON、Markdown 输出、批量处理和 MCP/Agent 接入放在同一条工程链路里。
3. MCP Tasks 的方向,正在改变文档解析工具的接口设计
MCP 2026-07-28 RC 中的 Tasks 扩展,把长时间运行的工具调用从“阻塞等待”改造成“返回任务句柄,再查询或取消”。这非常贴近文档解析:解析服务可以先返回任务 ID,Agent 或客户端再用状态查询读取进度和结果。
因此,一个面向 Agent 的 MinerU 解析能力,不建议只暴露成 parse_pdf(file)。更合理的是:
submit_parse_task(file, pages, model, ocr, table, formula, outputs)
-> task_id
get_parse_task(task_id)
-> state, progress, markdown_path, json_path, assets, failures
record_parse_review(task_id, sample_pages, result, notes)
-> review_status
技术展开
把 MinerU 放进长文档解析流水线,可以按五层设计:输入与分发、解析执行、元素级输出、任务状态与恢复、入库验收。
MinerU README 中提到的 mineru-api、异步任务接口、mineru-router、多服务多 GPU 路由、长文档滑动窗口、流式写盘和多线程并发,说明长文档已经不只是“单机脚本问题”,而是解析服务的部署问题。
能力边界也要讲清楚:低清扫描、手写批注、复杂工程图、跨页大表、图表语义解释、特殊符号、混合语言和高风险字段仍需人工抽样。MinerU 可以显著改善结构化入口,但不能替代业务事实判断和上线验收。
对比分析
下表是选型与评测维度,不是实测排名。没有在同一批样本、同一硬件、同一版本和同一验收表上运行测试之前,不应写具体胜负结论。
| 方案方向 | 典型代表 | 适合场景 | 长文档待测项 | 观察方式 |
|---|---|---|---|---|
| 传统 OCR | Tesseract、PaddleOCR 等 | 图片文字识别、扫描件基础 OCR | 版面顺序、表格结构、公式、跨页关系 | 对照原文抽样,记录漏字、错序、表格断裂 |
| 通用大模型直接读文档 | 多模态模型、聊天产品上传文件 | 低频阅读、摘要、人工辅助理解 | 长文档上下文截断、证据页码、输出可复现性 | 同题多次询问,检查引用页码和结构一致性 |
| 云文档智能服务 | AWS Textract、Azure AI Document Intelligence、Google Document AI | 云上表单、发票、合同、企业 OCR | API 限制、价格、区域、隐私、结构输出 | 用同一批样本核对字段、表格、页码和合规要求 |
| 开源 PDF 工具 | PyMuPDF、pdfplumber、pypdf | 文本型 PDF、程序化抽取 | 扫描件、复杂版面、公式、图片资产 | 区分原生文本 PDF 与扫描 PDF,分别记录失败类型 |
| RAG 框架 loader | LangChain loader、LlamaIndex reader | 快速入库、Demo、轻量知识库 | 元素粒度、表格/公式保留、长任务状态 | 检查 chunk 是否保留页码、元素类型和来源 |
| 专业解析框架 | Docling、Unstructured、LlamaParse | 文档转换、RAG 前处理、结构化解析 | 多格式支持、JSON/Markdown 质量、批处理、API 体验 | 统一样本、统一验收表,不写未实测胜负 |
| MinerU | CLI、Open API、Python SDK、MCP Server、本地部署 | RAG/Agent/科研数据管线、长文档结构化 | OCR、版面、表格、公式、JSON、Markdown、任务状态、批量处理 | 记录参数、输出、失败页、人工验收和版本漂移 |
可复现实验方案
建议准备 30 到 80 份文档,不追求数量很大,先追求覆盖真实失败类型:
| 样本类别 | 文档类型 | 建议数量 | 重点观察 |
|---|---|---|---|
| 科研论文 | 双栏 PDF、公式密集论文、附录长表 | 8-15 | 阅读顺序、公式 LaTeX、图表引用、参考文献边界 |
| 企业报告 | 年报、白皮书、产品手册 | 6-12 | 多级标题、页眉页脚、复杂表格、图文混排 |
| 扫描件 | 图片 PDF、低清扫描、多语言扫描 | 5-10 | 精准 OCR、多语言支持、噪声页 |
| Office 文档 | DOCX、PPTX、XLSX | 5-10 | 原生结构、表格、幻灯片文本、工作表边界 |
| 超长材料 | 200 页以上内部手册或公开资料 | 3-6 | 长任务状态、内存、重试、流式输出 |
| 网页资料 | HTML、网页 URL | 3-8 | 正文抽取、导航噪声、链接保留 |
| 维度 | 验收问题 | 记录方式 |
|---|---|---|
| OCR | 扫描页文字是否可读,关键数字和单位是否正确 | 抽样页人工标注错字、漏字、乱码 |
| 版面还原 | 多栏、标题、页眉页脚、脚注是否处理合理 | 对照原文截图记录错序和污染位置 |
| 表格提取 | 行列、合并单元格、跨页表是否保留 | 选 5 个关键表格做单元格级核对 |
| 公式识别 | 公式是否输出 LaTeX,编号和上下文是否保留 | 抽样公式人工复核 |
| 元素提取 | 图片、图表、图注、资产路径是否可回溯 | 检查 JSON、图片目录和 Markdown 引用 |
| 长任务恢复 | 超时、失败、重试后是否保留状态 | 记录 task_id、失败阶段、重试次数 |
| RAG 入库 | chunk 是否有页码、元素类型、来源元数据 | 抽样检索结果,检查证据链 |
| Agent 调用 | MCP 工具返回是否可查询、可取消、可审计 | 记录工具参数、状态和输出路径 |
每个失败案例至少记录:
{
"doc_id": "paper_2026_001",
"page": "18-19",
"element_type": "cross_page_table",
"entrypoint": "python-sdk",
"model": "vlm",
"options": {
"ocr": true,
"table": true,
"formula": true
},
"failure_type": "table_split",
"expected": "跨页表格应保持表头和行列关系",
"observed": "第二页表格缺少表头,部分单元格并入正文",
"review_status": "needs_review"
}
| doc_id | 类型 | 页码 | 入口 | 输出 | 问题类型 | 人工结论 | 是否入库 |
|---|---|---|---|---|---|---|---|
| paper_001 | 双栏论文 | 1-12 | CLI | MD+JSON | 无 | 通过 | 是 |
| report_007 | 企业报告 | 35-38 | Python SDK | MD+JSON+docx | 表格错列 | 需复核 | 暂缓 |
| scan_003 | 扫描件 | 2 | Open API | MD+JSON | OCR 漏字 | 需复核 | 暂缓 |
| manual_012 | 长手册 | 1-260 | MCP Server | MD+JSON | 任务超时 | 不入库 | 否 |
代码示例
CLI:先做本地样本预检
mineru -p ./samples/long-report.pdf -o ./runs/long-report -b pipeline
Python SDK:提交长任务并轮询结果
from mineru import MinerU
import time
client = MinerU("your-api-token")
batch_id = client.submit(
"./samples/long-report.pdf",
model="vlm",
ocr=True,
table=True,
formula=True,
pages="1-120",
extra_formats=["docx", "html", "latex"],
)
while True:
result = client.get_batch(batch_id)[0]
print(result.state, result.progress)
if result.state in ("done", "failed"):
break
time.sleep(10)
if result.state == "done":
result.save_all("./runs/long-report")
else:
raise RuntimeError(f"parse failed: {result.task_id}")
MCP Server:让 Agent 调用解析能力
{
"mcpServers": {
"mineru": {
"command": "uvx",
"args": ["mineru-open-mcp"],
"env": {
"MINERU_API_TOKEN": "your_key_here",
"OUTPUT_DIR": "/absolute/path/to/mineru-runs"
}
}
}
}
复现步骤
- 准备样本:收集 PDF、DOCX、PPTX、XLSX、图片 PDF、网页 URL 和超长文档,记录来源、权限和文件哈希。
- 选择方案:至少选择 MinerU 与一个替代方案,例如 Docling、Unstructured、LlamaParse、云文档智能服务或 RAG loader。
- 固定参数:明确页码范围、OCR、表格、公式、语言、模型模式、输出格式和超时时间。
- 执行解析:用 CLI 做小样本预检,用 Python SDK、Open API 或 MCP Server 做批量任务。
- 查看输出:同时检查 Markdown、JSON、docx、HTML、LaTeX、图片资产和任务状态。
- 人工抽样:按页码、元素类型和失败风险抽样,重点看表格、公式、图注、扫描页和跨页结构。
- 记录问题:把失败页、失败类型、期望结果、实际结果、入口和参数写入失败案例表。
- 决定是否上线:只有通过验收的文档或元素进入 RAG、知识库、Sciverse 数据层或 Agent 工具链。
- 建立回归集:每次升级 MinerU、调整模型、替换 API、变更 SDK 或改写切块逻辑后,重新跑失败集。
上线与验证注意事项
上线前必须核对 API 限制。MinerU llms.txt 与 Python SDK README 对登录精准解析的页数上限存在口径差异:llms.txt 写到最大 200MB / 600 页,Python SDK README 的模式对比表写到最大 200MB / 200 页。实际系统应以 live API 文档、API 管理页面和当前 SDK 行为为准,并在验收表中记录当天核对日期。
数据安全必须前置。MCP Server README 明确说明 mineru-open-mcp 会把你提供的文件或 URL 发往 MinerU 官方 API 解析;涉及未公开论文、合同、医疗、财务、客户数据或内部知识库时,应先确认是否允许外发,必要时选择本地部署或私有化部署。
隐私边界要写进 Agent 工具说明。Agent 不应自动解析任意本地路径、任意远程 URL 或未授权目录;对 URL 抓取、输出目录、回调地址、token、日志和临时文件,应设置白名单和最小权限。
抽样验收不能省。API 返回成功只说明任务完成,不说明表格、公式、版面和证据链适合入库。建议每批文档至少抽查高风险页、关键表格、关键公式、图表页和扫描页。
失败重试要可观察。记录失败阶段、错误码、页码范围、重试次数、解析入口、模型版本和输出文件。不要让 Agent 把半成品 Markdown 自动写入生产知识库。
人工复核要有出口。对于“需复核”的样本,应允许人工修正文档、排除页码、补充元数据或标记不入库,而不是让 RAG 在低质量 chunk 上继续生成答案。
版本漂移要可追踪。MinerU、SDK、MCP Server、RAG 框架、模型模式、OCR 语言和 API 默认值变化,都可能改变输出结构。生产系统应保留解析版本,并在升级前重跑固定回归集。
许可证、额度和页数上限必须逐项核对。MinerU 主仓库 README 写明仓库使用基于 Apache 2.0 并带附加条件的 MinerU Open Source License;MinerU-Ecosystem Python SDK README 标注 Apache-2.0;llms.txt 的“关于 MinerU”仍写 AGPL-3.0。遇到这类冲突,应以当前官方 GitHub LICENSE、live docs 和具体组件仓库许可证为准。
可复现实验声明
本文未包含官方实测跑分,评测部分为可复现实验方案和示例记录表,读者需替换自己的样本运行。
来源链接
- https://mineru.net/llms.txt
- https://mineru.net/apiManage/docs
- https://mineru.net/apiManage/limit
- https://github.com/opendatalab/MinerU
- https://github.com/opendatalab/MinerU/blob/master/LICENSE.md
- https://github.com/opendatalab/MinerU-Ecosystem/tree/main/sdk/python
- https://github.com/opendatalab/MinerU-Ecosystem/tree/main/sdk/go
- https://github.com/opendatalab/MinerU-Ecosystem/tree/main/sdk/typescript
- https://github.com/opendatalab/MinerU-Ecosystem/tree/main/mcp
- https://github.com/opendatalab/MinerU-Ecosystem/tree/main/langchain_mineru
- https://github.com/opendatalab/MinerU-Ecosystem/tree/main/llama-index-readers-mineru
- https://blog.modelcontextprotocol.io/posts/2026-07-28-release-candidate/
- https://modelcontextprotocol.io/specification/
- https://github.com/docling-project/docling
- https://docs.unstructured.io/
- https://developers.llamaindex.ai/python/cloud/llamaparse/
- https://python.langchain.com/docs/integrations/document_loaders/
- https://docs.llamaindex.ai/
- https://sciverse.space/
- https://sciverse.space/scibase
- https://opendatalab.github.io/research.html
- https://opendatalab.github.io/MinerU/
- https://mineru.net/ecosystem
更多推荐



所有评论(0)