前言¶
DeepSeek Harness (DSH) 的插件化架构允许扩展原生功能。在模型推理链路中,如果当前路由的模型不支持图片输入(如某些纯文本模型),直接发送图片块会触发 model does not support image input 的拒绝错误。
dsh-vision-assist 插件通过拦截 LLM 调用边界,将图片转换为文本指令,从而让纯文本模型也能“看”图。它本质上是给没有视觉能力的主模型配了一个可随时切换的多模态“侧车”。
插件概览¶
- 插件名称:
dsh-vision-assist - 维护者:
wjling - 分类:模型推理
- 许可证:MIT
核心功能¶
1. vision_recognize 工具¶
插件在 host 级注册了 vision_recognize 工具,任意会话均可直接调用该工具,使用选定的多模态模型识别本地图片。
2. 模型调用边界图片降级¶
当会话路由的模型不支持图片输入时,插件会在 ctx.llm.prepareCall / ctx.llm.stream 边界拦截请求:
- 克隆请求对象。
- 将图片块(含 tool-role 消息)替换为“附件仓路径 + vision_recognize 指引”的文本。
- 主模型正常接单,调用 vision_recognize 工具。
- ctx.llm.stream 直连选定的多模态模型获取识别文本,继续任务。
3. 热更新配置与 UI¶
插件提供了设置页 UI,支持在 DSH 设置 → 插件 → 「视觉助手 vision-assist」卡片中直接切换识别模型和超时时间。配置修改后保存即时生效,无需重启 DSH。
安装¶
确保你的 DSH 版本 >= 0.1.7-alpha.1。执行以下命令安装:
dsh plugin --profile web add github:wjling/dsh-vision-assist
安装后需要重启 DSH 以激活插件。
配置¶
插件支持两种配置方式:
方式一:设置页 UI(推荐)¶
- 打开 DSH 设置。
- 进入「插件」面板。
- 在「官方」分组中找到「视觉助手 vision-assist」卡片。
- 在详情页中启用总开关,选择识别模型(需在
llm-pi-ai中配置)和超时时间。 - 点击保存,配置即时生效。
方式二:profile patch¶
在 ~/.dsh/profiles/<profile>/cordis.patch.yml 中添加:
- id: vision-assist
config:
enabled: true
provider: <provider_name>
model: <model_id>
timeoutMs: 300000
注意:选定的模型必须在
llm-pi-ai.providers.<provider>.models中声明input: [text, image],否则 DSH 会拒绝该模型的图片输入。
工作原理¶
流程如下:
1. 用户在输入框发送图片。
2. api-session-controller 进行模态预检。如果模型支持图片,请求正常进入会话,GUI 显示原图。
3. 当主模型发起 LLM 调用时,插件检查模型是否支持视觉输入。
4. 若不支持,插件克隆请求,将图片块改写为文本指令(包含本地附件路径)。
5. 主模型接收到指令,调用 vision_recognize 工具。
6. vision_recognize 触发视觉模型识别,返回文本,主模型继续处理任务。
注意事项¶
- 原图存储:所有上传的原图始终保存在
~/.dsh/attachments/v1/objects/,按内容寻址。 - UI 历史保留:GUI 气泡与会话历史始终保留原始图片,只有发往无视觉模型的那次请求被改写为识别指引。
- 兼容性:需要 Node >= 20 和 DSH >= 0.1.7-alpha.1。
总结¶
dsh-vision-assist 解决了 DSH 中纯文本模型无法处理图片输入的痛点。通过工具调用和请求改写,它在不修改原有请求链路的前提下,为模型增加了视觉能力,适合需要在多种模型间切换但保持视觉处理统一的场景。