使用dsh-vision給純文本DeepSeek Harness加上view_image識圖能力

前言

DeepSeek Harness(dsh)是 DeepSeek 開源的智能體運行時,官方倉庫的定位是「一切皆插件」:工具、界面、模型適配都可以以外掛形式掛進同一套 Cordis 運行時。當前開發者預覽階段迭代很快,兼容性破壞變更是預期之內的事。

社區裏有一份獨立的插件目錄(https://deepseek-harness-plugin.com/zh-CN/plugins/),用來檢索、分類和給出安裝命令。它不是 DeepSeek / 幻方的官方應用商店,和官方倉庫沒有從屬關係。目錄按功能分成界面增強、工具與能力、模型與提供方等類別,本稿寫到 2026-08-18 時,目錄裏大約有 288 個插件。

日常用 dsh 寫代碼、看報錯、對照 UI 截圖時,會碰到一個很具體的限制:主對話模型如果是純文本的 deepseek-v4 一線,本身看不了圖。把截圖丟進會話,模型要麼拒絕,要麼只能根據文件名瞎猜。社區因此出現了不少「視覺橋」插件,思路並不完全一樣:有的在消息進入模型前把圖片轉成文字,有的註冊一套像素級工具,有的走 MCP。本稿介紹的是 william-jin-cmu 維護的 dsh-vision:它不改主模型,只註冊一個 view_image 工具,把「看圖」外包給任意 OpenAI 兼容的視覺語言模型(VLM)。

同一份社區目錄裏還有其他也叫 dsh-vision 的倉庫(例如 oil-oil、linenxi-ctrl 的同名插件),安裝地址和實現都不同。下面說的一律是目錄頁 dsh-vision-william-jin-cmu 對應的這一份。

這是什麼

dsh-vision 是一個 DeepSeek Harness 插件,由 william-jin-cmu 維護,許可證 BSD-3-Clause,主要語言 TypeScript。GitHub 倉庫是 https://github.com/william-jin-cmu/dsh-vision ,npm 包名寫成 @dsh-external/dsh-vision,當前清單版本 0.1.0。社區目錄把它歸在「界面增強」,收錄日期 2026-08-15;倉庫創建於 2026-08-05,最近一次推送是 2026-08-13。本稿覈對當天,目錄頁和 GitHub API 上的星標都是 33。

它解決的問題可以壓成一句話:純文本 DeepSeek 看不了圖,插件給運行時補一個 view_image 工具。模型帶着問題和圖片來源去調用它(OCR、數數、讀圖表、看 UI 佈局,以及任意視覺問題),插件把圖片和問題轉發到任意 OpenAI 兼容的 VLM 端點,答案以文本返回。目錄頁和 README 都寫明:裝上之後,dsh 的 web、TUI、遠程通道這些入口會同時獲得這個工具。

實現上它是原生 Cordis 插件,依賴 @deepseek-ai/dsh-tools@deepseek-ai/dsh-system-promptschemastery,用運行時自帶的 fetch 調 /chat/completions,不引入 Python、uv 或 MCP。README 說橋接形狀和 Qwen 官方 Qwen-MM-Plugins 的 vision_chat 一致:一條 image_url 加上一條文本問題。

需要先分清邊界:它不會自動把你在輸入框裏粘貼的圖片塊轉成文字再餵給主模型。工作方式是工具調用——用戶提到一張本地圖或一個 URL,模型決定調用 view_image,再根據返回的文本繼續推理。若你要的是「粘貼即識圖、消息裏的 image 塊被替換成描述」,那是另一類插件的路線,不要和這一份混用。

核心功能

根據目錄詳情頁、README 和倉庫源碼(src/index.tssrc/vlm.ts)交叉覈對,當前能力如下。

1、註冊 view_image 工具。

工具說明裏寫得很直接:看一張圖,並回答關於它的問題。參數有兩個:

  • source(必填):圖片來源,可以是本地絕對路徑、http(s) URL,或 data: URL。
  • question(可選):想從這張圖裏問什麼。不傳時,源碼默認問題是全面描述,包括可見文字原文、整體佈局和顯著細節。

系統提示裏會加一小節,告訴主模型:它自己看不見圖,但只要截圖路徑、圖片 URL、圖表、UI 稿和視覺有關,就應該調用 view_image,而且問題要具體,寧可多次聚焦調用,也不要一次問得很空。

2、把圖片交給任意 OpenAI 兼容 VLM。

本地文件會先按擴展名判斷 MIME,讀成 base64,再以內聯 data: URL 發出去;http(s) 和已有的 data: URL 原樣轉發。源碼裏支持的本地擴展名是 .png.jpg.jpeg.webp.gif.bmp.tif.tiff.heic。默認大小上限是 10 MiB(maxImageBytes,可改),超時默認 60 秒。請求會帶上工具執行的 AbortSignal,用戶取消對話時,發給 VLM 的請求也會停。

3、一套 baseURL + apiKey + model 換後端。

README 給出的常用組合如下(端點、模型名以倉庫文檔爲準,廠商價格和配額會變,這裏只轉述文檔,不當作長期報價):

  • 默認免費檔:https://open.bigmodel.cn/api/paas/v4,模型 glm-4.6v-flash
  • 同端點付費升級:glm-4.6v
  • 阿里雲百鍊兼容模式:https://dashscope.aliyuncs.com/compatible-mode/v1,文檔示例是 qwen3-vl-flash;截圖 / GUI 場景文檔建議換 qwen3.7-plus,難圖上 qwen3.8-max
  • 火山方舟:https://ark.cn-beijing.volces.com/api/v3,文檔示例是帶日期後綴的 doubao-seed-2-1-turbo-260628。短名(例如 doubao-seed-2.0-lite)按 README 會 404,可用列表要查方舟的 GET /api/v3/models
  • 離線:http://localhost:11434/v1,例如 qwen3-vl:4b,走本機 Ollama,不需要 key。
  • 預留:README 寫到 2026-08,DeepSeek 官方識圖 API 尚未開放,官方口徑是 soon;一旦上線,按文檔是改一行配置,沿用已有 DeepSeek key。

默認走智譜時,源碼還有一條免費檔降級鏈:主模型返回 429 / 404 / 5xx 時,依次試 glm-4.1v-thinking-flashglm-4v-flash。自定義了 fallbackModels 就按自定義列表走;換了非默認 baseURL 或主模型後,這條智譜降級鏈不會自動套上去。

4、密鑰、推理塊和錯誤信息的處理。

API key 的讀取順序在 README 和源碼裏一致:插件配置 apiKey → 環境變量 VISION_API_KEYDSH_VISION_API_KEY(只認已經 export 的值;文檔寫 dsh 0812 起 .env 文件裏禁止 DSH_ 前綴變量)→ ZHIPUAI_API_KEYDASHSCOPE_API_KEY。推薦寫進 ~/.dsh/.env 的名字是 VISION_API_KEYbaseURL 指向 localhost / 127.0.0.1 / ::1 時可以不配 key。錯誤信息裏的 key 會被替換成 ***。thinking 類模型夾在正文裏的推理塊會被剝掉;如果整段回覆只剩推理、沒有答案,會提示把 maxTokens 調高。文檔建議這類模型至少 maxTokens: 2048

README 還附了一組作者在 2026-08-05 對 4K 屏幕截圖問答的實測表,覆蓋智譜、百鍊、方舟、Kimi 等約 10 個模型,延遲大約從 2.9 秒到 21 秒不等。這是倉庫作者的一次全鏈路調用記錄,不是第三方評測,環境、題面和高峯限流都會影響結果,只能當選模型時的參考。

安裝與啓用

社區目錄給出的安裝命令如下,在 DeepSeek Harness 終端裏運行:

dsh plugin add github:william-jin-cmu/dsh-vision

需要可復現安裝時,按目錄頁的寫法固定 commit 哈希:

dsh plugin add github:william-jin-cmu/dsh-vision#commit

#commit 換成具體的提交哈希。官方 CLI 文檔裏,往某個 profile 裝 GitHub 插件的完整形式是 dsh plugin --profile <profile> add github:owner/repo;目錄頁這一條沒有寫 --profile,以頁面原文爲準。從 Git 源碼安裝時,pnpm 10 起可能攔截 prepare 構建腳本,第一次失敗的話,按 dsh 提示把 allowBuilds 寫進對應 profile 的 pnpm-workspace.yaml 再執行一次。

README 另外給了一種不經過插件管理器的本地掛載:把倉庫 clone 到本機,把宿主的 @deepseek-ai/dsh-toolsschemastery 鏈到插件的 node_modules,再寫入 ~/.dsh/config.yaml。文檔裏的 clone 地址寫成了 https://github.com/dsh-external/dsh-vision,覈對 GitHub API 時該地址與 william-jin-cmu/dsh-vision 是同一倉庫。README 還提到用 DSH Companion 時插件已隨應用自帶、以及可選的 dshx install / dsh registry install;這兩條只在該 README 裏出現,本稿沒有另開環境複覈,需要的話以倉庫當前文檔爲準。

目錄頁有一條安裝前必須看的說明:插件以當前 dsh 進程的權限運行,安裝時可能執行代碼。裝之前檢查源代碼倉庫和許可證。

配置與用法

倉庫給出的配置塊如下,可以寫在插件配置裏:

dsh-vision:
  baseURL: https://open.bigmodel.cn/api/paas/v4
  apiKey: "" # 留空則讀環境變量
  model: glm-4.6v-flash
  maxTokens: 2048
  timeoutMs: 60000
  maxImageBytes: 10485760

apiKey 留空時按上一節的環境變量順序讀取。源碼裏還有 fallbackModels,默認空數組;空着且仍是默認智譜端點 + glm-4.6v-flash 時,纔會啓用那條免費檔降級鏈。

推薦的密鑰寫法是在 ~/.dsh/.env 裏放:

VISION_API_KEY=你的智譜或百鍊密鑰

默認模型 glm-4.6v-flash 按 README 屬於智譜免費視覺檔,需要先到 https://open.bigmodel.cn 申請 key。沒有 key、又不是 localhost 端點時,工具調用會直接報錯,並提示去配 apiKey / VISION_API_KEY,或改成 Ollama。

README 裏的調用流程是這樣的(路徑請換成你機器上的絕對路徑):

用戶: 看下 ~/Desktop/error.png 是什麼報錯
模型 → view_image(source="/Users/me/Desktop/error.png", question="這個報錯的完整文本是什麼?")
     ← "TypeError: Cannot read properties of undefined (reading 'map') at …"
模型: 這是一個 … 建議 …

倉庫還描述過一次 dsh web + DeepSeek-V4-Flash 的實際過程:對純文本模型說桌面上有一張 images.jpeg,模型自己定位文件、帶着問題調 view_image,再把 VLM 返回的描述寫進後續回答。你在 web、TUI 或遠程通道里都可以用同樣的說法,例如:

看一下 /home/me/screenshots/fail.png,把紅色報錯原文完整抄下來,並指出是哪一行代碼拋的。
打開 https://example.com/chart.png,讀出柱狀圖裏 2025 和 2026 的數值對比。

問題寫具體,比只說「看看這張圖」更有效。這是插件系統提示裏的建議,也符合工具本身「回答問題、不只做配圖說明」的設計。

換後端時,改的是同一組字段。例如改用本機 Ollama:

dsh-vision:
  baseURL: http://localhost:11434/v1
  apiKey: ""
  model: qwen3-vl:4b

改用百鍊:

dsh-vision:
  baseURL: https://dashscope.aliyuncs.com/compatible-mode/v1
  apiKey: ""
  model: qwen3-vl-flash

百鍊密鑰可以放在 DASHSCOPE_API_KEY,也可以統一用 VISION_API_KEY

適用場景與注意事項

比較適合這些情況:

  • 主模型是純文本 DeepSeek,但日常要看報錯截圖、終端輸出、UI 佈局、圖表或掃描件。
  • 希望識圖後端可替換:雲端免費檔、百鍊 / 方舟付費線、或本機 Ollama,用同一套工具接口。
  • 希望 web、TUI、遠程通道共用一個 view_image,而不是隻在某一個界面裏生效。

使用前有幾條需要當作約束,而不是可選項。

第一,插件以當前 dsh 進程的權限運行。view_image 會按給定的絕對路徑讀本地文件,安裝和運行都可能執行代碼。裝之前看源碼和 BSD-3-Clause 許可證;生產環境把 GitHub 來源釘在某個 commit 上。

第二,默認路徑會把圖片發到第三方 VLM。本地文件被編成 base64 後,POST 到你配置的 baseURL。桌面截圖、客戶單據、含密鑰的報錯頁,都會離開本機。只有把 baseURL 指到 localhost(例如 Ollama)時,圖片纔不必出機器。選雲端還是本地,等於在選數據邊界。

第三,這是工具調用,不是多模態主模型。主模型仍然看不見像素;它能「看」的只有 VLM 返回的那段文本。描述質量、OCR 對錯、圖表讀數,都取決於你選的視覺模型和提問方式。主模型如果沒調用工具,插件不會在後臺自動掃圖。

第四,目錄裏同名插件很多。dsh-visiondsh-vision-routerdsh-vision-toolkitdsh-vision-proxydsh-vision-bridge 不是同一個項目。安裝命令必須帶上 william-jin-cmu/dsh-vision 這一段,不要只搜名字隨便裝一個。

第五,免費檔會限流。智譜免費模型走公共容量池,429 時默認配置會降級到更老的免費視覺模型,細節會變少。高峯不穩定就換付費線、百鍊或本地模型。方舟模型 ID 帶日期後綴,短名 404 是文檔裏寫過的坑。

第六,dsh 本身仍是 developer preview,插件聲明的引擎下限是 dsh >= 0.0.1。宿主升級後工具註冊方式、profile 佈局或 .env 變量規則都可能變,以當時的 dsh 文檔和插件 README 爲準。

小結

dsh-vision 做的事情很窄:給看不了圖的 DeepSeek 補一個 view_image,把視覺問題交給任意 OpenAI 兼容 VLM,再把文本答案交回智能體循環。維護者是 william-jin-cmu,許可證 BSD-3-Clause。社區目錄的安裝命令是 dsh plugin add github:william-jin-cmu/dsh-vision

它解決的是「純文本模型 + 需要看圖」這一種組合,並不把 dsh 變成原生多模態客戶端,也不會替你保管圖片隱私。裝之前看源碼、選好 VLM 端點、把密鑰和體積限制配清楚,比先追求「有視覺」更要緊。

目錄頁:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-vision-william-jin-cmu/

GitHub:https://github.com/william-jin-cmu/dsh-vision

DeepSeek Harness 官方倉庫:https://github.com/deepseek-ai/deepseek-harness

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

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

小夜