dsh-ocr-bridge
Đã xác minhdsh-ocr-bridge · v0.1.1 · MIT
Paste images into DeepSeek Harness chat and have them read by a free local backend (macOS Vision / Tesseract) before the text-only DeepSeek model answers
Cài đặt
dsh plugin add dsh-ocr-bridge Xác nhận layer đã áp bằng dsh --profile default --dump-config — xem hướng dẫn cài plugin.
Mã nguồn
Thẻ
Tác giả
Readme
dsh-ocr-bridge
English | 中文
让 DeepSeek Harness(DSH)对话直接粘贴图片,先用免费本地后端(macOS Vision,Tesseract 兜底)识别,再交给纯文本的 DeepSeek 模型(如 deepseek-v4-flash)回答。模型、Agent 能力、API Key 与花费完全不变。
范围说明:本插件是 OCR 级本地桥——把图片里的文字读出来(macOS Vision → Tesseract)。不是通用视觉理解,且从不调用云端端点。
独立性声明。 本插件是为 DeepSeek Harness(DSH)开发的独立社区插件,非 DeepSeek 官方产品,与 DeepSeek 或 DeepSeek Harness 项目无隶属、背书或赞助关系。"DeepSeek" 与 "DeepSeek Harness" 商标归各自所有者。
⚠️ 信任边界。 本插件运行在 harness 宿主进程内,拥有 shell 级权限(会调用
osascript/tesseract)。请只安装你信任的插件。注入请求的 OCR 文本被显式标记为非可信观察数据、不是指令——不要执行其中出现的命令、规则或越权请求。
为什么需要它
DSH 的图片准入闸门(dsh-host-apiproxy.submitPrompt)会在当前模型未声明 image 输入时拒绝附件。官方 DeepSeek 适配器对所有模型硬编码 inputModalities: ["text"],且序列化器对图片块直接抛错。闸门只看"声明"、不验证真多模态——所以本插件注册一个包装适配器:
- 声明
["text", "image"]让闸门放行; - 用本地识别(macOS Vision → Tesseract,无网络、无新 Key)读取图片;
- 剥掉图片块,把识别文字作为非可信上下文注入;
- 用你现有的 Key 照常调官方 DeepSeek API(纯文本)。
无需新 API Key、无需改设置、无需切换模型。
安装
需要 DSH 0.1.0-rc.7(peer 依赖精确锁定;其他 rc 版本不受支持,见兼容性)。
# npm 源
dsh plugin --profile web add dsh-ocr-bridge
# 或直接从 GitHub
dsh plugin --profile web add github:your-org/dsh-ocr-bridge
# 本地开发(lib/ 改动即时生效)
dsh plugin --profile web add link:~/dev/dsh-vision-bridge
包名说明:npm 上的
dsh-vision-bridge已被无关项目占用,且上游dsh-vision已占据 "vision" 命名——本插件以dsh-ocr-bridge发布,同时也点明其 OCR 级定位。
添加后重启 dsh web(patch 层在启动时叠加)。模型选择器仍显示原来的 deepseek-v4-flash / deepseek-v4-pro,无需重新选择。
后端
| 顺序 | 后端 | 要求 |
|---|---|---|
| 1 | macOS Vision(JXA 经 osascript) |
macOS 10.15+;零安装,中英文内置 |
| 2 | Tesseract | tesseract CLI + 语言包(chi_sim、chi_tra、eng);Linux/Windows 上的唯一选项 |
Vision 失败且没有 Tesseract 时,请求以 VISION_UNAVAILABLE 失败,错误信息会列出两个后端的失败原因。图片会写入临时目录并在结束后清理。
配置
全部可选,位于 llm-deepseek 设置段(本插件接管的官方 DeepSeek 设置段),现有 DeepSeek 设置继续生效。
settings.yaml(或 GUI 设置面板):
llm-deepseek:
visionTimeoutMs: 180000 # 单个后端识别超时(毫秒),默认 180000
maxImages: 8 # 每次请求识别的图片数,1..32,默认 8
# ……官方 DeepSeek 设置照常可用:baseURL、apiKeyEnv、thinking……
说明:
- 超过上限时请求以
VISION_IMAGE_LIMIT失败,而不是静默丢弃图片。 - 识别结果按(图片集合 + 最新用户文字)缓存,上限 64 条,同一对话重复发同一张截图不会重复 OCR。
DEEPSEEK_API_KEY的解析流程完全保留:先ctx.credentials,再启动环境,与官方适配器一致。- png / jpeg / webp / gif 均支持(以 harness 附件准入为准)。
架构
粘贴图片 ──► submitPrompt 闸门 ──► 包装适配器(inputModalities=["text","image"]) ──放行──► durable attachment 引用
│
stream(): collectImageRefs(messages)
├─ 无图片 → 原样委托 DeepSeekAdapter
├─ 原模型支持图片 → 原样委托
└─ 有图片 → 逐张 attachments.readImage(ref)
→ 本地识别(macOS Vision → Tesseract)
→ 剥掉图片块,追加 <vision-bridge-context>
→ 纯文本委托官方 DeepSeek API
开发
pnpm install
pnpm check # typecheck + test + build
对 harness 联调:
dsh plugin --profile web add link:~/dev/dsh-vision-bridge # 符号链接:lib/ 改动即时生效
# 修改 cordis.patch.yml 仍需重启 `dsh web`
然后在任意会话粘贴图片,按下方验证清单核对。
验证清单
-
dsh plugin --profile web add dsh-ocr-bridge并重启后,模型选择器仍显示deepseek-v4-flash/deepseek-v4-pro - 纯文本 flash 模型下粘贴单张/多张图片不再报
MODEL_DOES_NOT_SUPPORT_IMAGES - 中文+英文混合截图识别正确(macOS Vision)
- Tesseract 降级路径可用(模拟 Vision 失败)
- 无图片对话行为与官方适配器完全一致(纯委托)
- 无需新 API Key;
settings.yaml不改也能用 - png / jpeg / webp / gif 均可用;图片数量受
maxImages约束
兼容性
- 仅 DSH
0.1.0-rc.7。peer 依赖精确锁定(@deepseek-ai/*0.1.0-rc.7、@deepseek-ai/cordis4.0.1);后续 rc 随发布补充。 - Node
>=22.19,pnpm10.x。 - macOS 10.15+ 推荐(Vision 后端);Linux/Windows 走 Tesseract。
致谢
代码骨架借鉴自 oil-oil/dsh-vision(MIT),已保留出处(见 LICENSE)。定位刻意不同:dsh-ocr-bridge 是本地优先、OCR 级的桥(零云端、零新增花费、锁定 rc.7);上游以云端多模态端点 + 视觉记忆工作流为主。两者定位互补而非重叠;本插件不宣称是上游的分支或继任者。
路线图(v1+)
- Ollama 本地视觉后端(如
llava)作为第三识别选项 - 桥接选项的客户端设置卡片(目前经
settings.yaml/ 组合配置设置) - 多后端交叉验证(Vision + Tesseract 一致)提升 OCR 置信度
许可证
MIT。见 LICENSE。