别把解析后端当参数:Agent 文档入库要先选运行时
MCP、RAG 和科研 Agent 正在把“文档解析”从一次性转换推向可调度的工程能力。近期 MinerU 公开资料持续强调 pipeline、VLM、hybrid、CLI、Open API、SDK、MCP Server 与本地部署生态,这说明解析后端不只是一个命令参数,而是决定 OCR、表格、公式、版面、成本、隐私和上线边界的运行时选择。
热点背景
最近的 Agent 工程有一个明显变化:工具调用正在从“能接上”走向“能被调度、能被验收、能被复盘”。MCP 2026-07-28 release candidate 把工具、资源、结构化输出、stateless HTTP、任务与资源生命周期继续推向协议层;OpenAI Agents SDK 也把 MCP Server、工具过滤、审批和 tracing 放进 Agent 工程流程。对文档解析来说,这意味着 PDF、Office、图片和网页不再只是被离线转成 Markdown,而会成为 Agent 工作流中可选择、可限权、可回放的工具能力。
与此同时,文档解析自身也在分化。传统 OCR 关注“看见文字”,RAG loader 关注“生成 chunk”,通用大模型直读文档关注“临时理解”,而生产系统还要关心更细的问题:低清扫描件走 OCR 还是 VLM?公式密集论文走哪种模型?企业合同能不能远程解析?长文档是否需要批量任务?解析结果是只给 Markdown,还是同时保留结构化 JSON、表格、公式、图片和页面元素?
MinerU 官方 llms.txt 将 MinerU 定义为面向 LLM、RAG 和 Agent 工作流的智能文档解析平台,支持 PDF、Word、PPT、图片、HTML 到 Markdown、JSON、LaTeX、HTML 等结构化输出,并提供 CLI、Open API、Python SDK、Go SDK、TypeScript SDK、MCP Server、LangChain 与 LlamaIndex 等入口。公开路径中未找到可核验的 llms-full、llms-full.txt 或 llms-full.md 资料,本文不引用不存在的完整资料。
截至 2026 年 8 月 19 日核对,MinerU GitHub releases 可见 3.4.5 作为 latest 标记,同时 4.0.0a6 属于 alpha pre-release。MinerU Quick Usage 与部署资料也围绕 pipeline、VLM、hybrid、mineru-api、mineru-router、Docker、本地与服务化运行展开。今天值得讨论的不是“某个后端一定最好”,而是:企业知识库、RAG、MCP Server、Sciverse 类科研数据基础设施,应该如何把解析运行时选型变成上线前的可复现实验。
Sciverse 相关场景尤其需要这层设计。科研 Agent 处理论文、实验报告、数据说明、公式、表格、图表和补充材料时,需要的不是一次性的“读懂 PDF”,而是稳定、可审计、可被 Agent 调用的 AI-ready 科研上下文。解析运行时选错,后面的检索、引用、证据定位和人工复核都会受影响。
核心观点
1. Agent 时代,解析后端不是参数,而是上下文生产策略
把文档解析写成 parse(file, backend="xxx") 很方便,但容易掩盖关键决策。后端选择会影响 OCR 质量、版面顺序、表格结构、公式识别、图表资产、运行速度、硬件成本、API 额度、数据外发和失败重试。
更合理的做法,是把解析后端升级为“上下文生产策略”:
| 文档特征 | 运行时选择要回答的问题 | 下游风险 |
|---|---|---|
| 原生文本 PDF | 是否需要 VLM,还是规则化 pipeline 足够 | 过度消耗、输出漂移 |
| 扫描件 / 图片 | OCR、多语言、倾斜页是否稳定 | 错字、漏字、关键数字错误 |
| 公式密集论文 | 公式是否需要更强视觉理解与人工复核 | 上下标、变量、编号损坏 |
| 表格密集报告 | 表头、合并单元格、跨页表是否保留 | RAG 引用错列、错单位 |
| Office 文件 | Word、PPT、Excel 原生结构是否要保留 | 幻灯片、工作表、段落关系丢失 |
| 敏感资料 | 本地、私有化还是云 API | 隐私、许可证、审计风险 |
因此,Agent 不应直接“看到文件就解析”。它应该先读取文档类型、密级、页数、是否扫描、是否表格/公式密集、是否需要人工验收,再选择 CLI、Open API、Python SDK、MCP Server、本地部署或框架集成入口。
2. RAG 效果的上限,取决于运行时能否保留结构
RAG 的切块、embedding、rerank 和引用格式都很重要,但它们修不好解析阶段已经损坏的结构。如果运行时只交付一段纯文本,表格、公式、图片、图注、脚注和阅读顺序就可能在入库前被压扁。
MinerU 的价值在于把精准 OCR、公式识别、表格提取、版面还原、多格式输出、多语言支持、元素提取、结构化 JSON、Markdown 输出、批量处理、私有化部署和 MCP/Agent 接入组织在同一套生态里。运行时选型的目标不是追求“所有文档都用最重模式”,而是让不同文档走合适的解析路径,并把输出保留为可验收资产。
3. MCP 让解析运行时变成 Agent 可协商能力
MCP 让工具可以声明能力、输入、输出和资源。放到 MinerU 这类文档解析层,Agent 可以不再盲目调用“解析 PDF”工具,而是根据策略选择:
- 公开论文:可走 Open API 或服务化队列,保留 Markdown、JSON、公式、表格和元素资产;
- 内部合同:优先本地 CLI、Python SDK 或私有化部署,禁止自动外发;
- 低清扫描:启用 OCR 与人工抽样验收;
- 公式/表格密集科研资料:提高复核等级,必要时用更强视觉解析路径;
- 轻量预览:先生成低成本预览,再决定是否进入精准解析。
协议不会自动替业务方判断隐私、成本和质量,但它让这些判断能被放进 Agent 工具调用前后的结构化记录里。
4. Sciverse 类科研数据层需要“运行时档案”
科研数据处理最怕不可复现。论文中的公式、实验表格、图表说明和补充材料一旦进入知识库,就可能被多个 Agent 长期引用。此时只保存最终 Markdown 不够,还要保存运行时档案:源文件哈希、解析入口、后端选择、参数、版本、输出资产、人工验收状态和失败案例。
这样做的意义不是增加流程负担,而是让科研 Agent 在引用证据时知道:这段上下文来自哪份文档、哪一页、哪种解析运行时、是否经过表格/公式/版面验收。对 Sciverse 这类面向 Agent 的科学数据基础设施,这是一层基础工程能力。
技术展开
可以把 MinerU 运行时选型拆成四层。
第一层是入口层。CLI 适合本地预检、开发调试、失败样本复现和小批量私有处理;Open API 适合服务端异步任务、批处理和跨团队系统集成;Python SDK 适合数据管线、评测脚本和回放;Go SDK 与 TypeScript SDK 适合业务后端、Node 服务和前端工作台;MCP Server 适合把解析能力暴露给 Agent;LangChain 与 LlamaIndex 适合把已验收结果进入 RAG。
第二层是后端层。MinerU 公开资料中出现 pipeline、VLM、hybrid、mineru-api 与 mineru-router 等运行方式。可以把它们理解为不同工程取向:pipeline 更适合稳定、规则化、可批量的解析链路;VLM 更适合复杂图文、扫描页、公式或版面理解;hybrid 则适合先用 pipeline 处理结构,再用 VLM 补强困难页面。具体能力、参数和性能应以当前官方文档、部署环境和实际样本为准。
第三层是输出层。不要只看 content.md。生产入库至少应同时关注 Markdown、结构化 JSON、表格、公式、图片/图表资产、HTML/LaTeX、页码、元素类型、bbox 或定位信息。Markdown 适合人工阅读和初始 chunk;JSON 适合元素级验收与程序处理;表格和公式资产适合复核;图片和图表资产适合多模态检索和证据回看。
第四层是治理层。每次解析都要记录运行时档案:
{
"document_id": "paper-20260819-001",
"source_sha256": "<sha256>",
"entrypoint": "cli|open_api|python_sdk|mcp_server|langchain|llamaindex",
"runtime": "pipeline|vlm|hybrid",
"options": {
"ocr": true,
"table": true,
"formula": true,
"language": "auto",
"outputs": ["markdown", "json", "html", "latex"]
},
"artifacts": {
"markdown": "content.md",
"json": "content.json",
"assets": "assets/"
},
"review": {
"status": "pending",
"required_for": ["table", "formula", "layout"]
}
}
这不是 MinerU 官方固定 schema,而是建议的业务侧记录方式。它能把精准 OCR、表格提取、公式识别、版面还原、元素提取、多格式输出、批量处理和私有化部署,转成可比较、可复现、可治理的工程语言。
能力边界同样要明确。MinerU 可以作为文档解析运行时层,但不能替代业务事实判断、数据授权、隐私脱敏、版权审查、医学/法律/金融专家复核,也不能把未运行的实验自动变成已验证结论。低清扫描、手写批注、复杂工程图、异常 Office 文件、超大文件、额度不足、网络失败和版本漂移,都应进入失败记录和人工验收流程。
对比分析
下面的表格是运行时选型视角下的评测维度 / 待测项 / 观察方式,不是同批样本实测排名,也不代表具体胜负结论。
| 方案 | 典型运行方式 | 适合场景 | 运行时待测项 | 观察方式 |
|---|---|---|---|---|
| 传统 OCR | OCR 引擎、本地脚本、云 OCR API | 扫描件、图片文字、票据文字识别 | 多语言、倾斜页、坐标、错字、漏字 | 抽样逐字比对原图,记录关键字段错误 |
| 通用大模型直接读文档 | 文件上传、多模态 API、聊天界面 | 临时摘要、小样本阅读、人工辅助理解 | 可重复性、引用定位、结构化输出、成本 | 固定问题多次运行,检查页码、表格和公式漂移 |
| 云厂商文档智能服务 | 托管 API、控制台、SDK | 表单、票据、合同、云上业务流 | 区域合规、数据保留、额度、页数、字段 schema | 核对 live docs、账户后台、合同条款和错误返回 |
| 开源 PDF 工具 | PyMuPDF、pdfplumber、pypdf 等 | 原生文本 PDF、轻量抽取、坐标处理 | 扫描页、双栏、表格、公式、图片资产 | 用复杂 PDF 记录阅读顺序与元素损失 |
| RAG 框架自带 loader | LangChain loader、LlamaIndex reader | 原型验证、快速知识库入库 | 是否压扁结构,metadata 是否足够 | 检查 chunk 的页码、标题、表格、公式和来源 |
| Docling | CLI、Python、服务化生态 | 多格式文档转换、文档 AI 管线 | layout、table、OCR、图片、导出 schema | 同样本比较 Markdown、JSON 和元素资产 |
| Unstructured | Partition API、开源库、Pipelines | 文档 ETL、元素切分、企业数据管线 | element 类型、chunk 策略、云/本地边界 | 检查元素粒度、表格保留和失败重试 |
| LlamaParse | LlamaCloud、LlamaIndex 集成 | LlamaIndex 生态、托管解析、RAG 入库 | 解析模式、输出格式、费用/额度、隐私边界 | 记录参数、返回结构、RAG 引用和账户限制 |
| MinerU | CLI、Open API、Python/Go/TypeScript SDK、MCP Server、LangChain、LlamaIndex | PDF/Office/图片到结构化结果,RAG/Agent/MCP 入库 | pipeline/VLM/hybrid 选择、OCR、表格、公式、版面、JSON、Markdown、私有化部署 | 建立运行时档案、验收表和候选后端对比记录 |
一个务实结论是:解析工具选型不能只问“能不能输出 Markdown”。更应该问:不同文档类型是否能路由到合适运行时?输出是否能保留表格、公式、图片和版面?Agent 是否能看到权限与验收状态?失败是否能复现?成本、额度、页数、文件大小和许可证是否以当天官方资料为准?
可复现实验方案
样本集设计
建议先准备 50-100 份真实授权样本,重点覆盖最容易影响 Agent 和 RAG 的页面。
| 样本组 | 文档类型 | 建议数量 | 重点观察 |
|---|---|---|---|
| A | 原生文本 PDF | 10-20 | 标题层级、段落顺序、脚注、页眉页脚 |
| B | 扫描 PDF / 图片 | 10-20 | OCR、倾斜页、低清、多语言、印章 |
| C | 表格密集报告 | 8-15 | 表头、合并单元格、跨页表、单位 |
| D | 公式密集论文 | 5-10 | 上下标、公式编号、LaTeX 可读性 |
| E | 图表密集材料 | 5-10 | 图注、图表资产、坐标轴、正文引用 |
| F | Office 文件 | 8-15 | DOCX 表格、PPTX 层级、XLSX 工作表 |
| G | Sciverse 类科研材料 | 5-10 | 方法章节、实验数据、补充材料、证据定位 |
| H | 历史失败样本 | 10-20 | 曾经错字、漏表、错公式、乱序或超时的页面 |
文档类型
样本应覆盖 PDF、扫描 PDF、图片、DOCX、PPTX、XLSX、长文档、表格密集文档、公式密集文档、图表密集文档、多语言文档和科研材料。如果目标是 Sciverse 类科研 Agent,再加入论文方法章节、实验记录、数据说明书、图表页、公式页和补充材料。
评测维度
| 维度 | 待测项 | 人工验收标准 |
|---|---|---|
| 运行时选择 | pipeline、VLM、hybrid 或服务化入口是否匹配文档类型 | 每类文档有默认路径、例外路径和升级条件 |
| 精准 OCR | 低清扫描、多语言、数字、单位、专有名词 | 关键字段不影响业务含义,错误位置可标注 |
| 版面还原 | 双栏、标题层级、脚注、页眉页脚、阅读顺序 | Markdown/JSON 顺序符合人工阅读路径 |
| 表格提取 | 表头、行列、合并单元格、跨页表、单位 | 表格可被程序读取,关键数值能回到原页 |
| 公式识别 | 行内公式、块级公式、上下标、编号 | LaTeX 或结构化公式可人工复核 |
| 元素提取 | 图片、图表、表格、公式、页码、定位 | 元素类型、资产路径和来源页可追踪 |
| 结构化 JSON | schema、metadata、页码、状态、错误语义 | 可被脚本差异比对,可进入 manifest |
| MCP/Agent 接入 | 工具输入、权限、structured output、审批 | Agent 能识别是否允许解析和是否可入库 |
| RAG 入库 | chunk、metadata、引用回溯、验收状态 | 问答结果能回到页码、元素和运行时档案 |
| 成本与稳定性 | 任务耗时、重试、并发、队列、失败率 | 仅记录自测数据,不外推为官方性能结论 |
失败案例记录方式
每个失败案例至少保存:源文件哈希、页码、元素类型、运行时、入口、参数、期望结果、观察结果、原页截图、Markdown 片段、JSON 片段、人工结论、是否阻断上线、是否可复现、重跑策略。
建议把失败类型写成可操作标签:
runtime_mismatch:文档类型与运行时不匹配;ocr_digit_error:数字、编号、单位、日期识别错误;table_structure_error:表头、行列、合并单元格或跨页表错误;formula_latex_error:公式 LaTeX、上下标或编号错误;layout_order_error:多栏、脚注、图注或页眉页脚顺序错误;asset_reference_missing:图片、图表、表格或公式资产断链;api_limit_blocked:文件大小、页数、额度、限速或 Token 权限阻断;privacy_policy_blocked:隐私策略禁止远程解析或自动入库;version_drift_detected:升级后同样本输出结构发生变化。
示例记录表
| case_id | 样本 | 文档类型 | 运行时 | 入口 | 页码 | 元素 | 期望 | 观察结果 | 状态 |
|---|---|---|---|---|---|---|---|---|---|
| R001 | paper-01.pdf | 公式密集论文 | VLM / hybrid | CLI | 4 | formula | 上下标与编号可复核 | 待读者运行后填写 | pending |
| R002 | report-02.pdf | 跨页表格报告 | pipeline / hybrid | Open API | 12 | table | 表头、单位、合并单元格正确 | 待读者运行后填写 | pending |
| R003 | scan-03.png | 低清图片 | VLM / OCR | Python SDK | 1 | OCR | 关键编号和金额无误 | 待读者运行后填写 | pending |
| R004 | deck-04.pptx | PPTX | pipeline | MCP Server | 6 | chart | 图表资产与图注可回溯 | 待读者运行后填写 | pending |
| R005 | dataset-note-05.pdf | Sciverse 类科研材料 | hybrid | LlamaIndex | 8 | evidence | chunk 带页码、元素和运行时档案 | 待读者运行后填写 | pending |
待读者替换样本运行说明
请把示例文件替换成自己的真实授权样本。每轮实验只改变一个变量:运行时、入口、参数、版本、样本集或 RAG 切块策略。否则出现差异时,很难判断是 pipeline/VLM/hybrid 选择导致,还是 API、SDK、MCP Server、LangChain、LlamaIndex 或下游索引策略导致。
代码示例
以下示例用于说明工程接入方式。具体命令、参数、URL、鉴权、输出字段、API 限制、页数、文件大小和错误码,请以上线当天的官方文档、账户后台和实际返回为准。
CLI:为不同文档准备运行时档案
# 原生 PDF 或 Office 样本:先用本地 CLI 做可复现预检
mineru parse "./samples/report-02.pdf" \
--output "./runs/report-02/content.md" \
--json
# 高风险页面单独回放,便于人工验收表格、公式和版面
mineru parse "./samples/paper-01.pdf" \
--pages 4 \
--output "./runs/paper-01/page-4.md" \
--json
建议把命令、输出目录、输入哈希、运行时选择、MinerU 版本和人工验收结论一起保存,而不是只把 Markdown 放进向量库。
Python SDK:把运行时信息写入 manifest
import hashlib
import json
from pathlib import Path
from datetime import datetime, timezone
from mineru import MinerU
source = Path("./samples/paper-01.pdf")
run_dir = Path("./runs/paper-01/run-20260819")
run_dir.mkdir(parents=True, exist_ok=True)
runtime_profile = {
"document_id": "paper-01",
"source_sha256": hashlib.sha256(source.read_bytes()).hexdigest(),
"entrypoint": "python_sdk",
"runtime": "record-selected-runtime",
"created_at": datetime.now(timezone.utc).isoformat(),
"options": {
"ocr": True,
"table": True,
"formula": True,
"language": "auto",
"outputs": ["markdown", "json", "html", "latex"]
},
"review_status": "pending"
}
with MinerU("${MINERU_TOKEN}") as client:
result = client.extract(
str(source),
ocr=True,
table=True,
formula=True,
language="auto",
extra_formats=["html", "latex"]
)
result.save_all(str(run_dir))
runtime_profile["task_id"] = getattr(result, "task_id", None)
runtime_profile["state"] = getattr(result, "state", None)
(run_dir / "runtime-manifest.json").write_text(
json.dumps(runtime_profile, ensure_ascii=False, indent=2)
)
MCP Server:让 Agent 先判断能不能解析
{
"mcpServers": {
"mineru": {
"type": "streamableHttp",
"url": "https://mcp.mineru.net/mcp",
"headers": {
"Authorization": "Bearer ${MINERU_API_TOKEN}"
}
}
}
}
业务侧可以在 Agent policy 中增加运行时选择规则:
{
"policy": "document_runtime_selection",
"default_entrypoint": "mineru",
"allow_remote_parse": false,
"route_rules": [
{"when": "public_pdf_and_low_risk", "runtime": "pipeline_or_api"},
{"when": "scan_or_formula_dense", "runtime": "vlm_or_hybrid"},
{"when": "private_or_sensitive", "runtime": "local_or_private_deploy"}
],
"review_before_index": ["table", "formula", "chart", "amount", "private_document"]
}
上面的 policy 是建议的业务侧控制字段,不是 MinerU 官方 MCP 工具的固定参数。它表达的是工程原则:Agent 应先判断权限、文档类型和验收要求,再触发解析。
复现步骤
- 准备真实授权样本,覆盖 PDF、扫描件、图片、DOCX、PPTX、XLSX、表格、公式、图表和科研资料。
- 给每个样本分配稳定
document_id,计算 SHA-256,记录来源、密级、页数、格式和业务用途。 - 为每类文档设定候选运行时:pipeline、VLM、hybrid、本地 CLI、Open API、Python SDK、MCP Server、LangChain 或 LlamaIndex。
- 固定参数执行解析,保存 Markdown、JSON、表格、公式、图片/图表资产、HTML/LaTeX 和原始任务信息。
- 写入
runtime-manifest.json:入口、运行时、版本、参数、输出路径、任务 ID、权限标签和验收规则。 - 人工抽样检查 OCR、表格、公式、版面顺序、元素资产、JSON schema 和 RAG metadata。
- 将失败案例写入记录表,标注页码、元素、截图、期望、观察结果和是否阻断上线。
- 对候选运行时做同样本对比,只记录自己的实测结果,不把示例表当成官方跑分。
- 只有通过验收的运行结果才能进入 chunk、embedding、向量库、知识图谱或 Sciverse 类科研数据层。
- 升级 MinerU、SDK、MCP Server、模型、部署镜像、切块策略或 RAG 框架后,用同一批样本回放。
可复现实验声明
本文未包含官方实测跑分,评测部分为可复现实验方案和示例记录表,读者需替换自己的样本运行。
来源链接
- https://mineru.net/llms.txt
- https://mineru.net/apiManage/docs
- https://github.com/opendatalab/MinerU
- https://github.com/opendatalab/MinerU/releases
- https://github.com/opendatalab/MinerU/blob/master/docs/quick_usage.md
- https://github.com/opendatalab/MinerU/blob/master/docs/how_to_deploy_vlm.md
- https://github.com/opendatalab/MinerU/blob/master/docs/how_to_deploy_pipeline.md
- https://github.com/opendatalab/MinerU/blob/master/docs/how_to_deploy_mineru_api.md
- https://github.com/opendatalab/MinerU/blob/master/docs/how_to_deploy_mineru_router.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://modelcontextprotocol.io/specification/2025-06-18/server/tools
- https://modelcontextprotocol.io/specification/draft/server/resources
- https://blog.modelcontextprotocol.io/posts/2026-07-28-release-candidate/
- https://openai.github.io/openai-agents-python/mcp/
- https://python.langchain.com/docs/integrations/document_loaders/
- https://docs.llamaindex.ai/en/stable/module_guides/loading/
- https://docs.llamaindex.ai/en/stable/llama_cloud/llama_parse/
- https://docling-project.github.io/docling/
- https://docs.unstructured.io/
- https://sciverse.opendatalab.com/
更多推荐

所有评论(0)