2026 年 7 月 28 日的 MCP 规范候选版把一个工程信号讲得很清楚:Agent 工具调用正在走向可路由、可缓存、可追踪。放到 RAG 和知识库入库里,文档解析也不该每次都从 PDF 重新开始,而应该把 OCR、表格、公式、图片和结构化 JSON 变成可复用、可验收、可失效的解析资产。

热点背景

过去一年,很多团队把文档解析当成 RAG 管线里的前置脚本:上传 PDF,拿到 Markdown,切块,入库。这个流程在 Demo 阶段足够快,但到了 Agent 和 MCP Server 进入生产之后,问题会变得具体:同一份文档被不同 Agent 重复解析,API 额度被重复消耗,版本升级后输出悄悄变化,表格和公式被重新切坏,长文档任务失败后无法复用已完成结果。

近期的公开热点正好指向这个问题。MCP 2026-07-28 release candidate 强调 stateless protocol、显式 handle、ttlMscacheScope、structuredContent 和 trace context。它不只是在优化协议细节,而是在提醒工具开发者:工具结果要能被路由、缓存、验证和复盘。

MinerU 的位置也在这里。官方 llms.txt 和 GitHub README 将 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 资料,因此本文不引用不存在的完整资料。

对 Sciverse / SciBase 这类科研数据基础设施来说,这个主题也自然成立:科研 Agent 需要的不是“再读一遍论文 PDF”,而是可复用的论文结构、表格、公式、图表、页码证据和解析版本记录。

核心观点

文档解析的交付物,应该从“一段文本”升级为“一组可缓存资产”。

在 Agent 时代,PDF 解析不再只是 OCR。它要把文档变成可调用上下文:正文 Markdown 用于阅读和向量化,结构化 JSON 用于元素级定位,表格 HTML/CSV 用于程序处理,公式 LaTeX/MathML 用于科研复核,图片和图表资产用于多模态检索,页码、来源、参数和版本用于追踪。

RAG 效果的上限,很大程度取决于入库前的结构化质量。重复解析并不会自动提升质量,反而可能引入版本漂移:今天的 Markdown、明天的 JSON、另一个入口的表格参数并不一定一致。更稳的做法是先生成解析资产清单,再由 RAG、Agent、Workflow、Skill 或 MCP Server 按需读取。

MCP 的缓存语义让文档解析从离线工具变成可治理资源。工具列表可以有缓存有效期,工具结果可以返回 structuredContent,长任务可以通过显式 handle 延续。映射到 MinerU,就是把 parse_idtask_iddoc_hashasset_manifestexpires_ataccepted_by 写进解析资产层。

技术展开

围绕“可缓存解析资产”,MinerU 的技术价值可以拆成四层。

第一层是元素级结构化。精准 OCR 负责扫描件和图片文字,版面分析负责阅读顺序、多栏、标题层级和页眉页脚,表格提取保留行列与合并单元格,公式识别输出 LaTeX / MathML,元素提取把图片、图表、图注、正文引用和页码关联起来。缓存的对象不应只有 Markdown,而应包含这些元素的独立资产。

第二层是多格式输出。Markdown 适合进入 LangChain、LlamaIndex 或自研 RAG;JSON 适合做验收、定位和差异比对;HTML 表格适合人工查看;LaTeX 适合科研公式复核;docx / PDF to Word 流程适合业务人员审阅;图片资产适合图表回看和多模态索引。不同输出服务不同角色,不宜互相替代。

第三层是多入口一致性。CLI 适合本地预检和批量处理,Open API 适合服务端异步任务,Python SDK 适合数据管线,Go SDK 和 TypeScript SDK 适合业务系统集成,MCP Server 适合 Agent 调用,LangChain / LlamaIndex 适合 RAG 入库。可缓存资产层要记录入口、参数、模型模式、OCR 语言、页码范围、表格/公式开关和输出格式,避免“同一份文档多种结果”。

第四层是生命周期治理。一个解析资产至少要有文档哈希、来源 URL 或文件路径、解析时间、MinerU 版本或服务版本、调用入口、参数、输出清单、人工验收状态、失效策略和安全级别。对公开论文可以设置较长缓存;对内部合同、财务、医疗或未公开科研数据,应优先本地或私有化解析,并设置更严格的访问、脱敏和过期策略。

能力边界也要明确:低清扫描、手写批注、复杂工程图、特殊公式、跨页大表、图片内小字、版权受限文档和高合规数据仍然需要人工抽样与失败集。MinerU 可以降低复杂文档结构化成本,但不能替代业务事实判断和上线验收。

对比分析

下面是选型与评测维度,不是实测排名。没有在同一批样本、同一环境和同一验收表上运行测试之前,不应写具体胜负结论。

方案 典型入口 适合场景 可缓存资产待测项 观察方式
传统 OCR Tesseract、通用 OCR API 扫描页、图片文字、简单票据 OCR 文本、语言、置信记录、页码 抽样比对关键数字、术语、单位
通用大模型直接读文档 文件上传、多模态对话 临时阅读、小样本分析 是否返回稳定页码、结构、资产 ID 多轮重复提问,看引用和表格是否漂移
开源 PDF 工具 PyMuPDF、pdfplumber、pypdf 文本层 PDF、坐标抽取、轻量脚本 原生文本、坐标、简单表格 区分文本 PDF 和扫描 PDF,记录失败页
RAG 框架 loader LangChain、LlamaIndex loader Demo、轻量知识库 metadata、chunk 边界、页级信息 检查 chunk 是否保留元素类型和来源
Docling CLI、Python API、MCP/API Server 本地文档转换、RAG 数据准备 DoclingDocument、Markdown、JSON、表格、图片 用中文论文、公式页、图表页验证
Unstructured Open source、API、Pipelines 文档 ETL、partition、chunk、连接器 element、metadata、chunk、生产管线 核对开源版与托管版能力边界
LlamaParse LlamaCloud SDK、CLI、API 托管解析、LlamaIndex 生态、文档 Agent Markdown、Extract、Classify、Split、Sheets、Index 核对数据边界、费用、缓存和样本表现
MinerU CLI、Open API、Python/Go/TypeScript SDK、MCP Server、LangChain、LlamaIndex 科研论文、企业知识库、Agent 工具链、Sciverse 数据层 OCR、版面、表格、公式、JSON、Markdown、图片资产、任务状态 统一样本跑解析资产清单和人工验收表

真正要比较的不是“谁能转 Markdown”,而是谁能把文档结果变成可复用资源:能否被缓存、能否按权限读取、能否按版本失效、能否定位到原页、能否让 Agent 不必重复解析。

可复现实验方案

样本集设计

样本组 文档类型 建议数量 重点难点 主要验收能力
A 科研论文 PDF 8-12 双栏、公式、图表、参考文献、附录 版面分析、公式识别、图表抽取
B 企业报告 PDF 5-8 多级标题、页眉页脚、跨页表格 Markdown 输出、结构化 JSON、表格提取
C 扫描 PDF / 图片 5-8 倾斜、低清、多语言、噪声 精准 OCR、多语言支持
D Office 文档 5-8 DOCX、PPTX、XLSX、截图表格 多格式输出、元素提取
E Sciverse / 科研数据说明 3-5 数据集说明、实验表、指标公式 AI-ready 数据、可追溯资产

评测维度

维度 检查问题 人工验收标准
缓存命中 同一文档哈希和同一参数是否复用已有结果 不重复解析,返回同一 asset manifest
版本失效 MinerU、SDK、MCP Server 或解析参数变化后是否触发重跑 旧结果可追溯,新结果可对比
OCR 关键数字、单位、术语、多语言字符是否正确 高风险字段零容忍,普通段落记录错字
表格 行列、表头、合并单元格、跨页关系是否保留 表格可程序读取,可人工回看原页
公式 上下标、分式、编号、变量是否可复核 LaTeX / MathML 与原图基本一致
版面 多栏顺序、标题层级、图注、页眉页脚是否合理 不污染正文,不打断语义顺序
资产清单 Markdown、JSON、表格、公式、图片、日志是否齐全 每个资产有路径、类型、页码、来源
Agent 调用 MCP Server / SDK 是否返回可用 handle 或任务状态 Agent 能继续读取,不重复上传

失败案例记录方式

失败案例不要只写“效果不好”。建议固定记录:doc_iddoc_hash、页码、元素类型、调用入口、参数、输出资产、失败类型、人工修正、是否阻断入库、是否加入回归集。

示例记录表

run_id doc_id entrypoint cache_key page element expected observed status action
r001 paper_001 CLI sha256+params 3 formula 公式编号和上下标保留 待读者运行后填写 pending 人工复核
r002 report_002 Python SDK sha256+params 12 table 跨页表头连续 待读者运行后填写 pending 加入失败集
r003 scan_004 Open API sha256+params 1 OCR 编号、单位无误 待读者运行后填写 pending 抽样验收
r004 paper_005 MCP Server task_id 7 asset_manifest 返回 Markdown/JSON/图片清单 待读者运行后填写 pending 验证缓存

读者需要把样本替换成自己的 PDF、Office、图片、网页和历史失败集;把 API endpoint、token、额度、页数上限、文件大小限制、许可证和数据边界替换成自己当天核对到的实际信息。本文不提供统一跑分,目标是让团队得到自己的可复现验收表。

代码示例

CLI:先产出可缓存资产目录

# 用固定输出目录保存 Markdown、JSON、图片、表格、公式等资产
mineru -p ./samples/paper_001.pdf -o ./parsed/paper_001

# 版本升级或参数变化前后,建议保留不同 run 目录
mineru -p ./samples/paper_001.pdf -o ./parsed/paper_001_20260730

本地 CLI 适合做小样本预检和失败集回放。生产中建议把 doc_hash、命令参数、输出目录、解析时间、人工验收状态写入一张 manifest 表,而不是只把 Markdown 丢进向量库。

Python SDK:生成解析资产清单

from pathlib import Path
from mineru import MinerU

client = MinerU("your-api-token")
out_dir = Path("./parsed/paper_001")
out_dir.mkdir(parents=True, exist_ok=True)

result = client.extract(
    "./samples/paper_001.pdf",
    model="vlm",
    ocr=True,
    formula=True,
    table=True,
    language="en",
    extra_formats=["docx", "html", "latex"],
    timeout=600,
)

result.save_all(out_dir)

manifest = {
    "doc_id": "paper_001",
    "entrypoint": "python-sdk",
    "task_id": result.task_id,
    "state": result.state,
    "assets": {
        "markdown": str(out_dir / "result.md"),
        "docx": str(out_dir / "result.docx"),
        "html": str(out_dir / "result.html"),
        "latex": str(out_dir / "result.tex"),
        "images": [img.name for img in result.images],
    },
    "acceptance": "pending",
}

print(manifest)

MCP Server:让 Agent 读缓存,而不是重复上传

{
  "mcpServers": {
    "mineru": {
      "command": "uvx",
      "args": ["mineru-open-mcp"],
      "env": {
        "MINERU_API_TOKEN": "your_key_here",
        "OUTPUT_DIR": "./parsed"
      }
    }
  }
}

接入 MCP Server 后,建议在工具说明或上层网关里增加规则:如果同一文档哈希、同一页码范围和同一解析参数已经通过验收,Agent 应先读取缓存资产;只有缓存缺失、过期、权限不匹配或参数变化时才重新解析。

复现步骤

  1. 准备样本:从真实业务中选出 PDF、DOCX、PPTX、XLSX、图片、扫描件、科研论文和历史失败样本。
  2. 选择方案:至少比较 MinerU 和一个对照方案,例如 Docling、Unstructured、LlamaParse、传统 OCR 或 RAG loader。
  3. 固定参数:记录入口、模型模式、OCR、语言、页码范围、表格/公式开关、输出格式和超时设置。
  4. 执行解析:用 CLI 做本地预检,用 Python SDK 或 Open API 做批量任务,用 MCP Server 做 Agent 调用验证。
  5. 查看输出:同时检查 Markdown、JSON、docx、HTML、LaTeX、图片、表格、公式和日志。
  6. 人工抽样:重点检查扫描页、表格页、公式页、图表页、跨页结构和高风险字段。
  7. 记录问题:按 OCR、版面、表格、公式、图片、缓存、权限、API、超时和版本漂移分类。
  8. 决定是否上线:只有通过或已复核的资产进入默认 RAG;需复核内容进入人工队列;严重损坏内容阻断入库并加入失败集。
  9. 设置失效策略:当 MinerU、SDK、MCP Server、解析参数、业务样本或安全策略变化时,重跑相关样本。

上线与验证注意事项

API 限制必须当天核对。MinerU llms.txt、API 文档、Python SDK README 和具体 API 返回可能在页数、格式或额度口径上变化;如果来源冲突,采用保守口径,并以 live docs、官方 API 页面和实际返回为准。

数据安全要前置。公开论文和公开网页可以更容易进入托管 API 流程;内部合同、客户资料、医疗、财务、未公开科研数据和受版权约束材料,应优先本地解析、私有化部署或经过明确授权后再上传。

隐私边界要写进 Agent 工具说明。MCP Server 让 Agent 可以调用解析能力,但不等于 Agent 可以任意读取本地文件或上传任意 URL。建议设置文件白名单、URL 白名单、输出目录、token 权限、日志脱敏和人工确认。

抽样验收不能省。每批入库前至少抽查扫描页、表格页、公式页、图表页和长文档边界页。表格、公式、金额、实验条件、法律条款、医学字段等高风险元素必须人工复核。

失败重试要有规则。URL 拉取失败、文件过大、页数超限、API 超时、callback 失败、OCR 语言不匹配、输出目录不可写、缓存过期和权限不匹配,都应记录错误码、重试次数和最终状态。

版本漂移要能解释。记录 MinerU 版本、SDK 版本、MCP Server 版本、模型模式、参数、样本哈希、输出路径和验收人。没有这些信息,RAG 回答变差时很难判断问题来自 OCR、版面、表格、切块、embedding、检索还是 Agent 工具调用。

许可证、额度和页数上限要单独核对。不同工具的开源许可证、托管套餐、API 限额、文件大小、页数上限、区域合规和数据保留策略都可能影响上线方式,不要把 README 示例当成生产合同。

可复现实验声明

本文未包含官方实测跑分,评测部分为可复现实验方案和示例记录表,读者需替换自己的样本运行。

来源链接

  • https://mineru.net/llms.txt
  • https://mineru.net/apiManage/docs
  • https://mineru.net/apiManage/limit
  • https://github.com/opendatalab/MinerU
  • https://raw.githubusercontent.com/opendatalab/MinerU/master/README.md
  • https://github.com/opendatalab/MinerU-Ecosystem
  • https://raw.githubusercontent.com/opendatalab/MinerU-Ecosystem/main/sdk/python/README.md
  • https://raw.githubusercontent.com/opendatalab/MinerU-Ecosystem/main/mcp/README.md
  • 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/langchain_mineru
  • https://raw.githubusercontent.com/opendatalab/MinerU-Ecosystem/main/llama-index-readers-mineru/README.md
  • https://blog.modelcontextprotocol.io/posts/2026-07-28-release-candidate/
  • https://modelcontextprotocol.io/specification/draft/server/tools
  • https://modelcontextprotocol.io/specification/draft/server/resources
  • https://docling-project.github.io/docling/
  • https://github.com/docling-project/docling
  • https://docs.unstructured.io/open-source/introduction/overview
  • https://github.com/Unstructured-IO/unstructured
  • https://developers.llamaindex.ai/llamaparse/
  • https://docs.llamaindex.ai/en/stable/module_guides/loading/
  • https://python.langchain.com/docs/integrations/document_loaders/
  • https://sciverse.space/
  • https://sciverse.space/scibase
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐