MinerU 文档解析
本技能面向 MinerU 4.0(
mineru-kitCLI)。如果解析报参数错误,先用mineru-kit parse --help核对当前安装的 CLI 契约(4.0 与 3.x 参数完全不同)。
当用户向 DSH 输入文件时,按扩展名(不区分大小写)选择解析方式:
格式判定
| 类型 | 处理方式 |
|---|---|
| pdf, docx, pptx, xlsx, tif, tiff | 走 MinerU 解析流程 |
| 单张 jpg/jpeg/png/bmp | 直接用 Read 工具读取(模型可看图,无需 OCR) |
| 批量图片,或用户明确要求提取文字 | 走 MinerU 解析流程(图片按顺序合成一个文档处理) |
| 其他(txt、md、代码、json、csv 等) | 直接 Read,本技能不干预 |
多个文件混合输入时,对每个文件分别按扩展名选择解析方式。
解析流程
DSH 跑在 Windows,默认一律用 PowerShell 版 parse.ps1(脚本内置探测、缓存、批处理、清理、
结果校验,与 bash 版行为及输出标记完全一致):
& "C:\Users\wanji\.dsh\skills\mineru-parse\scripts\parse.ps1" -Paths <文件1>,<文件2> [参数]
多个文件必须用逗号分隔(PowerShell 数组语法):
-Paths a.pdf,b.docx。 写成-Paths a.pdf b.docx会报「找不到接受自变量的位置参数」——这是 PowerShell 的参数绑定规则, 不是脚本缺陷。bash 版parse.sh则用空格分隔:-Paths a.pdf b.docx。
路径直接用 Windows 写法(D:\a\b.pdf 或 D:/a/b.pdf),不要转成 /mnt/d/...。
只有在明确要走 WSL 本地 MinerU 时才用 bash 版:
wsl.exe -d Ubuntu-26.10 -- bash /mnt/c/Users/wanji/.dsh/skills/mineru-parse/scripts/parse.sh \
-Paths /mnt/d/docs/paper.pdf [参数]
<本技能目录> 指当前 skill 的根目录 C:\Users\wanji\.dsh\skills\mineru-parse(内含 SKILL.md、
scripts/、docs/)。本机两侧均已部署 MinerU 4.0:
| 平台 | 安装根 | 解析入口 | 配置 |
|---|---|---|---|
| Windows | D:\MinerU | D:\MinerU\mineru-kit.bat | D:\MinerU\config.yaml(MINERU_CONFIG) |
| WSL | ~/MinerU | ~/MinerU/mineru-kit.sh | ~/MinerU/config.yaml |
技能目录下的 mineru.config.json / scripts/mineru.config.linux.json 已指向它们,通常无需再走部署流程。
参数
| 参数 | 说明 |
|---|---|
| -Paths | 输入文件绝对路径(可多个,批处理合并为一次 MinerU 调用,模型只加载一次)。PowerShell 用逗号分隔(-Paths a.pdf,b.docx),bash 用空格分隔 |
| -OutDir | 输出根目录。缺省时:单文件输出到源文件所在目录;多文件输出到临时目录并把产物复制回各自源目录 |
| -Tier | auto(默认)/ flash / basic / standard / advanced,取代 3.x 的 -Backend |
| -Pages | PDF 页范围,如 1-5,8 / r3-r1(r1 为末页)/ all;缺省为 MinerU 默认(全部页) |
| -Format | markdown(默认)/ middle_json / zip;zip 会落盘 markdown.md + images/ + middle_json.json |
| -OcrMode | auto(默认)/ txt / ocr,取代 3.x 的 -Method |
| -NoImageAnalysis | 关闭图像分析(近似取代 3.x 的 -NoFormula) |
| -Force | 忽略缓存,强制重新解析 |
档位语义(4.0)
| 档位 | 用途 | 依赖 |
|---|---|---|
| flash | 原生文本层解析 + 扫描件 Flash OCR | 无需推理模型,最快 |
| basic | OCR、公式、表格(小模型) | 小模型;可纯 CPU |
| standard | 复杂版面(小模型 + VLM) | 还需 VLM 权重 |
| advanced | 更高精度(更多推理算力) | 同 standard,无需单独下载模型 |
-Tier auto 的选择规则:非 PDF(Office/图片)→ flash;PDF 且总页数 < 10 → basic;否则 standard。
为什么 PDF 默认不用 flash:flash 对带公式的 PDF 会把整页当图片内联成 base64, 实测
Homework9.pdf(3 页数学作业)flash 产物 573 KB / 124 行 且公式不可检索, 而basic产物 3.6 KB / 186 行,公式还原为可读 LaTeX。文本型 PDF 一律用basic。
已废弃的 3.x 参数(仍被接受,会打印 WARN_DEPRECATED 并自动映射,不会报错):
-Backend(pipeline→basic、hybrid-engine/vlm-engine→standard)、-Method(→-OcrMode)、
-Effort high(→advanced)、-NoFormula(→-NoImageAnalysis)、-KeepImages(4.0 markdown
会把图片内联为 base64,已无 images/ 目录可留;要图片文件请用 -Format zip)、-Lang(4.0 已移除,
OCR 语言自动,忽略)。
超时设置
脚本会输出 RECOMMENDED_TIMEOUT_SECONDS=NNN(flash 约 30+3×页数、basic 30+8×页数、
standard/advanced 30+15×页数)。执行时命令超时应设为该值以上(pwsh 工具用 timeoutMs),
避免默认 120s 截断。实测(WSL,含冷启动):flash 单文件约 1.7s、basic 单页约 9.7s、
standard 单页约 15.5s。
缓存
脚本检查 <OutDir>/<文件名>.md 或源目录下的同名 .md 是否比源文件新,命中则直接复用,不再调用
MinerU。需重新解析时用 -Force。
MinerU 定位链
- Windows(
parse.ps1):环境变量MINERU_KIT_BAT→ 脚本同级mineru.config.json的mineruKitBat→mineru.bat同目录的mineru-kit.bat/.cmd/.exe→ PATH 中mineru-kit - Linux/WSL(
parse.sh):环境变量MINERU_KIT_BIN→ 脚本同级mineru.config.linux.json的mineruKitBin→mineru同目录的mineru-kit→ PATH 中mineru-kit
两份配置文件相互独立(.json / .linux.json),Windows 与 WSL 可各自部署、互不干扰。在 WSL 中解析走 WSL 本地 MinerU(GPU 直通),不跨系统调用 D:\MinerU。
产物定位
脚本输出每行 RESULT\t<源文件>\t<产物路径>\t<字节>\t<行数>。
MinerU 4.0 的产物规则(已实测):
| 场景 | -o 语义 | 结果 |
|---|---|---|
| 单文件 + markdown | 指向具体文件 | <OutDir>\<文件名>.md |
| 单文件 + zip/middle_json | 指向目录 | <OutDir>\<文件名>.zip / .json |
| 目录/多文件输入 | 指向目录 | <OutDir>\<每个文件名>.md |
markdown 形态是单文件自包含的:图片以 base64 data URI 内联,不产生 images/ 等辅助文件
(因此 3.x 时代「删除中间产物」的清理逻辑已无对象)。需要把图片单独落盘时用 -Format zip。
结果校验与上下文管理
WARNING_EMPTY:产物小于 1KB,可能是空白/扫描失败,此时回退直接 Read 原文件.md大于 2000 行:分块读取或先读开头摘要,避免撑爆上下文NO_MD:未定位到产物,视为失败
沙箱与资源注意
- 命名管道:DSH 的 Windows 沙箱禁止进程创建命名管道,MinerU 内部使用
ProcessPoolExecutor(PDF 渲染)时会报WinError 5。本技能已在scripts/sandbox/放置sitecustomize.py修复临时目录问题(os.mkdir(path, mode)在沙箱下会产生不可访问目录),parse.ps1会自动通过PYTHONPATH注入。若某个档位仍在沙箱内因管道失败,改用-Tier flash(无需模型进程池),或在工作区外的普通终端里运行。 - 显存:RTX 4060 只有 8GB。
standard/advanced需要 VLM,长文档请分批解析;显存不足时降级-Tier basic。
首次使用与部署
本机 Windows 与 WSL 两侧均已部署 MinerU 4.0(D:\MinerU\mineru-kit.bat、
~/MinerU/mineru-kit.sh 均存在,技能配置已指向它们),正常情况下不需要执行本节。仅当解析报
MINERU_UNAVAILABLE 时,先按平台运行检测:
& "<本技能目录>\scripts\deploy.ps1" -Scan # Windows
"<本技能目录>/scripts/deploy.sh" --scan # Linux / WSL / macOS
- 输出
DONE_MinerU_PRESENT:本机已有 MinerU,直接继续解析 - 输出
DONE_MinerU_ABSENT:MinerU 未部署。扫描报告会给出硬件信息(GPU/VRAM/CPU/内存/磁盘/Python)与推荐部署方案
未部署时执行半自动安装(交互确认;加 --yes 全程非交互,供 Agent 自动执行):
& "<本技能目录>\scripts\deploy.ps1" -Install [-MinerUDir <安装目录>] [-ModelDir <模型目录>] [-Backend GPU|CPU|auto]
"<本技能目录>/scripts/deploy.sh" --install --yes [--mineru-dir ~/MinerU] [--backend GPU|CPU|auto]
4.0 安装流程:uv venv(Python 3.12)→ uv pip install "mineru[full]==4.0.10"
(Linux 用 mineru[torch] + llama.cpp 亦可;Windows 的 [full] 走 LMDeploy)→
GPU torch(Windows 走 cu126,当前 download.pytorch.org 在国内极慢,用 SJTU 镜像)→
mineru-kit models download --tier standard --source modelscope →
mineru-kit models verify → 生成 config.yaml、mineru.bat/mineru-kit.bat(Windows)或
mineru.sh/mineru-kit.sh(WSL)与技能配置。
安装完成后会生成 mineru.config.json(Windows)或 mineru.config.linux.json(WSL/Linux),
供对应 parse 脚本定位。部署细节与故障排查见 docs/DEPLOYMENT.md。
失败回退
出现以下任一情况时,告知用户后回退到 DSH 默认解析方式(直接 Read):
MINERU_UNAVAILABLE:MinerU 不可用(未部署或探测失败)。先跑对应平台的deploy -Scan/deploy.sh --scan确认,未部署则按「首次使用与部署」流程处理MINERU_ERROR:退出码非零NO_MD:未找到.md产物- 解析耗时异常或用户明确要求停止
边界情况
- 路径含空格/中文:Windows 用
&调用运算符并双引号包裹路径;Linux/WSL 用双引号包裹路径(脚本内部均已处理) - DSH 下路径:直接用
D:\x\y.pdf,不要转成/mnt/d/x/y.pdf(那会让parse.ps1找不到文件);只有走wsl.exe ... parse.sh时才转成/mnt/d/... - 只读场景:脚本需写输出,若源目录禁止写入,显式传
-OutDir到可写目录并告知用户。注意 WSL 下/mnt/c、/mnt/d属 drvfs,大文件写入较慢,建议输出到 WSL 本地目录 - 解析前已有同名 .md:MinerU 会覆盖;脚本以最新产物为准
多 Harness 安装
本技能以单一 SKILL.md 为源,通过生成脚本为各 Agent Harness 生成原生副本(frontmatter/目录结构按各 harness 规范):
& "<本技能目录>\scripts\generate-harnesses.ps1" -Harness all [-Scope user|project] [-Force]
-Harness:all或逗号分隔列表(opencode,claude,cline,codex,cherrystudio,gemini,zcode,dsh)-Scope:user(用户级全局目录)或project(当前项目目录);未指定则交互询问-TargetDir:显式指定输出目录(调试用)- 各 harness 支持情况与新增 harness 指南见
docs/HARNESSES.md - OpenCode 的全局技能目录是
~/.config/opencode/skills/<name>/SKILL.md(本机已同步一份mineru-parse) - WSL/Linux 下无 PowerShell 时,可直接把技能目录复制/软链到目标 harness 的 skills 目录(脚本两平台 .ps1/.sh 均已随带)
部署与故障排查
环境安装细节、GPU/CUDA 配置、CPU 降级方法见 docs/DEPLOYMENT.md;多 harness 适配见 docs/HARNESSES.md。
Scan to join WeChat group