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
羽毛球分组比赛记分
小程序二维码

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

小夜