dsh-show-image:在 WebUI 中直接發送工作區圖片

在 DeepSeek Harness (DSH) 的開發過程中,讓模型向用戶展示本地工作區生成的圖片(如渲染圖、分析圖表)是一個常見需求。傳統的做法通常需要用戶手動複製粘貼或通過其他方式上傳,體驗較爲割裂。dsh-show-image 插件通過註冊模型工具,將工作區的圖片直接掛載到 DSH WebUI 的對話流中,以畫廊和燈箱的形式呈現。

插件簡介

該插件由 KureKaruna 維護,採用 MIT 許可證。它通過註冊 show_image 工具,將 DSH 文件系統中的圖片文件轉化爲對話附件,並確保瀏覽器端能夠正確渲染和預覽。

安裝與啓用

將倉庫安裝到指定的 DSH profile:

dsh plugin --profile test add https://github.com/KureKaruna/dsh-show-image.git

也可以使用本地路徑安裝:

dsh plugin --profile test add C:/path/to/dsh-show-image

安裝後重啓 DSH WebUI,使宿主端和瀏覽器端插件一起加載。插件通過 cordis.patch.yml 自動加入 profile bundle。

核心功能

  • 工具註冊:註冊模型工具 show_image,供模型在對話中調用。
  • 格式支持:支持 PNG、JPEG、WebP、GIF 格式的圖片。
  • 持久化存儲:從 DSH 文件系統服務讀取工作區文件,並保存到持久化附件庫。
  • WebUI 渲染:在用戶的 WebUI 會話中渲染圖片畫廊,支持燈箱預覽。
  • 參數支持:支持可選的 caption 參數,用於爲圖片添加說明。
  • 上下文隔離:圖片字節不會作爲圖片內容發送到模型上下文,僅作爲引用發送,避免不必要的 token 消耗。
  • 結構化引用:使用結構化 ImageBlock 作爲會話附件引用,確保瀏覽器可以通過會話附件接口讀取圖片。
  • 兼容性:兼容頂層原生工具調用和 run_code 子派發。

典型用法

用戶可以直接在對話中提出請求,例如:

把工作區裏的 render.png 發給我看看。

模型會調用如下工具:

{
  "file_path": "C:/path/to/render.png",
  "caption": "本次渲染結果"
}

圖片隨後會作爲獨立的聊天節點顯示在 WebUI 中。file_path 必須指向當前 DSH 文件系統可訪問的圖片文件。

工作原理

插件分爲宿主端和瀏覽器端兩部分實現:

  • 宿主端 (index.js):

    1. 校驗擴展名和附件服務支持的圖片類型。
    2. 通過 DSH 文件系統服務解析路徑並讀取字節。
    3. 調用 attachments.saveImage() 保存圖片,得到 ImageAttachmentRef。
    4. 返回供模型使用的文本摘要和規範化附件信息。
    5. 對頂層調用,將用戶側載荷寫入 presentationMeta。
    6. 對 run_code 子派發,通過 tools/code-dispatch-log 只修改持久化日誌副本,附加結構化 ImageBlock 和客戶端標記。插件不創建自定義頂層 session event,以保持會話日誌兼容 DSH 的已知事件類型和回放邏輯。
  • 瀏覽器端 (client.js):

    1. 註冊一個 ConversationNodeDefinition。
    2. 匹配帶有 dsh-show-image meta 的 tool/result。
    3. 匹配帶有圖片載荷標記的 tool/code-dispatch。
    4. 使用 renderMessageImages 複用 WebUI 內置圖片畫廊和燈箱。
    5. 以事件序號作爲節點身份,支持會話歷史回放。

限制與注意事項

  • 路徑要求:圖片必須是 DSH 文件系統服務可讀取的本地工作區路徑。
  • 部署限制:圖片仍受當前部署的附件大小、尺寸和像素限制約束。
  • 歷史數據:已經寫入會話的舊事件如果沒有結構化 ImageBlock,其歷史圖片可能無法通過附件授權接口重新讀取;修復後的新發送會攜帶完整引用。

資源

  • GitHub 倉庫:https://github.com/KureKaruna/dsh-show-image
  • 生態目錄:https://www.skillhub.cn/plugins/KureKaruna/dsh-show-image
羽毛球分组比赛记分
小程序二维码

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

小夜