dsh-web-search-ddg
aooyoo
Zero-token DuckDuckGo search provider for the DeepSeek Harness (DSH) web seam — local headless browser, no API key, no m…
PROJECT TOPICS
PROJECT README
给 DeepSeek Harness 加"眼睛"的本地 OCR 插件: 让纯文本模型真正看到图片内容——截图、发票、表格、扫描件、多栏文档,全部本地识别,不依赖任何云 OCR。
背景:DeepSeek API 当前不接收图片输入,对话里发图只能看到"这是一个图片附件"。 本插件在消息序列化时把图片本地 OCR 成文本再发给模型,图片从此可被理解。 快速通道秒级出结果(rapidocr),深度通道用 DeepSeek-OCR-2 做版面级解析。
本插件在鸿蒙 PC(HarmonyOS PC)上开发并实测通过,针对鸿蒙做了部分适配:
DSH_OCR_PYTHONPATH / DSH_OCR_LD_LIBRARY_PATH 指向自带依赖(如 brew 安装的 Python 3.12 与 vendored 轮子);其他系统(Linux / macOS / Windows):插件本体是跨平台 Node.js + Python 实现,无鸿蒙专属依赖,满足前置要求即可运行。DSH_OCR_PYTHONPATH / DSH_OCR_LD_LIBRARY_PATH 仅在需要自带 Python 运行库时设置;Windows 不需要 LD_LIBRARY_PATH。
ocr_image.py + RapidOCR(onnxruntime,秒级)llama-mtmd-cli 本地推理)——消息里带 [深度识图] 即触发| 分隔 的 Markdown 行文本@x,y,供模型按语义重组$DSH_HOME/attachments/ocr2-cache),同一图片只算一次ctx.provide('ocr', ...) 挂到适配器缝上——装上即接管、停用即回退内置实现,无需改适配器代码(前提见下方"前置要求")对话消息(含图片块)
│
▼ llm-deepseek 适配器序列化(OCR 缝)
├─ 消息含 "深度识图" 且 ocrDeep 可用 ──► llama-mtmd-cli + DeepSeek-OCR-2(磁盘缓存)
├─ 否则 ocrImage 可用 ─────────────────► ocr_image.py + RapidOCR(秒级,内存缓存)
└─ 无 ocr 服务 ────────────────────────► 回退 image_url 直传(原行为)
图片块 → "[图片OCR 附件 <name> <id>]\n<OCR文本>" 文本块 → DeepSeek API → 模型理解图片
dsh-ocr-plugin/
├── lib/index.js # Cordis 插件本体(@deepseek-ai/dsh-ocr,提供 ocr 服务)
├── tools/ocr_image.py # 快速 OCR 脚本:版面理解 + 阅读顺序 + 表格还原
├── tools/paste-image-plugin.json # [可选] 粘贴图片自动保存插件(动态插件参考实现)
├── scripts/install.sh # 一键安装到 DSH profile
├── scripts/download-models.sh # 下载深度 OCR 模型(GGUF)
└── docs/adapter-seam.md # 适配器 OCR 缝的接口契约(自打补丁用)
| 组件 | 必需 | 说明 |
|---|---|---|
| DeepSeek Harness | ✅ | 部署含 dsh-llm-deepseek 适配器 |
| 适配器 OCR 缝 | ✅ | 见 docs/adapter-seam.md(约 30 行本地改动) |
| Node.js ≥ 18 | ✅ | 运行 harness |
| Python 3.10+ | ✅ | 快速 OCR 通道(pip install rapidocr_onnxruntime onnxruntime pillow numpy opencv-python) |
llama.cpp(llama-mtmd-cli) |
⭕ 深度通道 | 需支持 --jinja(llama.cpp 较新版本);也可只装快速通道 |
| DeepSeek-OCR-2 模型 | ⭕ 深度通道 | GGUF 约 1.6GB + mmproj 约 0.5GB |
只想用快速通道(纯 rapidocr)也可以:跳过模型下载,不设
DSH_OCR2_*即可,深度通道会自动失败并回退快速通道。
git clone https://github.com/CraZY222123/dsh-ocr-plugin.git
cd dsh-ocr-plugin
# 1) 安装 Python 依赖(快速通道)
pip install rapidocr_onnxruntime onnxruntime pillow numpy opencv-python
# 2) 下载深度 OCR 模型(可选,默认 hf-mirror 加速;海外可 HF_BASE=https://huggingface.co)
./scripts/download-models.sh
# 3) 安装插件到 DSH(默认 profile: web;自动打 cordis.patch.yml 补丁行)
./scripts/install.sh --profile web
# 若你的部署 node_modules 在独立目录,可加 --app-root /path/to/deepseek-harness
装完后重启 DSH,发一张图片试试。移除 cordis.patch.yml 里的 ocr-provider 行即可停用。
package.json、lib/、tools/ 复制到 ~/.dsh/profiles/node_modules/@deepseek-ai/dsh-ocr/(flat-fallback 解析)。~/.dsh/profiles/web/cordis.patch.yml 追加:- id: ocr-provider
name: '@deepseek-ai/dsh-ocr'
| 变量 | 默认值 | 说明 |
|---|---|---|
DSH_HOME |
~/.dsh |
harness 数据目录 |
DSH_OCR_PYTHON |
python3 |
快速通道的 Python 解释器 |
DSH_OCR_SCRIPT |
包内 tools/ocr_image.py |
快速 OCR 脚本路径 |
DSH_OCR_PYTHONPATH |
未设置 | 透传给 Python 子进程的 PYTHONPATH |
DSH_OCR_LD_LIBRARY_PATH |
未设置 | 透传 LD_LIBRARY_PATH(如 vendored numpy 轮子) |
DSH_OCR2_BIN |
llama-mtmd-cli |
深度通道二进制(不在 PATH 时给全路径) |
DSH_OCR2_MODEL |
$DSH_HOME/models/ocr2/DeepSeek-OCR-2-IQ4_NL.gguf |
深度模型 |
DSH_OCR2_MMPROJ |
$DSH_HOME/models/ocr2/mmproj-deepseek-ocr-2-q8_0.gguf |
视觉投影 mmproj |
DSH_OCR2_CACHE |
$DSH_HOME/attachments/ocr2-cache |
深度结果磁盘缓存目录 |
DSH_OCR2_MAX_TOKENS |
1200 |
深度通道最大生成 token |
DSH_OCR2_THREADS |
6 |
深度推理线程数 |
tools/paste-image-plugin.json,也可以直接 Ctrl+V 粘贴截图);发图后,模型实际看到的是图片的 OCR 文本块(会话日志/请求体中形如):
[图片OCR 附件 screenshot.png a1b2c3d4e5f6a7b8]
[0.98] 【版面说明】各行末尾 @x,y 为文本框左上角坐标;文本已按阅读顺序重排…
[0.95] DeepSeek Harness @32,58
[0.93] | 会话 | 时长 | @70,461
需要版面级解析(复杂表格、发票、扫描件、手写体)时,在消息文本里带上 [深度识图] 再发图即可,其余操作相同:
这张发票请提取所有字段 [深度识图]
深度通道会调用本地 DeepSeek-OCR-2 做完整版面解析,输出 [深度OCR 附件 …] 文本块,精度明显高于快速通道。
[图片OCR 附件 …] / [深度OCR 附件 …] 文本块,而不是 image_url 直传;cordis.patch.yml 里的 ocr-provider 行移除并重启 DSH,再发同一张图——模型会回到"只看到附件占位、读不出内容"的状态,即为插件在起作用。ocr 服务)时才会回退把图片 base64 直传给 API;"Extract all text from this image."(全尺寸鲁棒)。若仍为空,检查 mmproj 是否匹配、模型文件是否损坏。DSH_OCR2_THREADS,有 GPU 时用 llama.cpp 的 GPU 构建可显著加速。LD_LIBRARY_PATH 相关配置仅 Linux/macOS 需要;onnxruntime 在 Windows 下无需此变量。欢迎 Issue / PR:识别质量改进、版面算法、更多平台的安装脚本、GPU 推理配置等。
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。