项目快照:opendatalab/MinerU,约 77,804 个 Star,6,547 个 Fork;最新推送时间 2026-08-16T08:22:47Z。本文基于仓库公开资料撰写。

项目地址:https://github.com/opendatalab/MinerU · https://opendatalab.github.io/MinerU/

MinerU 从代码、运行环境到实践流程的项目封面
MinerU 的项目能力与实践流程示意。

项目速览(TL;DR)

MinerU 是 OpenDataLab 维护的文档解析工具,目标是把 PDF、图片、DOCX、PPTX 和 XLSX 等复杂文档转换为适合大语言模型(Large Language Model,LLM)及智能体工作流使用的 Markdown 和 JSON。根据仓库资料,项目主要使用 Python 编写,默认分支为 master,仓库地址为 https://github.com/opendatalab/MinerU

仓库页面资料显示,MinerU 有 77804 个 Star 和 6547 个 Fork。该数字是所给 GitHub 元信息中的记录,不代表固定指标;项目许可证在仓库元信息中标记为 NOASSERTION,而 pyproject.toml 将许可证声明为 LicenseRef-MinerU-Open-Source-License,具体授权条件应以仓库中的 LICENSE.md 为准。

“Transforms complex documents like PDFs and Office docs into LLM-ready markdown/JSON for your Agentic workflows.”

来源:README

定位与目标用户

MinerU 的定位不是通用文件管理器,而是文档内容解析与结构化输出工具。它关注的是把面向人阅读的版式内容转换成机器可处理的 Markdown 或 JSON,从而减少后续检索增强生成(Retrieval-Augmented Generation,RAG)、文档问答和智能体工作流中的预处理工作。

目标用户首先是需要处理 PDF 和 Office 文档的 Python 开发团队,其次是构建文档知识库、批量抽取资料或提供本地解析服务的工程团队。对于只需要阅读文件、编辑文档或进行简单格式转换的用户,仓库资料没有表明 MinerU 以这些任务为主要目标。

  • 需要将 PDF 页面内容整理为 Markdown、JSON 或后续模型输入的团队。
  • 需要处理 DOCX、PPTX、XLSX 以及图片输入的文档工程项目。
  • 希望在本地或自有服务中运行解析流程,而不是把原始文档直接交给外部服务的团队。
  • 需要根据硬件和部署方式选择视觉语言模型(Vision-Language Model,VLM)后端的工程人员。

核心功能

核心能力可以概括为“多格式输入、文档理解、结构化输出”。根据 pyproject.toml 的项目描述,输入格式包括 PDF、图片、DOCX、PPTX 和 XLSX,输出格式包括 Markdown 和 JSON;README 的项目描述则进一步强调了复杂文档与智能体工作流之间的衔接。

PDF 与图片解析

PDF 解析由 pypdfium2pypdfpdftext、Pillow 和 OpenCV 等依赖共同支撑。根据依赖关系,流程可以覆盖 PDF 文件读取、页面或图像处理、文本提取以及后续结构化处理;具体采用哪一条处理路径、不同输入触发哪些模型或算法,资料未给出完整调用流程,建议以最新 README 和官方文档为准。

图片输入适用于原始内容没有可直接复制文本、版式依赖视觉布局或需要 OCR(Optical Character Recognition,光学字符识别)的场景。仓库关键词包含 ocrmultimodalvlm,但资料没有提供每种图片格式的支持清单、单页大小限制或识别准确率数据,因此不应据此推导性能保证。

Office 文档转换

项目依赖 python-docxpypptx-with-oxmlmammothopenpyxl,这些依赖分别对应 DOCX、PPTX 或其 XML 结构处理,以及 XLSX 工作簿读取。由此可确认,Office 文件处理并非只依赖 PDF 转换,而是针对不同文件类型引入对应解析组件。

输入文件经过解析后,目标是输出 Markdown 或 JSON,而不是保持原始 Office 文件的可编辑性。对于复杂宏、外部链接、嵌入对象、公式渲染或特殊字体等情况,资料没有说明兼容边界;部署前应使用真实样本文档进行验收,并保留原始文件与解析结果以便复核。

Markdown 与 JSON 输出

Markdown 适合进入文本切分、检索索引或人工审阅流程,JSON 更适合下游程序按字段读取。项目名称和描述明确了两种输出方向,但资料没有给出固定 JSON Schema、字段列表、版本兼容策略或 Markdown 方言约束,因此下游系统不应在没有验证的情况下硬编码未公开字段。

对于需要稳定数据契约的系统,建议将解析结果再经过一层内部校验:检查文件页数或工作表数量、文本是否为空、输出文件是否生成、JSON 是否能够被解析,并对表格、图片、公式等重点内容建立抽样比对。上述校验属于集成建议,不是仓库声明的内置功能。

系统架构与关键模块

从打包配置可以确认,MinerU 采用 Python 包加命令行入口的组织方式,并提供模型下载、API 服务、路由、Gradio 界面和多种模型服务端入口。资料没有给出完整模块图,因此下面按已公开的入口和依赖关系描述可核查的架构边界。

包、命令行与服务入口

pyproject.toml 中声明的主命令是 mineru,对应 mineru.cli.client:main。此外还定义了 mineru-models-downloadmineru-apimineru-routermineru-gradio,以及 mineru-vllm-servermineru-lmdeploy-servermineru-openai-server

这些入口表明项目既可以作为本地命令行工具使用,也可以围绕 FastAPI、Uvicorn、Gradio 或模型服务后端组成服务化部署。入口的存在不等于所有功能在同一安装组合中默认可用:vllmlmdeploymlx 等依赖被放在可选依赖组中,必须结合目标平台和安装 extras 判断。

模型与解析流水线

可选依赖组将功能拆分为 vlmpipelinevllmlmdeploymlx。其中,vlm 引入 PyTorch、Transformers 和 Accelerate;pipeline 还包括 TorchVision、Safetensors、ONNX Runtime、Shapely、PyClipper、FTFY 和 PyYAML。

根据这些依赖可以判断,部分解析路径需要模型推理与图像、版面处理能力,但资料未公开完整的模块调用顺序、模型名称、模型文件大小、显存要求或 CPU 支持范围。部署设计应把“输入识别、版面分析、文本或表格抽取、结果序列化”作为可观测阶段分别验证,而不要仅依据命令成功退出判断结果质量。

下载、路由与接口层

mineru-models-download 用于模型下载入口,项目依赖中同时出现 ModelScope 和 Hugging Face Hub。mineru-routermineru-api 与不同模型服务端入口说明项目提供了服务编排方向,但资料没有给出端口、路由路径、请求体、响应体或认证参数。

因此,不能从命令名称推断固定 HTTP API 契约,也不能在没有官方文档依据的情况下指定服务端口。需要服务化部署时,应以官方文档的当前示例为准,并在内网测试环境中先完成接口和资源消耗验证。

依赖与运行环境

运行环境的硬约束来自 pyproject.toml:Python 版本要求为 >=3.10,<3.14,即项目分类器列出了 Python 3.10、3.11、3.12 和 3.13。基础依赖包括 Click、Loguru、NumPy、TQDM、Requests、HTTPX、Pillow、pypdfium2、pypdf、ReportLab、pdftext、OpenCV 和多种文档解析库。

项目将较重的能力拆为 extras,以减少基础安装与特定模型部署之间的耦合。可选组中,core 包含 vlmpipelinegradioall 在此基础上加入 S3,并按平台选择 MLX、vLLM 或 LMDeploy。

已公开的安装与运行相关配置项
字段名 类型 默认值 作用
project.name 字符串 mineru Python 包名称。
requires-python 版本约束字符串 >=3.10,<3.14 声明支持的 Python 版本范围。
build-system.build-backend 字符串 setuptools.build_meta 指定 Python 包构建后端。
project.license 字符串 LicenseRef-MinerU-Open-Source-License 引用仓库自定义许可证标识。
project.optional-dependencies.vlm 依赖列表 未提供单独默认启用值 提供 Torch、Transformers 和 Accelerate 等 VLM 依赖。
project.optional-dependencies.pipeline 依赖列表 未提供单独默认启用值 提供解析流水线所需的图像、几何、模型和运行时依赖。
project.optional-dependencies.gradio 依赖列表 未提供单独默认启用值 提供 Gradio 与 PDF 界面依赖。
project.optional-dependencies.s3 依赖列表 未提供单独默认启用值 提供 boto3,用于 S3 相关集成。
project.urls.documentation URL 字符串 https://opendatalab.github.io/MinerU/ 官方文档地址。

快速开始

最小闭环应先验证 Python 环境、包安装和命令入口,再进入具体文档解析。由于所给 README 资料未包含完整 CLI 参数和输入输出示例,下面的可运行示例只使用已在打包配置中明确声明的命令入口,不虚构解析参数。

安装

Bash
python -m pip install mineru

上述命令安装 PyPI 项目名为 mineru 的包。若项目需要 VLM、解析流水线、Gradio 或平台相关后端,应依据官方文档选择 mineru[vlm]mineru[pipeline]mineru[core]mineru[all];各 extras 的依赖内容来自 pyproject.toml,但资料没有给出各环境的完整安装顺序。

运行与验证

Bash
mineru --help
python -c "import mineru; print(mineru.__version__)"

mineru --help 用于确认命令行入口已安装,第二条命令读取包中由 mineru.version.__version__ 提供的版本属性。两条命令都不处理外部文件,也不需要 API 密钥,适合本地测试环境进行安装验证。

如果需要执行实际解析,必须从官方文档获取与当前版本匹配的输入路径、输出路径和模式参数。资料没有提供可以核验的完整命令签名,因此这里不补写未公开的参数。验证结果至少应包括命令退出状态、输出文件是否生成、Markdown 是否可读以及 JSON 是否能够被标准解析器读取。

配置说明

公开资料主要提供 Python 打包配置和可选依赖组,没有提供独立的 .env.example、完整 YAML 配置样例、固定端口或统一环境变量表。能够直接核查的配置集中在包元数据、extras 和命令入口,具体字段已在上表列出。

安装时应根据功能选择依赖范围,而不是默认安装所有组件。例如,需要 S3 集成时才有明确依据选择 s3;需要 Linux 上的 vLLM 时,all 组声明了对应平台条件。GPU 型号、显存阈值、模型缓存目录、并发数、批大小和网络代理变量均未在所给资料中提供,建议以最新 README 为准。

平台条件

  • mlx 依赖通过 sys_platform == 'darwin' 条件选择。
  • vllm 依赖通过 sys_platform == 'linux' 条件选择。
  • lmdeploy 依赖通过 sys_platform == 'win32' 条件选择。
  • s3 extras 提供 boto3>=1.28.43

这些条件只说明项目打包文件中的依赖选择规则,不等同于对操作系统、硬件或模型运行效果的完整兼容性承诺。

进阶用法

进阶部署的重点是选择合适的模型后端和服务形态,而不是简单叠加依赖。项目已经声明 vLLM、LMDeploy、MLX 和 OpenAI 兼容入口,但它们的适用平台、模型配置和请求协议需要结合官方文档核对。

模型后端选择

vllm extras 的约束为 vllm>=0.10.1.1,<0.22.0,并在 all 中按 Linux 平台选择;lmdeploy extras 的约束为 lmdeploy>=0.10.2,<0.12,并按 Windows 平台选择;mlx extras 则包含 mlx-vlmmlx,并按 Darwin 平台选择。

如果团队已经确定使用其中某个推理后端,应先只安装对应 extras,在隔离环境中验证模型加载和单文件处理,再考虑引入 all。资料没有提供三种后端的精度、吞吐、显存占用或功能差异,不能据此做性能排序。

服务化入口

项目脚本中包含 mineru-apimineru-routermineru-gradiomineru-vllm-servermineru-lmdeploy-servermineru-openai-server。这些入口可作为本地服务或测试服务的起点,但所给资料没有列出命令参数、监听地址、端口、认证方式和并发控制。

在服务化集成中,建议将原始文件接收、临时文件清理、解析任务状态、结果保存和错误重试分开设计。根据本文作者的经验判断,文档解析服务的失败通常不仅来自模型推理,也来自损坏文件、编码、字体、表格结构和资源耗尽,因此接口层应返回可审计的任务标识与错误信息;这不是仓库已声明的 API 行为。

对象存储集成

可选依赖 s3 引入 boto3,这说明项目提供 S3 相关集成的依赖入口。资料没有给出桶名、对象键、凭证来源、上传下载流程或配置字段,不应在生产环境中把访问密钥硬编码到命令、代码或日志里。

输入输出与数据处理边界

输入侧覆盖 PDF、图片、DOCX、PPTX 和 XLSX,输出侧聚焦 Markdown 与 JSON。这个边界适合把文件解析作为知识库导入或智能体工具链的前置阶段,但不代表解析结果可以直接视为事实数据库。

对每个文件,集成方应保存原始文件校验信息、解析时间、使用的 MinerU 版本和输出摘要。由于资料未提供 JSON Schema,内部系统应自行定义字段校验与版本迁移策略;对于重要合同、财务资料或科研文献,应进行人工抽样复核。

  • 文本:验证标题层级、段落顺序、页眉页脚和分页信息是否满足业务要求。
  • 表格:验证行列关系、合并单元格、数字格式和空值是否被正确保留。
  • 图片与公式:确认输出是文本、结构化字段还是引用关系,不能仅凭 Markdown 文件存在作出判断。
  • Office 内容:分别测试文档、演示文稿和工作簿,不要用一种格式的结果替代其他格式的兼容性结论。

可观测性与运维

仓库依赖中包含 Loguru、TQDM、Requests、HTTPX、FastAPI 和 Uvicorn,可见项目具备日志、进度和服务化相关组件。资料没有提供日志字段、指标名称、健康检查路径、任务队列、超时策略或 SLA,因此这些内容需要由部署方补齐。

本地批处理至少应记录输入文件名或内部 ID、开始与结束时间、退出状态、输出路径、异常堆栈和版本信息。服务部署还应记录请求大小、处理耗时、队列等待时间、模型加载状态、失败类型和资源使用情况;敏感文档的原文、密钥和完整解析内容不应直接写入普通日志。

运维检查清单

  1. 确认 Python 版本满足 >=3.10,<3.14
  2. 在测试文件上验证安装、模型下载和最小解析流程。
  3. 检查输出目录的磁盘空间与临时文件清理策略。
  4. 为大文件、异常文件和重复任务设置外部的资源限制与重试规则。
  5. 升级 MinerU 或模型依赖后重新执行代表性文档回归测试。

安全与合规边界

MinerU 处理的对象可能包含合同、身份信息、内部报告或未公开研究资料,因此安全重点在数据保密、访问控制和处理链路隔离。所给资料没有声明内置的租户隔离、加密、权限模型、审计策略或合规认证,不能将这些能力视为项目默认提供。

在授权环境中使用时,应采取以下边界措施:

  • 仅处理已获得授权的本地文件或组织内部文件,并明确数据控制者和处理目的。
  • 将模型缓存、临时文件、解析结果和日志放在受控目录,限制运行账户权限。
  • 使用外部密钥管理系统或受保护的环境配置保存模型服务、对象存储和外部 API 凭据。
  • 对上传接口设置文件类型、大小、数量和处理时长限制,并隔离解析进程。
  • 在跨境、个人信息、商业秘密或受监管数据场景中,先完成组织内部法律和安全评估。

本文不提供面向未授权目标的文件投递、服务探测、权限绕过或检测规避方法。任何服务端部署都应限制在明确授权的测试、开发或生产网络范围内。

许可证与商用条款

许可证信息存在两个需要并列说明的来源:GitHub 元信息给出的许可证为 NOASSERTION,而 pyproject.toml 声明为 LicenseRef-MinerU-Open-Source-License,并指向仓库根目录的 LICENSE.md。所给资料没有包含 LICENSE.md 的具体条文,因此无法严谨判断是否允许商用、修改、再分发、提供网络服务或进行闭源集成。

在确认授权前,不应依据“开源项目”这一描述推断完整商用权限。使用、修改或分发时应逐条阅读仓库 LICENSE,并核对模型、第三方依赖和外部服务各自的许可证;版权声明、保留通知、分发条款和商标使用要求均以实际许可证文本为准。

若许可证文本无法确认某一业务场景,建议在上线前取得权利人或组织法务的书面意见。本文不替代许可证解释,也不作商用授权承诺。

局限性与已知限制

当前资料能够确认项目的输入格式、输出方向、Python 版本约束和若干入口,但没有提供完整的兼容性矩阵、性能基准、并发模型、资源需求或输出 Schema。这些缺失信息会直接影响生产评估,尤其是大批量文档和复杂版式文档的验收。

  • 未提供固定 JSON Schema、字段稳定性承诺或跨版本迁移说明。
  • 未提供 PDF、图片、DOCX、PPTX、XLSX 的逐项兼容性清单。
  • 未提供 CPU、GPU、显存、磁盘和网络带宽要求。
  • 未提供吞吐量、延迟、准确率、最大文件大小或并发限制。
  • 未提供默认 API 端口、认证机制、请求接口和服务健康检查路径。
  • 未提供安全审计、CVE 修复承诺、SLA 或商业支持承诺。

以上内容不是对项目缺陷的额外推断,而是所给资料中未出现的具体信息。评估人员应以最新仓库、官方文档和实际回归测试结果补足这些空白。

适合谁

以下信号同时满足较多时,MinerU 更适合作为候选解析组件,而不是直接作为未经验证的最终系统:

  • 团队已有 Python 技术栈,并且能够接受 >=3.10,<3.14 的运行环境约束。
  • 输入确实包含 PDF、图片、DOCX、PPTX 或 XLSX,且输出需要 Markdown 或 JSON。
  • 业务需要把文档解析结果接入 RAG、智能体工作流或内部结构化处理流程。
  • 团队具备模型依赖安装、GPU 或服务化运行环境的验证能力。
  • 项目可以建立样本文档、人工抽检和版本升级回归机制。

不适合谁

以下任一信号成立时,直接采用 MinerU 需要谨慎,或应先寻找满足明确契约的替代实现:

  • 系统必须立即获得公开且稳定的 JSON Schema、API 签名、端口和认证方案,但团队不准备查阅官方文档或自行封装。
  • 业务要求明确的吞吐、延迟、准确率、SLA 或大规模并发保证,而项目评估资料中没有相应数据。
  • 环境被限制在不满足 Python 版本范围的平台,或无法安装项目声明的原生与模型依赖。
  • 数据属于高敏感或受监管信息,但组织无法提供本地隔离、访问控制、日志脱敏和许可证审核。
  • 需求是保持 Office 文档可编辑性、完整宏行为或版式像素级复现,而项目描述的目标是解析为 Markdown 和 JSON。

这里的适用性判断是根据公开资料与工程集成经验形成的决策建议,不是项目维护者对替代方案的官方比较。资料没有明确列出替代项目,因此本文不做未经依据的横向性能对比。

常见问题与排查(FAQ / Troubleshooting)

Python 版本不符合要求怎么办

先检查当前解释器版本,并确认其落在 >=3.10,<3.14 范围内。若不满足,应创建符合约束的隔离环境后重新安装;项目资料未提供特定虚拟环境工具的官方命令。

安装完成但找不到 mineru 命令怎么办

先执行 python -m pip 与当前 Python 解释器对应的安装命令,再检查命令脚本所在目录是否加入当前用户的 PATH。可以使用本文“快速开始”中的 mineru --help 验证入口;若仍失败,记录 Python 路径、包安装输出和平台信息。

为什么只安装基础包后模型功能不可用

项目将 vlmpipelinegradiovllmlmdeploymlx 拆分为可选依赖组。基础安装不等于自动安装所有模型和界面依赖,实际需要根据目标功能选择 extras,并按官方文档完成模型准备。

服务端口和 API 参数在哪里确认

所给资料只声明了命令入口,没有声明固定端口、路径或请求格式。不要依据命令名自行假定接口;应查看当前官方文档、运行对应命令的帮助信息,并在本地测试环境验证请求和响应。

解析结果是否可以直接用于生产决策

不应默认直接使用。资料没有提供准确率、错误率和 Schema 稳定性数据,涉及合同、财务、合规或科研结论时,应保留原文、执行人工抽检,并对关键字段建立独立校验。

依赖冲突如何定位

先区分基础依赖与 extras 依赖,再确认平台条件是否触发了 vllmlmdeploymlx。将完整安装日志、Python 版本、操作系统、目标 extras 和失败堆栈保存下来;资料没有提供项目专用的依赖冲突诊断命令。

测试、升级与发布流程建议

项目配置包含 pytest 与覆盖率设置:测试配置的 addopts-s --cov=mineru --cov-report html,覆盖率运行配置指向 tests/unittest/test_e2e.py。这说明仓库配置了端到端测试和 HTML 覆盖率报告,但资料没有给出测试通过率或持续集成状态。

在团队内部发布前,可以按以下顺序执行:固定 Python 环境,安装目标 extras,准备一组含正文、表格、图片和多语言内容的授权样本,运行解析并保存结果,最后比较结构化字段与人工基准。升级依赖或切换模型后,应重新执行同一组样本,避免把模型变化误判为业务数据变化。

项目地址与资源

以下链接均来自仓库资料或项目配置,可用于获取源代码、文档和项目提供的在线入口。在线演示和模型下载相关页面可能要求独立的运行资源或服务条件,具体以页面当前说明为准。