用 dsh-read-image 讓純文本 DeepSeek Harness 模型讀圖

前言

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.jsondsh.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 / GIF
  • prompt / 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 = 該值 + defaultMaxThinkingTokensreasoning_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 上限時,把 promptreasoning_efforttimeout_msmax_tokensmax_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.jsonlib/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

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

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

小夜