Tianbaidi/dsh-plugin-vision ↗★ 0
dsh-plugin-vision
Auxiliary vision for DeepSeek Harness: analyze images via an OpenAI-compatible vision endpoint (works with any main model)
安装
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:Tianbaidi/dsh-plugin-vision说明文档
阅读完整 README ↗dsh-plugin-vision
DeepSeek Harness (dsh) 的辅助视觉插件: 把图片发给外部的 OpenAI 兼容视觉端点,返回文字分析结果。任何主模型都能用——包括纯文本的 DeepSeek。
为什么需要它
dsh 内置的 read_image 工具把图片注入主模型上下文,
要求主模型声明支持图像输入;而 DeepSeek 适配器是 inputModalities: ['text'],所以 read_image 在
DeepSeek 下直接拒绝执行。本插件走互补的辅助视觉路线:把图片发给独立的视觉模型,把回答以文字形式
返回给 agent,不依赖主模型的视觉能力。
read_image(内置) | vision_analyze(本插件) | |
|---|---|---|
| 图片去向 | 主模型上下文(原生) | 外部视觉端点 |
| 主模型需支持视觉 | 需要 | 不需要 |
| 结果 | 模型直接看到图片 | 纯文字回答 |
工作原理
- 读取图片——本地文件路径或
http(s)链接(有大小上限、魔数 MIME 嗅探)。 - 转成 base64 data URL。
- 向端点发 OpenAI 兼容的
chat/completions请求,content 为[{type:text},{type:image_url}]。 - 返回视觉模型的回答(思考型模型无正文时回退到
reasoning_content)。
两个能力
1. vision_analyze 工具
把图片(本地路径或 URL)发给配置的视觉端点,返回文字回答——任何主模型都能用,包括纯文本的 DeepSeek。
2. 图片附件转述(Web 界面贴图)
Web 界面支持粘贴/拖拽图片,但 DeepSeek 适配器会拒绝图片内容(UNSUPPORTED_CONTENT)。
本插件挂钩 agent/pre-step(官方文档里"替换进入 step 的消息"的接缝):当用户消息携带图片块时,
调用视觉端点描述图片,在消息到达模型之前把每个图片块换成 [User-attached image description]
文字块。DeepSeek 永远只看到文字,贴图就能用了。当主模型路由声明支持图像输入时,自动跳过转述,
走原生视觉。用 attachImages 开关(默认 true)。转述失败会降级为明确提示,不会卡住对话。
attachMode 控制问视觉模型的方式:
auto(默认):用户随图写了文字时,把用户的原文原样作为问题传给视觉模型—— "这是谁?""翻译图里的文字""这个页面哪里有问题?"都会被直接作答,另附一行图片概要便于追问; 没有文字时退化为通用描述。describe:永远用通用描述提示词,忽略用户文字。
3. deepseek-vision provider 路由(Web 界面贴图,根治)
Web 界面的上传预检在所选模型未声明图像输入时会拒绝图片——所以在普通 DeepSeek 路由下,粘贴的图片
根本到不了 agent。本插件注册一个 deepseek-vision provider:一个 DeepSeekAdapter 子类,声明
支持图像输入(预检放行),在请求时把附件图片转述为文字,再委托给真正的 DeepSeek chat-completions
端点。主模型仍然是 DeepSeek——同一端点、同一 key、同一批模型。在模型选择器里选 "DeepSeek (vision via
plugin)",然后照常粘贴/拖拽图片即可。用 开关(默认 ),provider id
为 (默认 )。