dsh-img
Đã xác minhdsh-img · v0.4.0 · MIT · Giao diện web
Give text-only models eyes: an analyze_image tool for DeepSeek Harness, backed by free Chinese vision APIs (GLM-4V-Flash / Qwen-VL) or any OpenAI-compatible vision endpoint. 给纯文本模型装上眼睛。
Cài đặt
dsh plugin add dsh-img Xác nhận layer đã áp bằng dsh --profile default --dump-config — xem hướng dẫn cài plugin.
Mã nguồn
Phát hành lên npm mà không có repository công khai. Hãy kiểm tra nội dung package trước khi cài.
Thẻ
Tác giả
Readme
dsh-img
给纯文本模型装上眼睛,并升级成完整的本地视觉工具链 · Give text-only models eyes — a DeepSeek Harness plugin that bridges any text-only coding agent to a vision API, plus a set of local, key-free pixel tools (crop / pixel-diff / colors / OCR).
- 🇨🇳 零成本开箱:默认接智谱 GLM-4V-Flash(免费),备选通义 Qwen-VL(免费额度)
- 🏠 免 key 本地模式:
preset: ollama直连本地 Ollama 视觉模型(如minicpm-v:8b),零 API key、零外部依赖、不花钱 - 🔁 多后端自动回退:配置一个
backends列表,按顺序 failover,一个挂了自动切下一个 - 🧰 本地像素工具(无需 key):
vision_crop/vision_pixel_diff/vision_colors/vision_ocr(本地 tesseract)/vision_trace(SVG 矢量化)/vision_extract_foreground(抠图)完全不调视觉 API - 💾 识别结果缓存:按图片内容 + 问题 hash 持久化到
~/.dsh/dsh-img-cache/,重复调用不重复花钱 - ⚙️ 设置页可视化配置:web 端「设置 → 插件」可直接改 preset / 填 key,无需 export 环境变量
- 🖥️ headless 支持:
dsh --profile headless下工具同样可用 - 📦 npm 一键安装:纯 JavaScript、零构建步骤
- 🔌 任意端点:
custom预设支持任何 OpenAI 兼容视觉端点(中转站 / 自建 vLLM / GPT-4o…)
安装(Install)
前置条件:Node.js ≥ 20;已装 dsh 本体(npm i -g @deepseek-ai/dsh,跑 dsh web 能开 http://127.0.0.1:3080 即可)。
① 装插件
cd ~/.dsh/profiles/web && pnpm add dsh-img --registry https://registry.npmjs.org
并把 dsh-img 加进该 profile 的 package.json → dsh.profile.bundles 数组(若 dsh plugin 命令在你的版本可用,则 dsh plugin --profile web add dsh-img 会自动登记)。
② 配 API key(只看图问答才需要;本地工具无需 key)
export ZHIPU_API_KEY=your-key-here # 免费申请:https://open.bigmodel.cn/
③ 重启服务(key 必须注入到 dsh 进程)
pkill -f "dsh web"
ZHIPU_API_KEY=your-key-here dsh web
④ 新建会话,直接贴图进对话框,或对 agent 说:
用 analyze_image 看一下 ./screenshot.png 里写了什么
切换后端 / 多后端回退(Backends)
编辑 profile 的 cordis.patch.yml($DSH_HOME/profiles/web/cordis.patch.yml),按 id 覆盖整行。
单个后端(向后兼容):
- id: image-bridge
name: dsh-img
config:
preset: qwen # zhipu | qwen | ollama | custom
免 key 本地模式(Ollama 已装视觉模型,如 minicpm-v:8b):
- id: image-bridge
name: dsh-img
config:
preset: ollama # 默认 http://127.0.0.1:11434/v1 + minicpm-v:8b,无需 key
多后端回退链(新 backends 字段,从左到右 failover):
- id: image-bridge
name: dsh-img
config:
backends:
- preset: zhipu # 首选(失败→下一个)
- preset: qwen
- preset: custom
baseURL: https://your-gateway/v1
model: gpt-4o
apiKeyEnv: MY_GATEWAY_KEY
key 分别用 ZHIPU_API_KEY / DASHSCOPE_API_KEY / MY_GATEWAY_KEY 注入,或直接在 web 设置页填写。
设置页 & headless
- web 设置页:打开「设置 → 插件」→ dsh-img 卡片,可视化改
preset、填apiKey(密文存储)。改完即时生效,无需 export 环境变量。 - headless:
dsh --profile headless下先用dsh plugin --profile headless add dsh-img装一次,之后 8 个工具均可用(本地工具无需 key,识图类用preset: ollama或环境变量 key)。
工具(Tools)
需要 key(走视觉后端)
| 工具 | 说明 |
|---|---|
analyze_image(path, question) |
图片问答 / OCR / 布局理解,返回文字答案 |
vision_ground(path, target) |
定位目标元素,返回原图像素坐标框 x1,y1,x2,y2 |
无需 key(纯本地)
| 工具 | 说明 |
|---|---|
vision_crop(path, region, out?) |
裁剪 "x1,y1,x2,y2" 区域,输出 PNG |
vision_pixel_diff(original, rebuilt, out?) |
像素级比对:diff 比率 + 最差区域排行 + 红色热力图 |
vision_colors(path, top?) |
提取主色(hex + 占比) |
vision_ocr(path) |
本地 tesseract 转录(chi_sim+eng),失败自动转视觉后端 |
vision_trace(path, steps?, out?) |
potrace 矢量化:位图 → SVG 路径(logo/图标/线稿) |
vision_extract_foreground(path, tolerance?, out?) |
边界 flood fill 抠图:均匀背景变透明,输出透明 PNG |
支持 .png .jpg .jpeg .webp .gif .bmp。
配置项(Config)
| 字段 | 默认 | 说明 |
|---|---|---|
preset |
zhipu |
旧式单后端快捷方式(zhipu/qwen/custom) |
backends |
无 | 新式:有序后端数组,从左到右 failover(优先于 preset) |
timeoutMs |
60000 |
单次请求超时 |
maxImageMB |
10 |
图片大小上限 |
detail |
auto |
auto / low / high |
chatBridge |
true |
对话框直发图:声明图片输入 + 请求前把附件转译成文字 |
bridgePrompt |
内置 | 附件转译时发给视觉模型的问题 |
cache |
true |
识别结果持久化缓存(~/.dsh/dsh-img-cache/) |
ocrLang |
chi_sim+eng |
本地 OCR 的 tesseract 语言包 |
pixelDiffSampleMax |
1024 |
pixel-diff 降采样最长边(控制 CPU) |
traceSteps |
4 |
vision_trace 的 posterize 颜色层数 |
foregroundTolerance |
40 |
vision_extract_foreground 的背景色容差(越大抠得越狠) |
排错(Troubleshooting)
| 报错 | 原因与解法 |
|---|---|
all N vision backend(s) failed |
回退链里每个后端都失败;检查各 key 环境变量是否注入 dsh 进程 |
Vision API HTTP 401 |
key 错误或未开通对应模型 |
Unsupported image type |
转了不支持的格式;先转成 png/jpg |
Image too large |
超过 maxImageMB;调大配置或压缩图片 |
vision_ground could not parse a box |
视觉模型没按格式返回坐标;换模型或用更明确的目标描述 |
所有工具调用崩 reading 'prepare' |
装的是 ≤0.2.3 旧版(双实例 bug);pnpm add dsh-img@latest 升级 |
| 贴图后模型答非所问 | 检查图里是否有旧指令文字——模型会把图中文字当上下文读 |
| 旧会话持续报 tool_calls 错 | 该会话已被旧 bug 毒化(append-only 日志),新建会话即可 |
适用边界(Limits)
本地工具各有其适用场景,超出边界效果会差,选对工具很重要:
| 工具 | 适合 | 不适合 |
|---|---|---|
vision_trace |
logo / 图标 / 线稿 / 简洁几何图形 | 彩色插画、照片、有渐变的图(potrace 是"位图→少色阶轮廓"工具,会压平成单一色块,无法保留连续色调) |
vision_extract_foreground |
均匀背景(纯白 / 纯色底)的人/物 | 复杂背景、纹理背景(flood fill 抠不干净) |
vision_pixel_diff |
同尺寸 UI 截图、设计稿还原度比对 | 尺寸差异大、内容完全不同的两张图(无对齐意义) |
vision_ocr |
印刷体文字、屏幕截图文字 | 手写体、艺术字(识别率下降,可改用 analyze_image 走视觉模型) |
想要"彩色插画转 SVG",potrace 不是正确工具(它不做彩色矢量化)。请改用专业矢量工具(Illustrator / Inkscape 的自动描摹),或直接交给视觉模型出设计稿再人工绘制。
English
A zero-build plugin for DeepSeek Harness. One command to install, one env var to configure, and your text-only model gains image understanding through analyze_image — plus key-free local tools (vision_crop, vision_pixel_diff, vision_colors, vision_ocr, vision_trace, vision_extract_foreground) and an ordered multi-backend failover chain.
cd ~/.dsh/profiles/web && pnpm add dsh-img --registry https://registry.npmjs.org
export ZHIPU_API_KEY=... # free at https://open.bigmodel.cn/
License
MIT