前言¶
DeepSeek Harness(dsh)把智能體運行時拆成可替換的插件:模型適配、工具、會話、界面都可以掛上去或換掉,官方把它概括成「Everything is a plugin」。開發者預覽階段裏,一個很具體的摩擦很快就會碰到——主模型如果走的是純文本路由,對話框裏粘貼的截圖、報錯界面、UI 稿會被 api-proxy 的准入閘門攔下,像素進不了會話,文本模型也就無從「看」這張圖。
社區插件 dsh-read-image 針對這件事做了即插即用的補丁:不改任何 preset,把圖片放進會話、投影成 [Image #N],再由一等公民 read_image 工具配合可配置的視覺模型讀回來。本文依據社區目錄詳情頁、GitHub 倉庫 README / package.json / LICENSE,以及 DeepSeek Harness 官方倉庫 交叉覈對後整理。需要說明的是,deepseek-harness-plugin.com 是獨立運營的社區目錄,站點自身聲明與 DeepSeek / 幻方無官方從屬、背書或贊助關係,不是官方應用商店。
這是什麼¶
dsh-read-image 是一款「會話與消息」類 DeepSeek Harness 插件,由 OoWJZZoO 維護,倉庫在 github.com/OoWJZZoO/dsh-read-image,許可證爲 MIT。npm 包名爲 @deepseek-ai/dsh-read-image,當前版本 0.1.0,主要語言 JavaScript。社區目錄於 2026-08-15 收錄;截至 2026-08-18,GitHub 星標爲 3。package.json 裏 dsh.client.platform 聲明爲 web,安裝說明也圍繞 web profile。
它要解決的不是「再做一個多模態聊天窗口」,而是這三件已經寫進 README 的事:
- 純文本路由不再因爲用戶發了圖片而被攔截
- 發給文本 API 的請求裏,圖片塊被替換成
[Image #N],像素不進入文本模型 - Agent 可以按會話序號或文件路徑調用
read_image,由你配置的視覺模型把圖轉成文字描述
要求 DeepSeek Harness 0.1.0-rc.6 或更高。Harness 仍處於開發者預覽,README 寫明:更新的 release candidate 可能需要兼容性適配。
核心功能¶
文本路由放行圖片¶
用戶發送圖片時,插件包裝 llm.resolveModelInfo,讓文本路由對外聲明可以接受圖片輸入,api-proxy 的准入閘門因此放行。卸載插件時會恢復原來的聲明。能力真值表用包裝前的原始 resolveModelInfo 構建,避免把自己僞裝成「原生多模態」之後再據此做判斷。
[Image #N] 投影¶
文本路由上,模型請求裏的圖片塊會被同步替換成 [Image #N] 文本,再重新派發;像素不會進入文本 API。原生已經聲明圖片輸入的多模態路由則原樣放行。會話日誌仍是事實源:圖片引用照常持久化,替換隻發生在模型可見邊界。
一等公民 read_image 工具¶
每個會話在 session/created 時自動註冊 read_image,並遮蔽 harness 內置的同名工具。工具描述會內插當前真實默認值,Agent 不必猜配置。參數如下:
image_index:讀取會話中第 N 張圖(對應[Image #N])file_path:按路徑讀本地圖片,格式爲 PNG / JPEG / WebP / GIFprompt/reasoning_effort/timeout_ms/max_tokens/max_thinking_tokens:可選覆蓋;省略則用配置默認值
文本路由下,配置的視覺模型把圖片轉成文字描述返回;原生多模態路由下,工具直接返回圖片本身。調用是無狀態的,同一張圖可以反覆讀。
會話的基礎路由本身已經聲明圖片輸入時(README 舉例 mimo-v2.5),插件不註冊自定義工具、也不注入 [Image #N] 提示詞段。該路由下圖片直接進入模型上下文,模型看到的是 harness 內置 read_image(僅 file_path,語義是把圖片本身返回)。
設置頁與熱加載¶
側邊欄齒輪進入設置後,有一頁「讀圖」,用來選視覺模型和默認參數。配置底座是 $DSH_HOME/settings.yaml(未設置 DSH_HOME 時,Linux / macOS 爲 ~/.dsh/settings.yaml,Windows 爲 %USERPROFILE%\.dsh\settings.yaml),熱加載、不必重啓。Web 端寫入 user layer,覆蓋 yaml 裏的對應項。
瀏覽器設置協議對插件命名空間有白名單(WEB_SETTINGS_NAMESPACES),插件自己的 settings.register() 對客戶端只會得到 settings-not-exposed。因此「讀圖」頁不走這條協議,而是經 host 側 typert Remote 橋 readImageConfig.get/set 讀寫同一命名空間,headless 與 Web 共用一份配置。
啓動自檢¶
插件會探測它依賴的 harness 內部契約。任一檢查失敗時走安全失敗:不掛載任何能力,harness 照常啓動;完整診斷寫入 ~/.dsh/logs/dsh-read-image-guard.log(Windows 爲 %USERPROFILE%\.dsh\logs\dsh-read-image-guard.log),前臺只打一條短提示。關閉自檢需要在 dsh-read-image 段把 guard.enabled 設爲 false,README 標明這是自擔風險。
安裝與啓用¶
社區目錄頁給出的安裝命令如下,在 DeepSeek Harness 終端中運行:
dsh plugin add github:oowjzzoo/dsh-read-image
倉庫 README 推薦明確裝到 web profile(GitHub 用戶名大小寫爲 OoWJZZoO;GitHub 不區分大小寫,與目錄頁的 oowjzzoo 指向同一倉庫):
dsh plugin --profile web add github:OoWJZZoO/dsh-read-image
然後重啓 dsh web。本包通過 dsh.bundle 清單附帶 cordis.patch.yml,profile bundle 機制會自動合成插件行,不必手工改 patch。
如需可復現安裝,目錄頁建議固定 commit 哈希。截至 2026-08-18,倉庫 main 最新提交爲 fa0bab0b1ffbf4b0320fc43d064719ea7276543a(2026-08-15,補充 Windows 路徑說明):
dsh plugin add github:oowjzzoo/dsh-read-image#fa0bab0b1ffbf4b0320fc43d064719ea7276543a
手動安裝時,把依賴寫進 ~/.dsh/profiles/web/package.json,再在 cordis.patch.yml 插入插件行。README 給出的依賴釘在標籤 v0.1.0:
"@deepseek-ai/dsh-read-image": "github:OoWJZZoO/dsh-read-image#v0.1.0"
cd ~/.dsh/profiles/web && pnpm install
- insert:
- id: read-image
name: '@deepseek-ai/dsh-read-image'
config: {}
兩條路不要同時走:dsh plugin add 已經合成插件行,再手工加依賴並插入同一行,會把插件註冊兩次。
裝完還要給視覺模型聲明圖片輸入,並告訴插件用哪條路由、哪個模型:
# 1) 給視覺模型聲明圖片輸入能力(pi-ai 路由)
llm-pi-ai:
providers:
<your-provider>:
models:
- id: <your-vision-model>
input: [text, image]
# 2) 本插件配置
dsh-read-image:
visionProvider: <your-provider>
visionModel: <your-vision-model>
visionModel 必須聲明 input: [text, image]。也可以在 Web 的「設置 → 讀圖」裏選 provider 和模型,下拉選項來自「模型」頁。其餘鍵與 README 默認值如下:
| 鍵 | 默認值 | 說明 |
|---|---|---|
visionProvider |
空 | 視覺模型所在的路由 provider |
visionModel |
空 | 負責讀圖的多模態模型 id |
defaultPrompt |
英文分步描述提示詞(分類 → 文本逐字轉 Markdown / 視覺描述) | 未傳 prompt 時使用 |
defaultReasoningEffort |
low |
默認思考強度。low 是各主流模型普遍支持並生效的最低檔;off 在很多適配器上等於不傳該字段,對默認開思考的模型不關閉思考,思考會擠佔 max_tokens |
defaultTimeoutMs |
300000 |
視覺調用超時,5 分鐘 |
defaultMaxThinkingTokens |
4096 |
思考 token 獨立預算,不佔輸出配額;超預算導致輸出爲空時會顯式報錯 |
defaultMaxTokens |
8192 |
實際輸出上限;發給 API 的 max_tokens = 該值 + defaultMaxThinkingTokens(reasoning_effort=off 時思考預算爲 0,原樣透傳) |
guard.enabled |
true |
環境自檢;false 跳過自檢強行加載 |
典型用法¶
粘貼一張圖後,文本模型看到的是 [Image #1],由 Agent 調用工具讀回:
read_image image_index=1
讀工作區或本地文件:
read_image file_path=/path/to/image.png
Windows 上 C:\Users\... 與 C:/Users/... 兩種寫法都可以,反斜槓由 harness 文件服務處理。插件運行時是純 Node.js,README 寫明在 Windows 上原樣可用;~/.dsh 對應 %USERPROFILE%\.dsh。
需要針對這張圖提問,或臨時改思考強度、超時、token 上限時,把 prompt、reasoning_effort、timeout_ms、max_tokens、max_thinking_tokens 一併傳入即可覆蓋默認值。同一張圖可以多次調用。
適用場景與注意事項¶
適合主模型是純文本、但會話裏偶爾要看截圖、報錯界面、UI 稿或本地圖片文件的 DSH 用戶。已經在原生多模態路由上工作的會話(例如 README 提到的 mimo-v2.5)不會走 [Image #N] 投影,也用不到這套自定義工具。
使用前需要自己準備一條已聲明 input: [text, image] 的視覺模型,並填好 visionProvider / visionModel。插件複用 ctx.llm 的憑證、重試和日誌,視覺調用走的是你在 harness 裏已經配好的那條鏈路,並不是內置免費識圖服務。
目錄頁和官方插件安裝說明都強調:插件以當前 dsh 進程的權限運行,安裝時可能執行代碼。安裝前應檢查源代碼倉庫和許可證。本插件爲 MIT,源碼在上述 GitHub 倉庫;來自 GitHub 的插件在安裝時還可能跑構建腳本,只應安裝你信任的來源,需要可復現時固定 commit。
另外幾條來自 README 的邊界:
- 依賴 harness 內部契約,版本升級後形態可能變化;自檢失敗時插件不加載,不要默認「裝上就一定生效」
guard.enabled: false會跳過保險絲,只在你清楚風險時使用- 不要把
dsh plugin add和手工改package.json/cordis.patch.yml疊在一起 - 開發 / 部署腳本
scripts/*.sh是 POSIX bash,Windows 上要用 Git Bash / WSL / MSYS2,或按 README 手工拷貝package.json、lib/與cordis.patch.yml
小結¶
dsh-read-image 做的是一條很窄的橋:純文本 DSH 會話可以收下圖片,模型側只看到 [Image #N],真正識圖交給你指定的視覺模型和 read_image 工具。不改 preset,Web 設置頁可以直接改默認參數,啓動時還有一層契約自檢。
目錄頁:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-read-image/
GitHub:https://github.com/OoWJZZoO/dsh-read-image