dsh-ocr:DeepSeek Harness OCR 文档识别插件

前言

DeepSeek Harness(DSH)支持通过插件扩展能力,zirscard/dsh-ocr 插件为智能体增加了批量文档预处理和 OCR 识别能力。它提供两个工具:doc_ocr 和 doc_preprocess,分别处理单文档识别和目录级知识库构建。

doc_ocr:单文档识别

doc_ocr 支持三种模式,可通过本地 RapidOCR 或智谱 GLM-OCR 云端引擎运行。

三种模式

模式 用途 输出
text 整页 OCR(最通用) 逐页文本 + 行数 + 平均置信度
table 财务报表(扫描件三线表) 自动定位数值列 → 列切条重 OCR → 按 y 归行 → 数字清洗 → 资产负债表平衡勾稽
clause 合同条款 回购/对赌/反稀释/优先清算… 关键词命中 + 页码 + 引用片段

两种引擎

local(默认)

RapidOCR,运行 PaddleOCR PP-OCRv4 的 ONNX 模型,本机推理,不发网络请求。

glm

智谱 GLM-OCR 云端(0.9B,OmniDocBench SOTA),输出原生 Markdown;复杂表格 / 公式 / 盖章 / 图文混排更强,需要 API key。

密钥从环境变量读取,支持 ZHIPU_API_KEY、DSH_OCR_ZHIPU_KEY、BIGMODEL_API_KEY,可选 DSH_OCR_ZHIPU_BASE_URL(默认 https://open.bigmodel.cn/api/paas/v4)。

解决的问题

  1. 扫描件无文本层:pypdf 抽不出文字,必须先渲染成图再识别。
  2. 整页 OCR 漏识数字:相邻列合并、数字右对齐截断,导致报表无法勾稽。
  3. 逗号/句点混淆:52,163 被认成 52.163,按千分位规则归一。
  4. OCR 数字不可全信:只接受能被「资产总计 = 负债合计 + 所有者权益合计」勾住的数,勾不平就标出来交人工。

并发控制

本插件做了两层限制,避免 CPU 严重超卖:

层级 机制 默认
进程内 core/ocr.py 设置 intra_op_num_threads / inter_op_num_threads(级联 Det/Cls/Rec) 2
进程间 runner.js 模块级 FIFO 信号量,限制同时运行的 OCR 进程数 2

进程内线程数可通过 DSH_OCR_THREADS 覆盖(设 0/负数表示不限);进程间并发数可通过 DSH_OCR_MAX_CONCURRENT 覆盖。

doc_preprocess:知识库预处理管线

doc_preprocess 把一个目录/一批原始文件(PDF/Office/图片/文本)整理成 Obsidian 可读知识库(markdown + JSON + sha256 增量缓存)。

七阶段管线

discover → classify → extract(后端路由) → clean → structure → output(md+json) → verify
              ↑                                                    ↓
           增量/缓存 ←────────────── 失败人工队列
阶段 做什么
0 discover 扫描文件 + 排除(.git / .trash / node_modules 等),记 sha256
1 classify 按扩展名 + PDF 文本层检测(>100 字符=文本层,≈0=扫描件)分类
2 extract 文本层 PDF→pypdf;扫描件 PDF/图片→OCR;docx→python-docx;xlsx→openpyxl;pptx→python-pptx;csv→markdown 表;json/yaml→代码块
3 clean 页眉页脚去重、中文断行合并、数字清洗
4 structure 「第X章 / 第X条」→ 标题层级;表格 → markdown 表
5 output 每文件 .md(YAML frontmatter:source_path/sha256/kind/backend/page_count/ocr_confidence/extracted_at)+ .json + cache.json
6 verify 空正文 / 无页 / 不支持格式 → 进 problems 列表
7 incremental sha256 命中缓存 → 跳过(force 可重跑)

原始文件永不被修改;markdown 是工作格式,数字另存 JSON;失败进人工队列而不是中断整批。

安装与启用

从 GitHub 安装:

dsh plugin add https://github.com/zirscard/dsh-ocr

从本地目录安装:

dsh plugin add link:/absolute/path/to/dsh-ocr

重启 DSH 后,新会话的工具列表出现 doc_ocr 与 doc_preprocess。

运行环境

RapidOCR 会带上 onnxruntime / opencv / numpy 等 C 扩展 wheel。在 macOS 上,如果 DSH 内置 Python 启用了 hardened runtime + Library Validation,可能拒绝加载这些 ad-hoc 签名的动态库:

ImportError: dlopen(...): code signature ... different Team IDs

处理方式二选一:

  1. 给内置 Python 注入 com.apple.security.cs.disable-library-validation entitlement 并 ad-hoc 重签(DSH 升级后可能需重跑)。
  2. 用 DSH_OCR_PYTHON 指向一个能加载这些 wheel 的 Python(如 conda / Anaconda),插件会把 DSH 的 site-packages 追加到 sys.path 末尾,避免 NumPy ABI 冲突。

runner.js 的解释器选择顺序:

  1. DSH_OCR_PYTHON 环境变量(显式指定,最优先)。
  2. DSH 内置 Python。
  3. /opt/anaconda3/bin/python3(兜底)。

直接运行引擎(不经过 DSH)

PY=python3   # 换成能加载 OCR 依赖的解释器

# text:整页文本
"$PY" core/ocr.py --input scan.pdf --mode text --pages 34,37,42 --dpi 200

# table:财务报表(建议 dpi 300–400)
"$PY" core/ocr.py --input scan.pdf --mode table --pages 37 --dpi 300 \
  --out-json /tmp/p37.json --out-md /tmp/p37.md

# clause:合同条款
"$PY" core/ocr.py --input contract-page.png --mode clause

# glm 云端引擎(复杂表格 / 盖章协议优先)
"$PY" core/ocr.py --input contract-page.png --mode table --engine glm

# 知识库预处理
"$PY" core/pipeline.py --input 某目录 --output out/ --mode all
"$PY" core/pipeline.py --input 某目录 --output out/ --mode classify

测试

python3 test/run_tests.py        # OCR 引擎(纯函数 + 合成图;可选真实样本)
python3 test/glm_mock_test.py    # glm 全链路,用本地 mock 服务器,不花钱
  • run_tests.py:数字清洗、页码解析、合成图关键词命中;设置 DSH_OCR_TEST_PDF / DSH_OCR_TEST_IMAGE 后追加 table 勾稽与 clause 命中测试。
  • glm_mock_test.py:本地 mock 智谱 chat/completions,验证请求构造(model=glm-ocr / Bearer / data:image;base64)→ Markdown 返回 → 表格解析 → 数字清洗 → BS 勾稽 → 无 Key 时返回结构化错误。

仓库不包含任何客户文档或扫描件;真实样本测试只在本地提供路径时运行。

适用场景与注意

适合需要批量处理扫描件 PDF、财务报表、合同条款,并构建知识库的用户。插件以当前 DSH 进程权限运行,安装前应检查源码与许可证。

插件边界:
- 不处理加密 PDF / 需要密码的文档(交给下游)。
- 不做定时任务、不做目录监控。
- 不编造数字:OCR 拿不到或勾稽不平的数,标出来交人工,不硬凑。
- 扫描件/图片才调 OCR;有文本层的 PDF 先用 pypdf 直读。
- doc_preprocess 不修改任何原始文件。

生态背景

DeepSeek Harness(DSH)理念是「一切皆插件」;社区目录是独立站点,与 DeepSeek / 幻方无官方从属关系。

短结尾

dsh-ocr 为 DeepSeek Harness 提供了本地 RapidOCR 与云端 GLM-OCR 双引擎支持,覆盖整页文本、财务报表勾稽、合同条款抽取与知识库预处理场景。安装后即可在 DSH 会话中使用 doc_ocr 与 doc_preprocess 两个工具。

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

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

小夜