MCP 正在把工具结果推向带 schema 的结构化内容,科研数据平台也在强调 Agent 可直接消费的 AI-Ready 全文。于是,文档入库的关键不再是“这次能不能解析成功”,而是半年后能否解释、复跑并安全升级。MinerU 的 Markdown、JSON、元素资产与多入口能力,适合成为这条版本链的解析层。

热点背景

近期 MCP 规范的演进持续强化 outputSchemastructuredContent:工具输出不只是给人看的文本,也应是客户端可以校验、程序可以消费的结构。对 RAG 与 Agent 而言,这意味着上下文不能只保存一份“最终 Markdown”;它还需要能说明这份内容由什么输入、什么解析配置、什么版本和什么验收规则产生。

这个问题在科研场景尤其明显。Sciverse 将自身定位为供 Agent 消费的科学证据数据层,并提供 AI-Ready 全文与 RESTful API。论文里的公式、跨页表格、图表、版面顺序一旦在解析升级后发生变化,研究综述、检索切块与证据定位都可能随之改变。没有版本链,就无法区分“源文档更新”“解析器升级”和“下游切分策略变化”。

MinerU 的官方面向模型资料明确覆盖 PDF、Word、PPT、图片与 HTML 向 Markdown、JSON、LaTex、HTML 的结构化转换,也提供 CLI、Open API、Python/Go/TypeScript SDK、MCP Server、LangChain 与 LlamaIndex 等生态入口。这些能力适合交付解析资产;但“可回放”仍需要业务方在入库层补上不可变存档、配置快照和验收记录。

核心观点

解析结果不是事实,带来源的解析记录才是事实

同一份 PDF 的文本层、OCR 开关、公式与表格开关、语言、模型与导出格式不同,得到的 Markdown/JSON 可能不同。把其中任一输出直接当成唯一真相,会让后续检索与 Agent 回答失去解释基础。

建议将一次入库定义为一个解析运行(parse run):原文件的内容哈希、解析器/模型版本、参数、原始响应、结构化输出、元素资产、人工抽样结论共同组成不可变记录。下游 chunk、embedding、索引是该记录的派生物,而不是唯一存档。

版本升级应该触发“差异审阅”,不是全量覆盖

MinerU 支持 OCR、公式识别、表格提取、版面还原与多格式输出;这些正是最容易在版本或参数变动后出现语义差异的层。正确动作不是用新结果覆盖旧库,而是对同一源文件在候选版本下重跑:比较标题层级、阅读顺序、表格单元格、公式 LaTeX、图像/图表引用及元素数量,再按风险阈值决定是否推广。

MCP 的结构化返回让“回放合同”可被 Agent 检查

MCP 的工具可以声明输出 schema;因此,解析服务可把 source_hashparser_versionconfig_hashartifact_urivalidation_status 作为结构化返回的一部分。Agent 在引用资料前便能判断它读到的是哪一次解析运行,而不是把不明来源的文本塞进上下文。注意:协议允许结构化输出,并不自动替你保存版本或执行验收;这部分仍是数据管道责任。

技术展开

一条最小可回放链可分为四层:

应保存的对象 MinerU 能力关联 目的
源文件层 原文件、来源 URL、采集时间、SHA-256 PDF/Office/图片/HTML 多格式处理 确保可取得同一输入
解析层 解析器与模型版本、参数快照、任务 ID、原始返回 Open API、CLI、Python SDK、MCP Server 允许同配置复跑
资产层 Markdown、JSON、表格/公式/图像元素、可选 docx/html/latex 版面分析、精准 OCR、表格提取、公式识别、元素提取、多格式输出 保留可审计的结构
检索层 切块规则、embedding 模型、索引版本、访问权限 LangChain、LlamaIndex、RAG 入库 把解析变化与检索变化分开

一个 run-manifest.json 可以保持足够小,但必须可关联:

{
  "document_id": "paper-2026-001",
  "source_sha256": "<sha256>",
  "parser": {"product": "MinerU", "version": "<record-at-run-time>", "model": "vlm"},
  "options": {"ocr": true, "formula": true, "table": true, "language": "en"},
  "artifacts": {"markdown": ".../full.md", "json": ".../content.json", "elements": ".../assets/"},
  "validation": {"sampled": true, "status": "approved", "review_rule": "table-formula-v1"}
}

这里的版本字段应由部署环境或 API 响应实际写入,不能靠示例值猜测。对于私有化部署,额外记录镜像摘要、模型权重版本与硬件/推理后端;对于云 API,则记录 API 文档快照日期、任务 ID 与额度/限制的核对结果。

Sciverse 或类似科研证据库的连接点也很自然:把“论文全文的解析运行”与“检索证据片段”分离。检索记录指向 document ID、artifact URI 和块级/页级定位,便可在版本切换时重新生成候选索引,而不丢掉被引用过的旧证据。

对比分析

以下是评测维度,不是已完成的产品跑分或胜负结论。不同文档、部署方式、版本与权限条件下,结果可能不同。

方案 结构与元素表达 版本可回放所需补充 待测项
传统 OCR 通常以字符/文本块为主 原图、OCR 引擎/语言包版本、坐标与后处理规则 漏字、顺序、表格丢列
通用大模型直接读文档 可能产生摘要或问答,不天然是稳定资产 模型版本、提示词、文件输入、采样参数、输出存档 可重复性、引用定位、幻觉边界
开源 PDF 文本工具 多数侧重文本层或页面对象 工具/依赖版本、读取顺序、后处理 多栏顺序、公式、扫描页
RAG 框架自带 loader 便于接入,结构深度依实现而异 loader 版本、切块/清洗/metadata 规则 元素保留、增量更新
Docling / Unstructured / LlamaParse 各自提供文档转换与生态能力 解析选项、服务/包版本、输出 schema 表格、图表、成本与私有化路径
MinerU Markdown、JSON 与可选 docx/html/latex;覆盖 OCR、表格、公式、版面和元素资产 运行版本、模型/参数、任务 ID、输出资产与验收记录 多语言 OCR、跨页表、公式、阅读顺序、重跑差异

选择并非“谁能输出文字”这么简单:如果系统需要人审与私有化,重点看资产可追溯性和部署边界;如果系统需要 Agent 调用,重点看 schema、权限与错误语义;如果系统是科研 RAG,重点看公式、图表、表格与证据定位能否一起回放。

可复现实验方案

样本集设计

准备 30 份可公开或已获授权的文档,并为每份保留原始文件哈希:10 份原生文本 PDF、8 份扫描/倾斜 PDF、6 份含复杂表格的财报或报告、4 份含密集公式的论文、2 份 DOCX/PPTX/XLSX。每类至少包含中文、英文或中英混排样本;如涉及科研检索,再加入带图表、参考文献和跨页表格的论文。

评测维度与人工验收标准

  1. OCR:随机抽取每份 3 段,原页逐字比对;人名、数字、单位、上下标和多语言文本不得发生影响语义的错误。
  2. 版面与阅读顺序:双栏页、页眉页脚、脚注和列表在 Markdown/JSON 中的顺序应可由人工解释。
  3. 表格与公式:随机抽取每份 2 个表格和 3 个公式;跨行列、表头、单位、LaTeX 可读性须通过人工检查。
  4. 元素资产:图像、图表、表格、公式应能与来源页或元素定位关联;缺失、重复或错配必须记录。
  5. 回放一致性:固定同一版本与参数重复运行;再以候选版本运行,按字段对比 manifest 与资产差异。
文档 ID 文档类型 运行版本/配置哈希 OCR 抽样 表格/公式抽样 版面顺序 差异等级 失败定位与处理
paper-001 双栏论文 PDF <填写> 通过/不通过 通过/不通过 通过/不通过 低/中/高 页码、元素 ID、截图、重跑结论
report-014 跨页表格 PDF <填写> 通过/不通过 通过/不通过 通过/不通过 低/中/高 页码、元素 ID、截图、重跑结论

失败案例不要只写“解析失败”。至少记录源文件哈希、页码、元素类型、期望与实际、截图、运行版本、配置哈希、是否可稳定复现、绕过方案和是否阻断上线。读者只需将自己的授权样本替换进上述集合,保持同一命名与验收表,即可运行这套实验。

代码示例

下面示例用于建立可回放记录,未包含真实 Token 或真实运行结果。

Python SDK:保存资产与运行清单

import hashlib
import json
from pathlib import Path
from mineru import MinerU

source = Path("./samples/paper.pdf")
out = Path("./artifacts/paper-001/run-20260818")
out.mkdir(parents=True, exist_ok=True)

with MinerU("${MINERU_TOKEN}") as client:
    result = client.extract(
        str(source), model="vlm", ocr=True,
        formula=True, table=True, language="en",
        extra_formats=["html", "latex"]
    )
    result.save_all(str(out))

manifest = {
    "document_id": "paper-001",
    "source_sha256": hashlib.sha256(source.read_bytes()).hexdigest(),
    "parser": {"product": "MinerU", "version": "record-from-environment", "model": "vlm"},
    "options": {"ocr": True, "formula": True, "table": True, "language": "en"},
    "task_id": result.task_id,
    "state": result.state,
    "artifacts_dir": str(out),
}
(out / "run-manifest.json").write_text(json.dumps(manifest, ensure_ascii=False, indent=2))

Open API:提交任务时传入业务数据 ID

curl --location --request POST 'https://mineru.net/api/v4/extract/task' \
  --header "Authorization: Bearer $MINERU_TOKEN" \
  --header 'Content-Type: application/json' \
  --data-raw '{
    "url": "https://your-controlled-storage.example/paper.pdf",
    "model_version": "vlm",
    "is_ocr": true,
    "enable_formula": true,
    "enable_table": true,
    "language": "en",
    "data_id": "paper-001"
  }'

不要把 Token、含敏感签名的 URL 或原文件直接写进日志。生产环境应从密钥管理系统读取 Token,并将回调签名校验、轮询失败和资产下载失败当作独立事件记录。

复现步骤

  1. 准备已授权样本,给每个文件分配稳定 document_id,计算 SHA-256,保存来源与采集时间。
  2. 选择 MinerU 的本地部署、Open API 或 SDK 入口;确认模型、OCR、表格、公式、语言和导出格式。
  3. 执行解析,将 Markdown、JSON、元素资产及可选 HTML/LaTeX/DOCX 放入带运行 ID 的只追加目录。
  4. 写入 manifest:输入哈希、版本、参数、任务 ID、输出 URI、权限标签与验收规则版本。
  5. 以固定抽样规则人工核查 OCR、公式、表格、版面和元素关联,填写评测记录表。
  6. 候选版本发布前,用同一批样本重跑,比较 manifest 与资产差异;高风险差异进入人工复核。
  7. 只有通过验收的运行才能生成新的 chunk/embedding/index;旧索引保留其 run ID,以便引用回放。

可复现实验声明

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

来源链接

  • 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-Ecosystem/tree/main/sdk/python
  • https://modelcontextprotocol.io/specification/2025-06-18/server/tools
  • https://blog.modelcontextprotocol.io/posts/2026-07-28-release-candidate/
  • https://modelcontextprotocol.io/specification/draft/server/resources
  • https://sciverse.opendatalab.com/
Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐