dsh-vision-unlock:让未声明多模态能力的模型也能发图

前言

DeepSeek Harness(DSH)在收到图片时会先检查模型是否声明了 inputModalities。若未声明或数组里没有 "image",DSH 会直接拒绝:会话控制器弹「当前模型不支持图片,请切换支持图片的模型」,子代理发图、read_file 读图、MCP/ACP 图片注入都会被拦截。

这种判定只依赖两处能力声明:LlmModelInfo.inputModalities(所有门禁的单一来源)和适配器自己持有的模型表。常见的触发场景是自定义/本地网关路由只写了 id / name / contextWindow / maxTokens,没写 input,于是落到默认值 ["text"],即便上游模型实际支持多模态,也会被拒绝。

dsh-vision-unlock 的目的就是去掉这个限制,让未声明多模态能力的模型也能发送和读取图片,且不修改 app.asar 或配置树,而是通过运行时接缝实现,随 DSH 升级继续可用。

插件定位

  • 名称:dsh-vision-unlock
  • 维护者:wmk66ds
  • 分类:模型推理
  • 核心价值:在 DSH 层面放行图片,不依赖上游模型显式声明 inputModalities 中包含 "image"

核心功能

  • 包装 llm.resolveModelInfo,将结果补上 "image",拆掉所有基于该字段的门禁(会话控制器、子代理、read_file、MCP/ACP 图片注入)。
  • 遍历 llm.adapters,把适配器模型表里的 input / inputModalities 补上 "image",拆掉适配器自身的自检(如 pi-ai)。
  • 适配器换快照(配置热更新)时自动重做,无需重启。

安装与启用

方式 A:用 plugin_manager 安装(推荐)

在 DSH 里让 agent 执行:

plugin_manager  action: install_bundle  target: github:wmk66ds/dsh-vision-unlock

或在 Web UI 的 设置 → 插件 面板里,把上面这串填进安装框。

target 也可以写完整 URL,两种等价:

写法 说明
github:wmk66ds/dsh-vision-unlock GitHub 简写,推荐
https://github.com/wmk66ds/dsh-vision-unlock 完整 git URL

锁定版本用 # 加 ref:

github:wmk66ds/dsh-vision-unlock#v1.0.0

方式 B:手动安装(降级方案)

  1. 把本仓库放到一个稳定的路径,例如 D:\workbench\dsh-vision-unlock。
  2. 在你的 profile 目录(默认 ~/.dsh/profiles/desktop/)的 node_modules 下建立指向它的链接:
cmd /c "mklink /J `"%USERPROFILE%\.dsh\profiles\desktop\node_modules\dsh-vision-unlock`" `"D:\workbench\dsh-vision-unlock`""
  1. 编辑该 profile 的 package.json,在 dsh.profile.bundles 数组加入 "dsh-vision-unlock",并在 dependencies 加入 "dsh-vision-unlock": "link:D:/workbench/dsh-vision-unlock"。
  2. 重启 DSH。

Windows 上用 junction(mklink /J)而不是符号链接——后者需要管理员权限。注意 desktop profile 由 Electron 应用独占管理,dsh plugin --profile desktop 会拒绝执行,所以才有这里的手动步骤。

配置

在 cordis.patch.yml 里的 config 部分添加:

- insert:
    - id: vision-unlock
      name: 'dsh-vision-unlock'
      config:
        providers: []   # 留空 = 所有 provider;否则只放行列出的
        models: []      # 留空 = 所有模型;否则只放行列出的

两个白名单都为空时全部放行;非空时需同时命中才放行。

已知边界

  • deepseek 适配器的模型表来自它自己的 plugin config,不经由 llm.adapters 暴露,本插件改不到。该路由如需图片,请在设置页给模型勾选 Image(等价于写 inputModalities: [text, image])。
  • 放行后图片真的会发出去。若上游实际不支持多模态,报错会从模型侧返回,不再是 DSH 本地拒绝——这是预期行为,不是 bug。

卸载

从 profile 的 package.json 中删掉 dsh-vision-unlock(bundles 与 dependencies 两处),删除 node_modules/dsh-vision-unlock,重启 DSH。

适用版本

针对 DSH 桌面版(含 dsh-llm / dsh-llm-pi-ai / dsh-api-session-controller)验证。依赖的是 llm.resolveModelInfo 与 llm.adapters 这两个接口,若上游改动需要同步调整。

总结

dsh-vision-unlock 通过运行时接缝给未声明多模态能力的模型补上 "image" 能力声明,让 DSH 不再因缺少该字段而拒绝图片。适用于自定义网关路由、本地适配器等场景,安装后按需配置白名单即可使用。

目录页|GitHub 仓库

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

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

Xiaoye