前言¶
在 DSH(DeepSeek Harness)裏用文本模型對話時,想貼一張截圖、一段報錯界面或一張表格照片,通常只有兩條路:換一個原生多模態模型接管整個對話,或者在對話之外手動把圖片描述成文字再粘貼進來。前者等於換掉對話大腦,後者每次都要重複操作。
DSH 的理念是「一切皆插件」,這件事也可以交給插件解決。下面介紹的 dsh-vision-recognizer 做的就是:保持 DeepSeek 作爲對話大腦,隨時附加圖片,並可在 設置 → 插件 裏隨時切換識圖供應商。
這是什麼¶
dsh-vision-recognizer 是 kaixinbaba 維護的 DSH 視覺插件,MIT 許可證,當前版本 0.2.0,要求 node >= 22.19.0、dsh >= 0.1.0-rc.8。
它註冊一條 adaptive provider 路由(默認 id 爲 vision-recognizer,在模型選擇器中顯示爲「DeepSeek + 智能識圖」),包裹所配置的對話供應商,DeepSeek 是默認被包裹的對話供應商。這條路由始終放行圖片附件,再按實際選中的模型分流:
粘貼圖片 ─▶ vision-recognizer 路由 ─▶ 選中的模型支持圖片輸入?
├─ 是 → 原生圖片請求,直接透傳圖片塊
└─ 否 → 調用所配置視覺模型轉譯爲文字,
純文本模型收到 [圖片轉譯] 結果
也就是說,原生多模態模型看到的是原始圖片塊,純文本模型收到的是識圖模型轉譯好的文字,對話大腦始終不變。
核心功能¶
供應商與協議¶
內置 15+ 國內外供應商:OpenAI、Anthropic Claude、Google Gemini、OpenRouter、Azure OpenAI、Ollama(本地)、阿里 DashScope、QwenCloud (Intl)、智譜 GLM、百度千帆、訊飛星火、Moonshot Kimi、騰訊混元、火山引擎豆包、SiliconFlow;任意 OpenAI 兼容端點可通過自定義供應商接入。
協議上同時支持 OpenAI 兼容(/chat/completions)與原生 Anthropic Messages,Claude 開箱即用。
防掛起與回退鏈¶
- 本地 / 匿名端點有硬性 20s 超時上限;
- HTTP 429 快速失敗;
- 失敗端點冷卻 60s;
- 無 key 且無本地 Ollama 時快速失敗,並給出可操作的指引,而不是把請求掛住。
主模型失敗後,插件按序嘗試 fallbackModels 裏的每個條目(每項可指向不同廠商),全部失敗才報錯,並列出每一次嘗試。
緩存與本地路徑¶
- 內容哈希緩存:同一張圖片每進程最多轉譯一次(進程內緩存,上限 200 條);
autoLocalOllama(默認開啓)會探測http://localhost:11434,把運行中的 Ollama 前置到回退鏈中,圖片不出本機。
安裝與啓用¶
安裝只需一條命令,插件無構建腳本、完全無原生依賴(不需要 sharp 審批):
dsh plugin --profile web add dsh-vision-recognizer
npm 源慢時,可以指定鏡像:
dsh plugin --profile web add dsh-vision-recognizer --registry=https://registry.npmmirror.com
本地開發安裝:
dsh plugin --profile web add file:/path/to/dsh-vision-recognizer
注意必須帶 file: 前綴。裸寫 add . 或 add link: 會讓 pnpm 以符號鏈接方式安裝包,插件的 schemastery 依賴會從源碼目錄解析而找不到,導致失敗。這是 pnpm symlink 安裝的通用問題,不是插件本身的 bug。
重啓 dsh web 後,做三件事:
1、在模型選擇器選擇「DeepSeek + 智能識圖」;
2、打開 設置 → 插件 → Vision,選擇回退視覺供應商、填入 API key 並保存;
3、在對話中粘貼圖片——原生多模態選中模型直接接收原圖,純文本選中模型收到 [圖片轉譯] 結果。
選中原生多模態模型時不需要回退 key;純文本模型且既無 key 也無本地 Ollama 時,該輪對話會快速失敗並給出指引,而不是掛起。
配置入口與存儲¶
設置 → 插件 → Vision 裏可以完成全部配置:選擇供應商、填寫 API key、覆蓋 model / endpoint / token 上限 / 超時 / marker,保存後立即生效,無需重啓。
UI 保存的配置寫入 $DSH_HOME/vision-recognizer.json,啓動時合併到打包默認值之上;cordis.patch.yml 只承載出廠默認值,用戶 cordis.patch.yml 的覆蓋仍可作爲組合期回退。
有一個 patch 語義要留意:插件包自帶的 - insert: 會把這行追加進條目列表,如果你在自己的 cordis.patch.yml 裏再寫同 id(dsh-vision-recognizer)的 - insert:,適配器會被重複註冊(未定義行爲)。想覆蓋個別鍵,應寫單個頂層 - id: dsh-vision-recognizer 條目,更好的做法是直接用設置 UI。
Key 的解析順序是:UI 填寫的 key → 供應商環境變量 → $VISION_API_KEY / $DASHSCOPE_API_KEY。
另外,各供應商的默認模型只是起點,模型 id 會隨時間漂移,可在設置 UI 中覆蓋 Model。
適用範圍與已知限制¶
自適應回退只在選中「DeepSeek + 智能識圖」這條包裹路由時生效;選擇其他供應商路由會直接調用該路由。rc8 未暴露可以給所有現有路由統一加回退行爲的公共 decorator hook。
rc8 還有兩個已知限制:能力查找與已準備目標分發是分離的公共操作,在這個小窗口內被 HMR 替換的目標適配器可能與路由決策競態;嵌套的目標委託也會進入 llm/stream 瀑布(README 在該處的描述被截斷,細節以倉庫爲準)。
適用場景與安裝前注意¶
適合的人羣:
- 主要用 DeepSeek 做對話大腦,但希望隨時能貼圖的用戶;
- 想在多家識圖供應商之間隨時切換、或優先用本地 Ollama 讓圖片不出本機的用戶;
- 固定只用某一家原生多模態模型的用戶則不需要這條包裹路由,直接選擇該供應商路由即可。
安裝前注意:插件以當前 dsh 進程的權限運行,建議先到 GitHub 倉庫檢查源碼與許可證(本項目爲 MIT)再安裝。
小結¶
dsh-vision-recognizer 用一條自適應包裹路由解決了「想貼圖又不想換對話大腦」的問題:多模態模型直接收圖,純文本模型自動落到識圖轉譯,供應商可在設置裏隨時切換,本地 Ollama 開箱可用。
- 插件目錄頁:https://www.skillhub.cn/plugins/kaixinbaba/dsh-vision-recognizer
- GitHub 倉庫:https://github.com/kaixinbaba/dsh-vision-recognizer
目錄頁爲社區維護的獨立站點,與 DeepSeek / 幻方無官方從屬關係。