dsh-vision-bridge
给纯文本的 DeepSeek「装上眼睛」—— 粘贴图片,自动识别成文字,再交给模型理解。
dsh-vision-bridge 是一个 DeepSeek Harness(dsh)插件。它让本身不支持图片输入的纯文本模型(如 deepseek-v4-flash)也能「看懂」你粘贴的图片:图片在进入模型之前被自动交给一个 OpenAI 兼容的视觉模型(默认智谱免费档 glm-4.6v-flash)识别成文字,替换掉消息里的图片块,于是模型看到的全是文字。
- 走 dsh 官方扩展点
agent/pre-step,非侵入、不改任何 dsh 编译产物。 - 通过
cordis.patch.yml挂载,与dsh-vision等插件并列。 - 默认零成本开箱(智谱免费模型),自动降级链应对限流。
安装
# 取代码(放到任意独立目录,例如 D:\project)
git clone https://github.com/Xieweikang123/dsh-vision-bridge D:\project\dsh-vision-bridge
让模型「支持图片输入」
dsh 服务端会在图片进入 agent 之前,检查当前模型的 inputModalities,不包含 image 就直接拒绝(返回 MODEL_DOES_NOT_SUPPORT_IMAGES)。所以需要先在 ~/.dsh/settings.yaml 里把模型的输入能力声明为含图片:
llm-pi-ai:
providers:
opencode-go:
apiKeyEnv: OPENCODE_GO_API_KEY
modelOverrides:
deepseek-v4-flash:
input:
- text
- image
这只会让 dsh「放行」图片进入 agent 请求;真正把图片变成文字的是本插件。若网关本身仍拒绝图片(比如 opencode-go 返回
unknown variant image_url),插件会在模型看到图像前完成识别替换,模型请求里已不含图片块。
挂载插件
在 ~/.dsh/cordis.patch.yml 里 insert 插件(Windows 下 name 必须用 file:// URL):
- insert:
- id: dsh-vision-bridge
name: 'file:///D:/project/dsh-vision-bridge/lib/index.js'
配置识别用的 API key
默认走智谱免费档 glm-4.6v-flash,只需一个 key:
- 到 https://open.bigmodel.cn 注册并创建 API key。
- 把 key 写进
~/.dsh/.env:VISION_API_KEY=<你的key>
key 读取顺序:config.apiKey → $VISION_API_KEY → $DSH_VISION_API_KEY → $ZHIPUAI_API_KEY → $DASHSCOPE_API_KEY。本地 Ollama 端点可免 key。
重启 dsh 后生效:粘贴一张图,发送,模型就能看懂它。
配置
插件支持以下 config 项(在 cordis.patch.yml 的对应条目加 config: 即可):
- insert:
- id: dsh-vision-bridge
name: 'file:///D:/project/dsh-vision-bridge/lib/index.js'
config:
baseURL: https://open.bigmodel.cn/api/paas/v4 # OpenAI 兼容端点
apiKey: "" # 留空则读环境变量
model: glm-4.6v-flash # 视觉模型
fallbackModels: [] # 自定义降级链;空则默认智谱免费链
prompt: "" # 自定义识别提示词
maxTokens: 2048
timeoutMs: 60000
后端速查
| 场景 | baseURL | model |
|---|---|---|
| 默认(智谱免费) | https://open.bigmodel.cn/api/paas/v4 |
glm-4.6v-flash |
| 智谱付费 | 同上 | glm-4.6v |
| 阿里百炼 | https://dashscope.aliyuncs.com/compatible-mode/v1 |
qwen3-vl-flash |
| 火山豆包 | https://ark.cn-beijing.volces.com/api/v3 |
doubao-seed-2-1-turbo-260628 |
| 本地 Ollama | http://localhost:11434/v1 |
qwen3-vl:4b(无需 key) |
工作原理
- 用户粘贴/上传图片 → dsh 先把图片存为持久化附件(
saveImage),消息里以{ type: 'image', attachment }块出现。 - 插件监听
agent/pre-step(dsh 官方扩展点,位于消息进入模型之前)。 - 发现
image块 →attachments.readImage(ref)拿到字节 → base64data:URL。 - 调视觉端点的
/chat/completions识别,返回文字描述。 - 用识别文字替换 image 块(保留用户自己打的文字),返回
{ kind: 'enter', messages }。 - 纯文本模型收到的是纯文字,正常理解图片内容。
设计上借鉴了 opencode-image-vision 与 dsh-vision 的思路,但映射到 dsh 的原生扩展点、无额外运行时依赖:
- 默认智谱免费档
glm-4.6v-flash、降级链(glm-4.1v-thinking-flash→glm-4v-flash)、API key 解析顺序,均沿用 dsh-vision(MIT)。 - "把粘贴的图识别成文字、喂给纯文本模型"的目标,沿袭 opencode-image-vision(MIT)。
同图按 attachmentId 缓存,不重复识别。
已知限制
- 对话里不会显示原图:因为模型收不到图片(网关/模型不支持),插件把图片替换成了文字,历史里也只有文字。
- 识别质量取决于视觉模型:默认免费档对密集文字(如终端重复行)可能读得冗余;换
glm-4.6v/qwen3.7-plus等可获得更好效果。 - 改成插件逻辑后,运行中的 dsh 需重启才会加载新模块(热重载主要覆盖
cordis.patch.yml配置变化)。
No comments yet. Be the first to write one.