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、ttlMs、cacheScope、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_id、task_id、doc_hash、asset_manifest、expires_at 和 accepted_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 可以降低复杂文档结构化成本,但不能替代业务事实判断和上线验收。

对比分析

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

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

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

可复现实验方案

样本集设计

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

评测维度

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

失败案例记录方式

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

示例记录表

run_iddoc_identrypointcache_keypageelementexpectedobservedstatusaction
r001paper_001CLIsha256+params3formula公式编号和上下标保留待读者运行后填写pending人工复核
r002report_002Python SDKsha256+params12table跨页表头连续待读者运行后填写pending加入失败集
r003scan_004Open APIsha256+params1OCR编号、单位无误待读者运行后填写pending抽样验收
r004paper_005MCP Servertask_id7asset_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社区

更多推荐