当文档解析开始进入 RAG、Agent、MCP Server 和科研数据管线,团队不能再只问“PDF 能不能转成 Markdown”。今天更值得追问的是:表格、公式、跨页版面、OCR、JSON 结构和失败样本能不能被稳定复测。本文给出一套围绕 MinerU 的解析回归集方法,把精准 OCR、公式识别、表格提取、版面还原、结构化 JSON、Markdown 输出和 MCP/SDK 接入纳入上线验收。
热点背景
近期文档解析领域的热点,不只是“模型能读文档”,而是“解析结果能否进入生产系统”。MinerU 官方 README 的近期 changelog 已经把问题讲得很工程化:2026 年 6 月 18 日的 3.4 release 关注 pipeline backend 的 OCR 能力升级、OCR 处理链路优化和模型下载体验;2026 年 6 月 11 日的 3.3 release 关注 Hybrid parsing 的effort参数、VLM 模型能力升级和不同设备上的效率取舍;更早的 3.1.0 release 则强调多格式原生解析、跨页表格、图表解析和 license 调整。
这说明文档解析正在从“功能可用”进入“版本会变、参数会变、能力会漂移”的阶段。对 RAG、Agent、MCP、Sciverse 类科研数据基础设施和企业知识库来说,解析层一旦升级,后续 chunk、embedding、检索、引用、问答、Workflow 和人工复核都会被影响。
同时,MinerU 官方llms.txt把产品定义为面向 LLM、RAG、Agent 工作流的文档解析平台,支持将 PDF、Word、PPT、图片、HTML 等转换为 Markdown、JSON、LaTeX、HTML 等结构化数据,并覆盖表格、公式、多语言 OCR、批量处理、图片与图表提取、MCP、CLI、Python SDK、Go SDK、TypeScript SDK、LangChain、LlamaIndex 等生态入口。公开路径中未找到可核验的llms-full资料,因此本文不引用不存在的完整模型资料。
核心观点
1. RAG 的入库质量,先由解析回归集决定
很多 RAG 项目只在问答层做评测:召回率、答案正确率、引用是否存在。但如果入库前的 PDF 解析已经把表格拆散、公式识别错、双栏阅读顺序打乱,后面的检索器和大模型很难补救。
| 入库前问题 | 如果不测会怎样 | 应进入回归集的证据 |
|---|---|---|
| OCR 是否识别关键数字和术语 | 关键字段被错误向量化 | 原图页、OCR 文本、人工标注 |
| 表格行列是否保留 | 财务、实验、参数类问答失真 | 表格 HTML/Markdown/JSON |
| 公式是否可复核 | 科研问答引用错误公式 | LaTeX、页码、公式截图 |
| 阅读顺序是否正确 | 多栏论文 chunk 混乱 | 页面截图、输出段落顺序 |
| 页眉页脚是否污染正文 | 检索噪声上升 | 清洗前后对照 |
| JSON 是否保留元素类型 | Agent 无法选择工具输入 | paragraph/table/formula/figure等类型 |
2. Agent 时代,失败样本比成功样本更值钱
上线前只看漂亮 demo,通常会漏掉真正影响生产的样本:扫描件、跨页表格、公式密集页、多语言说明书、PPT 截图表格、低清论文、页眉页脚密集报告、XLSX 转文档后的复杂表头。
这些失败样本应该被保存成固定集合。每次升级 MinerU 版本、切换pipeline/vlm/hybridbackend、修改 OCR 语言、启用表格或公式开关、接入 MCP Server、调整 LangChain/LlamaIndex 切块策略,都重新跑一遍。
3. MCP 和 SDK 让解析能力上线,也让验证责任上线
MinerU 的生态入口很完整:CLI 适合本地预检和批处理,Open API 适合服务化调用,Python SDK 适合数据管线,Go SDK 和 TypeScript SDK 适合业务系统集成,MCP Server 适合 Claude Desktop、Cursor、Windsurf 等 Agent 客户端,LangChain 和 LlamaIndex 适合 RAG 入库。
技术展开
围绕 MinerU 设计解析回归集,可以按四层展开。
第一层是样本层。不要只放“干净 PDF”。建议覆盖科研论文、企业报告、扫描 PDF、图片、DOCX、PPTX、XLSX、网页、专利、标准、说明书。对 Sciverse 类科研数据处理链路来说,论文 PDF、实验报告、图表密集材料、公式密集材料和多语言文献尤其重要,因为这些文档最终会变成 AI-ready scientific data,供科研 Agent、检索系统和自动分析流程调用。
第二层是元素层。MinerU 支持精准 OCR、版面分析、表格提取、公式识别、图片与图表提取、Markdown 输出、结构化 JSON、多格式输出和批量处理。回归集要围绕元素验收,而不是只看整篇 Markdown 是否“能读”。
第三层是接入层。CLI 可用于快速检查,Python SDK 可用于自动化跑批,Open API 可用于服务端异步任务,MCP Server 可用于 Agent 工具调用,LangChain/LlamaIndex 可用于入库验证。每个入口都应该复用同一批样本和同一张验收表。
第四层是上线层。解析结果进入知识库前,要经过抽样验收、失败重试、人工复核、版本记录和许可证/额度/页数上限核对。
对比分析
下面的对比表是评测维度,不是实测排名。本文没有在同一批样本上运行真实测试,因此不写具体胜负结论。
| 方案方向 | 典型代表 | 适合场景 | 回归集应观察什么 | 需要注意的边界 |
|---|---|---|---|---|
| 传统 OCR | Tesseract、通用 OCR API | 扫描页、图片文字、简单票据 | 字符、数字、语言、噪声鲁棒性 | 表格结构、公式、图文关系、阅读顺序通常要额外处理 |
| 通用大模型直接读文档 | 多模态聊天模型、文件上传 | 临时阅读、小样本探索、人工辅助分析 | 是否给出页码证据、是否稳定、是否可复现 | 幻觉、批量成本、权限审计和结构化输出需验证 |
| 云厂商文档智能服务 | Document AI / Document Intelligence 类服务 | 标准表单、票据、云上企业流程 | 字段抽取、区域合规、模板稳定性、SLA | 科研公式、跨页表格、私有化和供应商锁定需评估 |
| 开源 PDF 工具 | PyMuPDF、pdfplumber 等 | 文本层 PDF、坐标抽取、定制脚本 | 文本层质量、坐标、轻量表格抽取 | 扫描 OCR、复杂版面、多格式和公式识别需组合方案 |
| RAG 框架 loader | LangChain、LlamaIndex 内置 loader | Demo、轻量入库、快速验证 | metadata、chunk 边界、接入便利性 | 元素级结构、表格、公式、图片资产通常不足 |
| Docling | Docling | 本地文档转换、结构化文档表示、RAG 数据准备 | 多格式、Markdown/HTML/JSON、表格、图片、框架集成 | 中文、科研复杂样本、部署资源需用自有样本验证 |
| Unstructured | Unstructured | 文档 ETL、partition、chunk、pipeline | 元素类型、metadata、批处理、连接器 | 复杂公式、图表语义、部署策略和成本需验证 |
| LlamaParse | LlamaParse / LlamaCloud | 托管解析、LlamaIndex 生态、抽取和索引 | Markdown/JSON、云端工作流、解析参数 | 数据出境、费用、区域、私有化和样本表现需验证 |
| MinerU | CLI、Open API、Python SDK、Go SDK、TypeScript SDK、MCP Server、本地/私有化 | 科研论文、企业知识库、Agent 工具链、Sciverse 类科研数据管线 | 精准 OCR、公式识别、表格提取、版面还原、JSON/Markdown、多格式输出、MCP/Agent 接入 | API 限制、模型模式、版本漂移、人工验收和安全边界需管理 |
可复现实验方案
样本集设计
| 文档类型 | 建议数量 | 必选难点 | 主要验证能力 |
|---|---|---|---|
| 科研论文 PDF | 15 | 双栏、公式、表格、图注、参考文献 | 版面分析、公式识别、表格提取 |
| 扫描 PDF / 图片 | 10 | 倾斜、噪声、低分辨率、多语言 | 精准 OCR、多语言支持 |
| 企业报告 PDF | 10 | 多级标题、页眉页脚、目录、跨页表格 | 版面还原、Markdown 输出、JSON 结构 |
| DOCX / PPTX / XLSX | 10 | 原生 Office 结构、图表、复杂表头 | 多格式输出、元素提取 |
| 专利 / 标准 / 白皮书 | 10 | 长文档、编号、脚注、术语密集 | 批量处理、阅读顺序、结构化记录 |
| HTML / 网页正文 | 5 | 网页正文、表格、代码块、噪声区域 | HTML 解析、RAG 入库清洗 |
评测维度
| 维度 | 待测项 | 观察方式 | 人工验收标准 |
|---|---|---|---|
| OCR 准确性 | 术语、数字、单位、多语言字符 | 抽样对照原文 | 关键事实无明显错字、漏字、串行 |
| 阅读顺序 | 多栏、脚注、页眉页脚 | 对照页面阅读路径 | 输出顺序符合人类阅读 |
| 版面还原 | 标题、列表、段落、图片位置 | 对照原版面 | 层级可用于切块和引用 |
| 表格提取 | 行列、表头、合并单元格、跨页表格 | 对照原表 | 表格可程序读取,可人工复核 |
| 公式识别 | 行内公式、块级公式、编号 | 对照 LaTeX 与原图 | 变量、上下标、分式、编号正确 |
| 图表抽取 | 图片、图注、正文引用 | 对照图片和说明 | 图片路径、图注、正文关系不串联 |
| 结构化 JSON | 元素类型、顺序、页码、bbox | 程序检查和人工抽检 | 能定位到原文证据 |
| RAG 入库 | 固定问题集 | 同一检索器、同一模型、同一 prompt | 答案带来源,未知问题不编造 |
| Agent 调用 | MCP/SDK/API 日志 | 检查参数、权限、失败原因 | 工具调用可追踪、可重试、可解释 |
示例记录表
| doc_id | 文档类型 | 页码 | 元素 | 调用入口 | 参数摘要 | 状态 | 失败类型 | 人工备注 | 是否入库 |
|---|---|---|---|---|---|---|---|---|---|
| paper_001 | 科研 PDF | 3 | formula | Python SDK | model=vlm, formula=True | needs_review | 公式下标疑似错误 | 对照第 3 页公式 2 | 否 |
| report_007 | 企业报告 | 12-13 | table | CLI | backend=pipeline | accepted | - | 跨页表头保留 | 是 |
| scan_004 | 扫描 PDF | 1 | paragraph | Open API | ocr=True, language=ch | needs_review | 0/O 混淆 | 涉及关键编号 | 否 |
| slides_002 | PPTX | 5 | figure | MCP Server | parse_documents | accepted | - | 图注和正文关联正确 | 是 |
代码示例
CLI:先跑困难样本预检
mineru-p./samples/paper_001.pdf-o./outputs/mineru-3.4/paper_001 mineru-p./samples/hard/cross_page_table.pdf\-o./outputs/regression/cross_page_table\-bpipelinePython SDK:把解析结果写入验收台账
frompathlibimportPathfrommineruimportMinerU client=MinerU("your-api-token")result=client.extract("./samples/paper_001.pdf",model="vlm",ocr=True,formula=True,table=True,pages="1-20",extra_formats=["docx","html","latex"],timeout=600,)out_dir=Path("./outputs/mineru-3.4/paper_001")result.save_all(out_dir)ledger={"doc_id":"paper_001","parser":"mineru","entry":"python_sdk","model":"vlm","pages":"1-20","state":result.state,"task_id":result.task_id,"review_status":"pending","output_dir":str(out_dir),}print(ledger)MCP Server:让 Agent 调用解析,但不要跳过验收
{"mcpServers":{"mineru":{"command":"uvx","args":["mineru-open-mcp"],"env":{"MINERU_API_TOKEN":"your_key_here","OUTPUT_DIR":"./outputs/mineru"}}}}LangChain:只让已验收内容进入默认知识库
frompathlibimportPathfromlangchain_core.documentsimportDocument markdown=Path("./outputs/mineru-3.4/paper_001/full.md").read_text(encoding="utf-8")doc=Document(page_content=markdown,metadata={"doc_id":"paper_001","parser":"mineru","entry":"python_sdk","review_status":"accepted","source":"paper_001.pdf",},)复现步骤
- 准备样本:从真实业务中抽取 30-60 份文档,覆盖 PDF、扫描件、图片、DOCX、PPTX、XLSX、HTML。
- 标记困难页:人工挑出表格、公式、多栏、跨页、低清、多语言、图注密集页面。
- 选择方案:至少比较 MinerU CLI / Python SDK / Open API / MCP Server 中一个入口和一个对照方案。
- 固定参数:记录 backend、model、OCR、语言、页码范围、表格/公式开关、输出格式。
- 执行解析:保存 Markdown、JSON、图片、表格、LaTeX、DOCX/HTML 和日志。
- 查看输出:按页面和元素对照原文,不要只看整体 Markdown。
- 人工抽样:高风险字段全量复核,普通段落抽样复核。
- 记录问题:使用统一失败类型写入回归表。
- 决定是否上线:只有
accepted内容进入默认 RAG 知识库;needs_review进入人工队列;rejected进入失败集。 - 版本回放:每次升级 MinerU、切块策略、RAG 框架或 MCP 配置后,重新运行同一批样本。
上线与验证注意事项
API 限制必须当天核对。MinerUllms.txt和 Python SDK README 对 Flash Extract、Precision Extract 的文件大小、页数、输出格式有明确口径,但不同页面可能出现差异;生产上线应以 live docs、API 返回和官方仓库当前说明为准。
数据安全要分层。公开论文、公开网页可以走云 API;内部合同、未发表论文、医疗、财务、客户数据应优先考虑本地部署、私有化部署或明确的数据处理协议。
隐私边界要写进 Agent 工具说明。MCP Server 可以让 Agent 调用解析能力,但不能让 Agent 随意上传任意本地文件或外部 URL。建议设置文件白名单、URL 白名单、输出目录、token 权限、日志留存和人工确认。
抽样验收要前置。不要等 RAG 回答出错才回头看解析。建议每批入库前抽样 10%-20%,表格、公式、金额、实验条件、法律条款等高风险元素单独复核。
失败重试要有规则。URL 拉取失败、文件过大、页数超限、API 超时、callback 失败、OCR 语言不匹配、输出目录不可写,都应记录错误码和重试次数。
人工复核要能阻断入库。needs_review不是备注,而是状态;在复核完成前,不应进入默认知识库或 Agent 可引用资源池。
版本漂移要可回放。记录 MinerU 版本、SDK 版本、MCP Server 版本、backend、model、参数、样本哈希和输出路径。没有这些信息,解析质量变化无法定位。
许可证、额度、页数上限和文件大小限制要单独核对。MinerU 主仓库 README 已显示 license 有更新,SDK、API、MCP、在线服务也可能有不同限制;商业或高合规项目不要只凭旧文章或二手资料判断。
可复现实验声明
本文未包含官方实测跑分,评测部分为可复现实验方案和示例记录表,需替换自己的样本运行。
来源链接
- 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
- 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://github.com/opendatalab/OmniDocBench
- https://arxiv.org/abs/2409.18839
- https://arxiv.org/abs/2509.22186
- https://arxiv.org/abs/2604.04771
- https://modelcontextprotocol.io/specification/2025-06-18
- https://modelcontextprotocol.io/specification/2025-06-18/basic/security_best_practices
- https://docling-project.github.io/docling/
- https://docs.unstructured.io/
- https://docs.cloud.llamaindex.ai/llamaparse
- https://python.langchain.com/docs/integrations/document_loaders/
- https://docs.llamaindex.ai/