前言¶
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:手动安装(降级方案)¶
- 把本仓库放到一个稳定的路径,例如
D:\workbench\dsh-vision-unlock。 - 在你的 profile 目录(默认
~/.dsh/profiles/desktop/)的node_modules下建立指向它的链接:
cmd /c "mklink /J `"%USERPROFILE%\.dsh\profiles\desktop\node_modules\dsh-vision-unlock`" `"D:\workbench\dsh-vision-unlock`""
- 编辑该 profile 的
package.json,在dsh.profile.bundles数组加入"dsh-vision-unlock",并在dependencies加入"dsh-vision-unlock": "link:D:/workbench/dsh-vision-unlock"。 - 重启 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 不再因缺少该字段而拒绝图片。适用于自定义网关路由、本地适配器等场景,安装后按需配置白名单即可使用。