前言¶
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 不再因缺少該字段而拒絕圖片。適用於自定義網關路由、本地適配器等場景,安裝後按需配置白名單即可使用。