在 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):- 校驗擴展名和附件服務支持的圖片類型。
- 通過 DSH 文件系統服務解析路徑並讀取字節。
- 調用
attachments.saveImage()保存圖片,得到ImageAttachmentRef。 - 返回供模型使用的文本摘要和規範化附件信息。
- 對頂層調用,將用戶側載荷寫入
presentationMeta。 - 對
run_code子派發,通過tools/code-dispatch-log只修改持久化日誌副本,附加結構化ImageBlock和客戶端標記。插件不創建自定義頂層 session event,以保持會話日誌兼容 DSH 的已知事件類型和回放邏輯。
-
瀏覽器端 (
client.js):- 註冊一個
ConversationNodeDefinition。 - 匹配帶有
dsh-show-imagemeta 的tool/result。 - 匹配帶有圖片載荷標記的
tool/code-dispatch。 - 使用
renderMessageImages複用 WebUI 內置圖片畫廊和燈箱。 - 以事件序號作爲節點身份,支持會話歷史回放。
- 註冊一個
限制與注意事項¶
- 路徑要求:圖片必須是 DSH 文件系統服務可讀取的本地工作區路徑。
- 部署限制:圖片仍受當前部署的附件大小、尺寸和像素限制約束。
- 歷史數據:已經寫入會話的舊事件如果沒有結構化
ImageBlock,其歷史圖片可能無法通過附件授權接口重新讀取;修復後的新發送會攜帶完整引用。
資源¶
- GitHub 倉庫:https://github.com/KureKaruna/dsh-show-image
- 生態目錄:https://www.skillhub.cn/plugins/KureKaruna/dsh-show-image