dsh-pdf-router:按页路由的 PDF 阅读工具

前言

在 DeepSeek Harness(DSH)里让智能体读 PDF,常见做法是整本走 OCR 或单一提取库。数字版论文往往自带文本层,盲目 OCR 既慢又容易打乱阅读顺序;扫描件、手机拍照则必须有视觉识别;表格和公式若只得到「一串字符」,下游模型很难当结构化数据用。dsh-pdf-router 面向这类问题:提供一个工具 pdf_read,按每一页的情况选引擎,并在需要时走版面感知流程,把表格落成 HTML、公式落成 LaTeX。

这是什么

dsh-pdf-router 是维护者 yuanfuda 发布的 DSH 插件,在 SkillHub 目录中归类为模型推理。它不是一个简单的「PDF 转文本」插件——README 明确说明同类能力已有不少;重点是让含表格、公式的页面返回机器可用的结构,而不只是人类可读的文字。

插件当前版本为 0.2.0,许可证 MIT。仓库:https://github.com/yuanfuda/dsh-pdf-router 。

核心功能:一页一策

工具 pdf_read 对每一页做路由,而不是全书统一 OCR。README 给出的对照如下:

页面情况 引擎 成本(README 表述)
有文本层 PyMuPDF 直接提取 约 0.01 s/页,无识别误差
无文本层(扫描/照片) 视觉 OCR 端点(推荐 MiniCPM-OCR) 约 20–130 s/页
表格或公式重要 MiniCPM-OCR 版面管线 约 130–200 s/页

下面分述各路径在做什么。

文本层优先

有文本层的页用 PyMuPDF 提取。依赖运行在 router.py 所用 Python 环境中的 PyMuPDF;未安装时工具会返回可操作的错误,而不是堆栈跟踪。

扫描与图片

无文本层时走可插拔的 OCR 端点。默认指向本地 OpenAI 兼容服务(见配置项 ocrEndpoint)。任意支持 POST {base}/chat/completions 且能在 content 里带 image_url 的后端均可接入,例如 Ollama、vLLM、LM Studio 或托管 API。

未部署 OCR 端点时,数字 PDF 仍可用;扫描页会返回警告,说明缺少什么。

版面与结构(structure)

当 want 为 structure(或在 auto 下需要结构时),插件依赖 MiniCPM-OCR 的 SDK 与 PP-DocLayoutV3。表格以 HTML <table> 形式返回;公式以 LaTeX 呈现;多栏页面的阅读顺序由推荐模型管线处理。README 称 structure 模式与 MiniCPM-OCR 专用;ocrProfile: generic 仅请求 Markdown 里带 HTML 表与 LaTeX 的说明,效果取决于模型是否具备文档训练。

插件推荐的后端是 OpenBMB 的 MiniCPM-OCR(Apache-2.0)。README 列出其在 Real5-OmniDocBench、OCRBench v2 等公开指标,以及 Q8_0 权重约 775 MB、视觉投影约 859 MB、文档所述约 16 GB 系统内存下限等部署信息;本地部署示例见仓库 README(含 ModelScope 权重与 llama.cpp Vulkan 起服务命令)。

安装与启用

在 DSH 中安装插件使用 README 原文命令(注意 --profile web):

dsh plugin --profile web add github:yuanfuda/dsh-pdf-router

安装后需要重启 harness:加载器对插件模块只做一次 import(),新装的 bundle 要在下次启动时才被加载;之后在该 profile 的会话里会出现工具 pdf_read。

安装前应自行查看仓库源码与 MIT 许可证;插件以当前 dsh 进程权限运行,PDF 路径与 OCR 端点访问范围与此一致。

可选依赖:OCR 端点与(structure 模式下的)minicpm-ocr SDK、PP-DocLayoutV3 需自行部署;插件不会替你下载约 1.6 GB 级别的权重。

配置

在 bundle patch 或 profile patch 里插件行的 config 中设置。README 配置表摘要如下:

Key 默认值 含义
pythonPath 自动检测,否则 python 能 import pymupdf 的 Python
ocrEndpoint http://127.0.0.1:18499/v1 OpenAI 兼容 base URL
ocrModel minicpm-ocr 发给端点的模型名
ocrApiKey 空 托管端点的 bearer token
ocrProfile auto 提示族:auto / minicpm / generic
ocrPrompt 空 覆盖指令文本
sdkExe 自动检测 minicpmvocr 可执行文件,仅 structure
layoutModelDir 自动检测 PP-DocLayoutV3 推理目录,仅 structure
defaultWant auto auto / text / structure
timeoutMs 1800000 整文档时间预算

换用其他视觉模型时,可指向自有端点,例如:

{ "ocrEndpoint": "http://127.0.0.1:11434/v1", "ocrModel": "qwen2.5vl:7b", "ocrProfile": "generic" }

典型用法

调用 pdf_read 时传入 JSON 参数。README 示例:

{ "path": "C:\\docs\\paper.pdf" }                                    // per-page routing
{ "path": "C:\\docs\\paper.pdf", "pages": "7", "want": "structure" } // HTML tables + LaTeX
{ "path": "C:\\docs\\scan.pdf", "want": "text" }                     // never call OCR
{ "path": "C:\\docs\\photo.jpg" }                                    // images are OCRed directly

返回内容包括路由统计、每页耗时、警告、Markdown,以及 out 路径。超过 14000 字符的文档会写入 out,内联结果会被截断。

适用场景与注意

适合谁: 需要在 DSH 智能体流程里读 PDF 或图片、且希望数字 PDF 快读、扫描件走 OCR、个别页要表格 HTML 与公式 LaTeX 的开发者。

性能: README 写明纯 CPU 上较慢——例如 30 页双栏论文走 SDK 约一小时; born-digital PDF 在 auto 下可为秒级。大批量宜离线或夜间跑。

质量: 表格已结构化但非完美;复杂多级表头仍可能列错位。

开发侧: 修改插件代码后需重启 harness(Node 按 URL 缓存模块,HMR 不覆盖链入 profile 的工作区目录)。离线可运行 node selftest.mjs 检查注册与渲染路径,无需启动完整 harness。

DSH 生态理念是「一切皆插件」;SkillHub 等社区目录为独立站点,与 DeepSeek、幻方无官方从属关系。本插件在目录页:https://www.skillhub.cn/plugins/yuanfuda/dsh-pdf-router 。

结尾

dsh-pdf-router 用 pdf_read 把「有文本层 / 要 OCR / 要结构」拆成按页路由,在成本与可用性之间做显式权衡。数字论文优先 PyMuPDF;扫描与图片走可配置 OCR;结构模式面向表格 HTML 与公式 LaTeX。安装命令以 README 为准,OCR 与 SDK 需自备运行时。

  • 目录页:https://www.skillhub.cn/plugins/yuanfuda/dsh-pdf-router
  • GitHub:https://github.com/yuanfuda/dsh-pdf-router
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye