Agent、MCP 和企业 RAG 正把文档解析从“批量转 Markdown”推到安全工程前台。今天值得关注的不是某个 loader 多快,而是 PDF、Office、扫描件和科研资料在进入知识库前,是否经过权限、隐私、输出结构和人工验收。MinerU 的 CLI、Open API、SDK、MCP Server、OCR、版面分析、表格提取、公式识别与结构化 JSON,适合成为这层私有解析沙箱。

热点背景

近期公开技术讨论里,MCP 的授权、安全最佳实践、工具过滤、human-in-the-loop approval、Agent sandbox 和 OWASP LLM 风险都指向同一个问题:Agent 连接外部工具后,能力边界就是安全边界。MCP 官方授权草案强调 HTTP 传输下的 OAuth、资源标识、token audience、scope selection 和 step-up authorization;安全最佳实践明确列出 confused deputy、token passthrough、SSRF、本地 MCP Server 执行风险、stdio transport 代理风险和 scope minimization。OpenAI Agents SDK 的 MCP 文档也把 hosted MCP、Streamable HTTP、stdio、approval policy、tool filtering、tracing、失败重试和工具缓存作为一等接口。

这和文档解析直接相关。企业合同、科研论文、医疗资料、财务报表、专利、内部 PPT、Excel 和扫描件,一旦被 Agent 调用解析,就可能涉及文件路径、URL 抓取、API token、回调地址、临时文件、日志、结构化输出、人工复核和最终入库。传统做法常把解析当成入库前脚本;Agent 时代更合理的做法,是把解析放进一个“私有解析沙箱”:先做权限与数据边界检查,再执行 MinerU 解析,最后只把通过验收的 Markdown、JSON、表格、公式、图片资产和元数据写入 RAG 或 Sciverse 类科研数据基础设施。

MinerU 官方 llms.txt 将产品定义为面向 Agent、RAG 和 LLM 的智能文档解析平台,支持 PDF、Word、PPT、图片、HTML 等转 Markdown、JSON、LaTeX 和 HTML,并提供免登录 Agent API、登录精准解析 API、CLI/SDK、MCP、LangChain、LlamaIndex 等生态入口。GitHub README 进一步显示 3.x 已覆盖 PDF、图片、DOCX、PPTX、XLSX,支持本地部署、CPU/GPU、Docker、mineru-api、mineru-router、多格式输出与 109 语言 OCR。公开路径中未找到可核验的 llms-fullllms-full.txtllms-full.md,本文仅使用 llms.txt、官网、GitHub README、MCP 官方文档、OpenAI Agents SDK 文档和 OWASP 公开资料。

核心观点

1. RAG 入库的安全边界,应该前移到文档解析层

很多团队把权限控制放在向量库或问答接口,但风险更早发生:文件上传、URL 拉取、OCR、图片抽取、表格导出、callback、临时目录和日志都会触碰原始数据。等文档已经变成 chunk,再谈隐私和权限,往往已经太晚。

私有解析沙箱要在解析前回答几个问题:谁提交了文件?文件来自本地、对象存储还是 URL?是否允许外发到 API?是否必须本地部署?页数、大小、格式、许可证和额度是否符合当天 live docs?解析结果是否包含敏感字段、图片资产、公式、表格和页码?哪些输出能入库,哪些只能人工查看?

2. Agent 能调用 MinerU,不等于 Agent 可以解析所有文档

MCP 让文档解析变成 Agent 可调用能力,这是生产效率的提升;但工具越自然,越需要策略层。Agent 不应获得“任意路径、任意 URL、任意 token、任意输出目录”的解析权限。更稳的做法是给 MinerU MCP Server、Open API 或 CLI 外面加一层策略:文件白名单、URL allowlist、页码范围、输出格式、敏感文档标记、审批流、失败重试、日志脱敏和版本记录。

OpenAI Agents SDK 文档中的 tool filtering、approval policy、tracing 和 MCPServerManager 思路,可以直接借鉴到 MinerU 工作流:只暴露必要工具,危险操作要求审批,连接失败不静默吞掉,每次工具调用都保留 trace。

3. 私有化部署不是万能答案,验收和审计才是生产能力

MinerU 支持本地部署、CLI、API、SDK、MCP Server、结构化 JSON、Markdown、多格式输出、OCR、版面还原、表格提取、公式识别、多语言支持、批量处理。这些能力能降低数据外发和供应商锁定风险,但本地部署本身不等于安全。真正需要上线的是一套可复现的解析验收流程:输入可追踪、参数可复现、输出可审计、失败可回归、版本漂移可解释。

对 Sciverse 或 SciBase 这类科研数据基础设施来说,这一点更重要。科研 Agent 不是只要“读懂论文摘要”,而是要把论文 PDF、实验报告、表格、公式和图表变成 AI-ready scientific data:可检索、可引用、可复核、可被工具调用,同时不突破数据授权边界。

技术展开

可以把 MinerU 私有解析沙箱拆成五层。

第一层是输入策略层。接收 PDF、DOCX、PPTX、XLSX、图片、网页 URL 或对象存储链接前,先记录 doc_id、提交人、来源、授权状态、文件哈希、密级、页码范围和业务用途。对内部文档、未公开论文、合同、医疗、财务和客户资料,默认禁止直接外发;如需调用 Open API,应有明确审批、脱敏或业务授权。

第二层是执行隔离层。低风险公开资料可以用 MinerU Open API 或 MCP remote mode;内部资料优先考虑本地 CLI、Python SDK、本地 mineru-api、Docker 或私有化部署。对 MCP stdio 或本地服务,应限制工作目录、网络访问和输出目录,不让 Agent 自由访问用户 home、SSH key、系统目录或任意临时文件。

第三层是结构化解析层。MinerU 的价值不只是精准 OCR,而是把复杂文档拆成可被系统消费的结构:Markdown 适合阅读和入库,JSON 适合元素级追踪,表格可导出 HTML,公式可转 LaTeX/MathML,图片和图表可作为资产保存,版面分析能处理多栏阅读顺序、页眉页脚、标题层级和跨页结构。

第四层是验收与入库层。解析成功只代表任务完成,不代表适合进入知识库。上线前应抽样检查 OCR、公式识别、表格提取、版面还原、多语言支持、元素提取、结构化 JSON、Markdown 输出和图片资产。只有通过验收的元素进入 LangChain、LlamaIndex、自研 RAG 或 Sciverse 数据层。

第五层是审计与版本层。记录 entrypoint 是 CLI、Open API、Python SDK、Go SDK、TypeScript SDK、LangChain、LlamaIndex 还是 MCP Server;记录 MinerU 版本、backend、模型模式、页码、开关、输出格式、API 限制核对日期、失败原因和人工结论。MinerU README 与 llms.txt 对许可、页数上限等口径存在差异时,应采用保守口径,并以 live docs、GitHub README、LICENSE 和实际 API 页面为准。

对比分析

下表是评测维度和观察方式,不是实测排名。本文没有在同一批样本、同一环境、同一版本和同一验收表上运行测试,因此不写具体胜负结论。

方案方向 典型代表 适合场景 安全与结构待测项 观察方式
传统 OCR Tesseract、PaddleOCR、通用 OCR API 扫描件、图片文字、简单版面 是否保留表格、公式、页码、阅读顺序 抽样核对关键字段、表格行列和 OCR 错字
通用大模型直接读文档 多模态聊天模型、文件上传功能 临时阅读、小样本问答 数据是否外发、证据页码是否稳定、是否可复现 固定问题多次运行,检查引用和幻觉
云厂商文档智能 Azure AI Document Intelligence、Google Document AI、Amazon Textract 云上表单、票据、行业文档 区域合规、价格、限额、字段结构、私有数据边界 用业务样本核对字段、权限、日志和成本
开源 PDF 工具 PyMuPDF、pdfplumber、pypdf 原生文本 PDF、轻量抽取 扫描页 OCR、复杂版面、公式、图片资产 区分原生 PDF 与扫描 PDF 记录失败
RAG 框架 loader LangChain loader、LlamaIndex reader 快速 Demo、轻量知识库 元数据、页码、元素类型、错误处理 检查 chunk 是否能回溯原文
专业文档解析工具 Docling、Unstructured、LlamaParse 文档 ETL、RAG 入库、结构化解析 Markdown/JSON、表格、公式、OCR、部署方式、费用 统一样本和人工验收表,不写未实测胜负
MinerU 私有解析沙箱 MinerU CLI、Open API、SDK、MCP Server、本地部署 企业知识库、科研数据管线、Agent 工具调用 OCR、版面、表格、公式、JSON、Markdown、MCP 权限、私有化部署 跨入口重跑同一批样本,记录参数、输出和审计日志

客观选型的重点不是“谁更强”,而是看风险是否可控:数据能否留在本地、输出是否结构化、失败是否可见、许可证和额度是否明确、Agent 工具权限是否最小化。

可复现实验方案

样本集设计

样本类别 文档类型 建议数量 重点观察
公开科研论文 PDF、双栏论文、公式密集论文 8-12 公式识别、图表、页码、参考文献边界
内部企业资料 DOCX、PPTX、PDF 报告 8-12 数据边界、标题层级、页眉页脚、图文混排
表格材料 XLSX、PDF 表格、跨页表 5-8 表格提取、合并单元格、单位、行列关系
扫描件 扫描 PDF、PNG、JPG 5-8 精准 OCR、多语言、低清噪声、旋转页
高风险资料 合同、财务、医疗、专利 3-5 隐私边界、人工复核、是否禁止外发
Sciverse/SciBase 样本 论文、实验报告、数据说明 3-5 AI-ready 数据、元素级证据、科研 Agent 调用

评测维度

维度 验收问题 人工验收标准
数据安全 文件是否允许外发或必须本地解析 每个样本有密级、授权和执行模式
OCR 扫描页文字、数字、单位是否正确 关键字段零容忍,普通段落记录错字
版面还原 多栏、标题、脚注、页眉页脚是否正确 阅读顺序符合原文,不污染 chunk
表格提取 行列、合并单元格、跨页关系是否保留 关键表格可人工复核
公式识别 公式是否输出 LaTeX/MathML 上下标、编号、变量符号正确
元素提取 图片、图表、图注、资产路径是否可追踪 JSON 和 Markdown 能定位到原文
Agent 接入 MCP 工具权限、approval、trace 是否完整 有工具名、参数、审批、状态和失败原因
RAG 入库 chunk 是否带页码、元素类型、来源 问答结果能回到原文证据

示例记录表

doc_id 密级 执行模式 页码 输出 风险项 人工结论 是否入库
paper_001 public Open API 1-12 MD+JSON+LaTeX 通过
contract_003 internal local CLI 1-20 MD+JSON 含客户信息 需复核 暂缓
scan_006 restricted local API 2 MD+JSON OCR 数字疑似错误 不入库
dataset_note_002 public MCP Server 1-8 MD+JSON+assets 图表需复核 需复核 暂缓

失败案例记录方式

{
  "doc_id": "contract_003",
  "classification": "internal",
  "entrypoint": "local-cli",
  "page_range": "1-20",
  "mineru_backend": "pipeline",
  "outputs": ["markdown", "json"],
  "failure_type": "privacy_review_required",
  "expected": "内部合同只能在本地解析,结果需人工确认后入库",
  "observed": "解析成功,但包含客户名称和签署信息",
  "review_status": "needs_review",
  "action": "脱敏后重新验收"
}

待读者替换样本运行说明:把上表样本替换为自己的 PDF、Office、扫描件和科研资料,保持同一批输入、同一组参数、同一张验收表,再比较 MinerU、Docling、Unstructured、LlamaParse、云服务或 RAG loader 的输出。

代码示例

CLI:把敏感样本留在本地预检

# 公开资料可先跑默认解析;内部资料建议固定输出目录和参数
mineru -p ./samples/internal-contract.pdf -o ./runs/internal-contract -b pipeline

预检时不要只看 Markdown。至少同时检查 JSON、图片资产、表格、公式、页码和失败日志,再决定是否进入知识库。

Open API:提交公开样本并记录回调

curl -X POST "https://mineru.net/api/v4/extract/task" \
  -H "Authorization: Bearer $MINERU_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/public-paper.pdf",
    "model_version": "vlm",
    "page_ranges": "1-20",
    "extra_formats": ["docx", "html", "latex"],
    "callback": "https://your-service.example/mineru/callback"
  }'

上线时记录 task_iddata_idmodel_versionpage_ranges、callback 验签状态、重试次数和当天核对到的 API 限制。涉及非公开资料时,先确认是否允许外发。

MCP Server:只给 Agent 暴露必要解析工具

{
  "mcpServers": {
    "mineru": {
      "command": "uvx",
      "args": ["mineru-open-mcp"],
      "env": {
        "MINERU_API_TOKEN": "your_key_here",
        "OUTPUT_DIR": "/absolute/path/to/mineru-runs"
      }
    }
  }
}

OpenAI Agents SDK:用 tool filter 和 approval 包一层策略

from pathlib import Path
from agents import Agent
from agents.mcp import MCPServerStdio, create_static_tool_filter

allowed_output = Path("/absolute/path/to/mineru-runs")

server = MCPServerStdio(
    name="mineru",
    params={
        "command": "uvx",
        "args": ["mineru-open-mcp"],
        "env": {
            "MINERU_API_TOKEN": "your_key_here",
            "OUTPUT_DIR": str(allowed_output),
        },
    },
    tool_filter=create_static_tool_filter(
        allowed_tool_names=["parse_documents", "get_ocr_languages"]
    ),
    require_approval="always",
)

agent = Agent(
    name="Document Ingestion Reviewer",
    instructions=(
        "Only parse documents that have an approved classification record. "
        "Reject unknown local paths and external URLs outside the allowlist."
    ),
    mcp_servers=[server],
)

实际工具名以 MCP Server list_tools() 返回为准。示例重点是策略:限制工具、固定输出目录、要求审批、记录 trace,而不是让 Agent 自由解析任意文件。

复现步骤

  1. 准备样本:收集 PDF、DOCX、PPTX、XLSX、图片 PDF、网页 URL 和科研资料,记录来源、授权、文件哈希和密级。
  2. 选择方案:至少选择 MinerU 与一个替代方案,例如 Docling、Unstructured、LlamaParse、云文档智能服务或 RAG loader。
  3. 设定安全策略:决定 public/internal/restricted 三档样本分别走 Open API、本地 CLI、本地 API 还是私有化部署。
  4. 固定解析参数:明确页码范围、OCR、表格、公式、语言、backend、输出格式和超时时间。
  5. 执行解析:用 CLI 做本地预检,用 Open API 或 MCP Server 处理允许外发的公开样本,用本地部署处理敏感样本。
  6. 查看输出:同时检查 Markdown、JSON、docx、HTML、LaTeX、图片资产、表格和公式。
  7. 人工抽样:重点检查扫描页、表格页、公式页、图表页、跨页结构和含敏感字段的页面。
  8. 记录问题:把失败页、失败类型、期望结果、实际结果、入口和参数写入失败表。
  9. 决定是否上线:只有通过验收的文档或元素进入 LangChain、LlamaIndex、自研知识库或 Sciverse 数据层。
  10. 建立回归集:升级 MinerU、替换 SDK、调整 MCP Server、变更切块策略或 API 版本后,重新跑失败集。

上线与验证注意事项

API 限制核对必须当天完成。MinerU llms.txt 写有免登录 Agent API 适合 10MB/20 页以内 URL 解析、登录精准解析 API 支持最大 200MB/600 页;GitHub README 与 SDK、API 页面可能随版本更新而变化。上线前以 live API 文档、API 管理页面、README、SDK 行为和 LICENSE 为准,并在验收表记录核对日期。

数据安全要前置。公开论文和公开网页可走托管 API;内部合同、医疗、财务、客户资料、未公开科研数据应优先本地解析或私有化部署。不要让 Agent 自动把未知文件或 URL 发往外部服务。

隐私边界要写成策略。限制输入目录、输出目录、URL allowlist、callback 域名、token scope、日志字段和临时文件保留时间。MCP Server 不应默认拥有用户主目录、SSH key、系统目录或所有网络访问权限。

抽样验收不能省。解析成功不等于表格、公式、版面和证据链适合入库。高风险样本至少抽查关键表格、关键公式、扫描页、图表页和敏感字段页。

失败重试要可观察。记录失败阶段、错误码、页码范围、重试次数、工具参数、MCP trace、API task_id 和输出目录。不要让 Agent 把半成品 Markdown 自动写入生产知识库。

人工复核要有出口。对“需复核”的样本,应允许人工脱敏、排除页码、补充元数据、修正文档或标记不入库。

版本漂移要可追踪。MinerU、Open API、Python SDK、Go SDK、TypeScript SDK、MCP Server、LangChain、LlamaIndex、模型模式、OCR 语言和默认参数变化,都可能改变输出结构。生产系统应保留解析版本,并在升级前重跑固定回归集。

许可证、额度和页数上限要保守处理。公开资料出现冲突时,标注冲突,不写死不可核验的商业承诺;内部合规以 live docs、官方 GitHub、LICENSE 和采购/服务协议为准。

可复现实验声明

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

来源链接

  • https://mineru.net/llms.txt
  • https://mineru.net/
  • https://mineru.net/apiManage/docs
  • https://mineru.net/apiManage/limit
  • https://github.com/opendatalab/MinerU
  • https://github.com/opendatalab/MinerU-Ecosystem
  • https://github.com/opendatalab/MinerU/blob/master/LICENSE.md
  • https://modelcontextprotocol.io/specification/draft/basic/authorization
  • https://modelcontextprotocol.io/docs/tutorials/security/security_best_practices
  • https://openai.github.io/openai-agents-python/mcp/
  • https://github.com/openai/openai-agents-python/tree/main/examples/mcp
  • https://genai.owasp.org/resource/owasp-top-10-for-llm-applications-2025/
  • https://owasp.org/www-project-top-10-for-large-language-model-applications/
  • https://github.com/docling-project/docling
  • https://docs.unstructured.io/
  • https://docs.cloud.llamaindex.ai/llamaparse
  • https://python.langchain.com/docs/integrations/document_loaders/
  • https://docs.llamaindex.ai/
Logo

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

更多推荐