用 dsh-visualize 在 DeepSeek Harness 對話裏渲染交互式可視化卡片

前言

DeepSeek Harness(dsh)是 DeepSeek 開源的智能體框架,官方定位是「Everything is a Plugin」:模型、工具、技能、會話、沙箱,一直到界面,都可以用插件增刪,不必改框架源碼。日常在 Web UI 裏跟模型對話時,結果多半還是一段文字、一份 Markdown 表格,或者一張靜態的 Mermaid 圖。排序過程、參數模擬、方案對比這類內容,純文字往往要來回解釋,也不方便動手調一調。

dsh-visualize 就是衝着這件事來的。模型調用 visualize 之後,網頁對話裏會直接出現一張可交互卡片,用來做模擬器、圖表、對比面板或 UI mockup。它由 Nagi-ovo 維護,社區目錄歸在「界面增強」。本文依據插件目錄頁和 GitHub 倉庫交叉覈實後寫成。需要說明的是:DeepSeek Harness 插件庫(deepseek-harness-plugin.com)是獨立的社區目錄,與 DeepSeek / 幻方沒有官方從屬關係,不能當成官方應用商店。

這是什麼

dsh-visualize 是一款面向 DeepSeek Harness 的界面增強插件。倉庫 npm 包名爲 @dsh-external/dsh-visualize,許可證是 BSD-3-Clause,主要語言是 TypeScript。2026-08-17 從 GitHub 覈實,倉庫約 160 星;目錄頁收錄時顯示 90 星,星標以倉庫一手數據爲準。當前 package.json 版本爲 0.1.2

它解決的問題很具體:讓模型不只回答一段文字,而是把一份 HTML fragment 渲染成對話裏的沙箱卡片。用戶側通常不需要自己寫工具調用,直接告訴模型想看什麼即可;插件會註冊 visualize 工具,並附帶一份同名 skill,約定 fragment 該怎麼寫、主題變量怎麼用、哪些外部資源可以加載。

核心功能

1、對話內的交互式卡片。模型寫出 HTML fragment 後調用 visualize,Web UI 會在對話流裏插入一張可交互卡片。倉庫 README 寫明適用方向包括模擬器、圖表、對比面板和 UI mockup。捆綁 skill 把適用邊界寫得更細:有可調參數、動畫或交互時才值得出卡片;只要一張靜態節點圖就能講清楚,用 Mermaid 即可;用戶要的是真實網站、頁面組件或獨立文件時,應落到項目文件,而不是對話卡片。

2、visualize 工具與捆綁 skill。節點側把工具註冊到 ctx.tools,把 visualize skill 註冊到 ctx.skills。瀏覽器側再按同一工具名掛上沙箱卡片。當前源碼裏,默認動作是 create,把 markup 作爲 fragment 參數直接傳入,可選 titlemode;需要修正已渲染卡片時,用 action: "update",按卡片的 path 做一次精確的 old_str / new_str 替換。倉庫 README 裏曾寫成 visualize(path, title?, mode?),與當前工具實現不一致,安裝後以倉庫源碼和捆綁 skill 爲準。並排比較可以用 mode: "wide",單張圖表或整頁 mockup 保持默認的 inline

3、流式預覽與會話重放。卡片會在模型還在生成 fragment 時就開始出現。完成後的 fragment 會寫入會話工作區的 viz/ 目錄,工具結果的 meta 裏也會帶上完整 fragment。會話重放時從持久化的工具結果恢復,不依賴原始 fragment 文件還在不在磁盤上。

4、主題跟隨與沙箱隔離。卡片跟隨 DSH 的明暗主題和鯨魚藍配色。渲染髮生在不透明來源的 sandboxed iframe 中,不能接觸宿主頁面。CSP 會阻止網絡請求、嵌套頁面和表單提交,只允許從固定 CDN 加載靜態資源:cdnjs.cloudflare.comesm.shcdn.jsdelivr.netunpkg.comfonts.googleapis.comfonts.gstatic.comfonts.bunny.net。單個 fragment 默認上限是 1000000 字節,可通過配置項 maxFragmentBytes 調整。

5、非 Web 客戶端的降級。package.json 把客戶端平臺標成 web。目前只在 Web UI 中渲染交互卡片;TUI 和 headless 客戶端會顯示普通工具結果。卡片內的按鈕暫時不能向主對話發送 follow-up 消息。倉庫 README 寫明,靈感來自 Codex 桌面端的 /visualize;skill 的分層 reference 和 Chart.js 優先路線借鑑了 himself65/finance-skills 裏的 generative-ui。

安裝與啓用

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

dsh plugin add github:Nagi-ovo/dsh-visualize

倉庫 README 推薦把它裝到 web profile,因爲交互卡片只在 Web UI 裏渲染:

dsh plugin --profile web add github:Nagi-ovo/dsh-visualize
# 如果 dsh web 正在運行,重啓後刷新頁面

目錄頁提醒:如需可復現安裝,請固定 commit 哈希,把下面的 commit 換成倉庫裏的實際提交:

dsh plugin add github:Nagi-ovo/dsh-visualize#commit

安裝後可以用下面的命令確認插件已經進入最終配置:

dsh --profile web --dump-config

需要改源碼時,克隆倉庫並在倉庫目錄運行 dsh plugin --profile web add .。README 寫明構建產物已經提交,不需要額外構建。使用社區 plugin-registry(https://github.com/dsh-external/plugin-registry)的用戶,也可以從「設置 → 插件」安裝。

插件以當前 dsh 進程的權限運行,安裝時可能執行代碼。安裝前請檢查源代碼倉庫和許可證。

典型用法

裝好以後,直接用自然語言告訴模型你想看什麼。倉庫 README 給的例子是:

做一個能調參數的排序算法可視化

模型會先加載捆綁的 visualize skill,寫出一份 HTML fragment,再調用 visualize。用戶側通常看不到工具參數;如果要對照源碼理解調用方式,當前實現大致是:

  • create(默認):傳入 fragment(字面 HTML,不要帶 <html> / <head> / <body> / <!doctype> 文檔骨架),可選 titlemode
  • update:傳入已有卡片的 pathtitle,以及一次精確的 old_strnew_str 替換。skill 約定小修正才用 patch(少於 20 行、少於 5 處,同一輪最多 4 次),更大改動應重新 create
  • mode: "wide":留給需要並排比較的多面板佈局。

skill 還約定了幾條 fragment 規則,寫插件或排查渲染失敗時用得上:

  1. 只提交 fragment,由卡片負責文檔骨架、樣式表、主題和 CSP。
  2. 根元素要有唯一 ID,腳本用 document.getElementById(...) 定位,不要依賴 document.currentScript
  3. 內聯 <style><script> 可用;fetch、XHR、WebSocket 和表單提交會被策略攔住,失敗時沒有錯誤提示。
  4. 外部靜態資源必須帶固定版本,並且只允許從前面列出的 CDN 加載。
  5. 顏色使用主題變量或 light-dark(),不要自己聲明 color-scheme

適用場景與注意事項

比較適合這些情況:算法或模擬需要拖滑條看變化;幾組數據要並排對比;產品界面需要一張可點的 mockup,而不是再導出一份獨立 HTML。不太適合:只要一張靜態結構圖、真正要交付到代碼倉庫裏的頁面,以及主要在 TUI / headless 裏工作的流程。

使用時有幾條邊界需要記住。

  1. 交互卡片目前只在 Web UI 中渲染。TUI 和 headless 只會看到普通工具結果,不要指望同一套卡片出現在終端裏。
  2. 卡片內的按鈕暫時不能把消息發回主對話。需要模型根據你在卡片裏的操作繼續往下做時,還得在輸入框裏另說一句。
  3. 每次 patch 都會重載卡片,用戶在卡片裏輸入、拖動或滾動的狀態會丟掉,所以修正應儘量合併,而不是一條條改。
  4. 單個 fragment 默認不超過 1 MB。內聯大數據要先抽樣、降精度,去掉用不到的字段。
  5. 插件以當前 dsh 進程權限運行。安裝前應閱讀源碼和 BSD-3-Clause 許可證,只安裝你信任的來源;需要可復現環境時固定 commit。

小結

dsh-visualize 把「模型生成一段 HTML、Web UI 在對話裏畫出一張沙箱卡片」做成了可安裝的 DSH 插件。對經常要看模擬、圖表和對比面板的人來說,它補的是文字解釋夠不到的那一層交互,而不是再做一個獨立的前端項目。

目錄頁:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-visualize/

GitHub:https://github.com/Nagi-ovo/dsh-visualize

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

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

小夜