dsh-vision-assist:为无视觉能力的模型添加多模态识别能力

前言

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(推荐)

  1. 打开 DSH 设置。
  2. 进入「插件」面板。
  3. 在「官方」分组中找到「视觉助手 vision-assist」卡片。
  4. 在详情页中启用总开关,选择识别模型(需在 llm-pi-ai 中配置)和超时时间。
  5. 点击保存,配置即时生效。

方式二: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 中纯文本模型无法处理图片输入的痛点。通过工具调用和请求改写,它在不修改原有请求链路的前提下,为模型增加了视觉能力,适合需要在多种模型间切换但保持视觉处理统一的场景。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜