dsh-genui:讓 DeepSeek Harness 助手回覆長出可交互界面

前言

DeepSeek Harness(DSH)把智能體能力拆成可插拔的插件,對話、工具、界面都可以按需擴展。但在默認體驗裏,模型回答大多還是純文字——表格要自己在腦子裏排版,圖表只能看 ASCII,點按鈕也沒法真的觸發下一步。

如果你希望「問一句、答一段、旁邊直接長出可排序的表格、可拖動的函數圖、能點能填的表單」,社區插件 dsh-genui 就是專門幹這件事的。它由 omdsh-dev 維護,在 SkillHub 插件庫 歸類爲客戶端插件,GitHub 倉庫約 326 stars(MIT 許可證)。需要說明的是:SkillHub 與 DeepSeek / 幻方並無官方從屬關係,只是社區整理的 DSH 插件目錄;DSH 本身則遵循「一切皆插件」的擴展理念。

這是什麼

dsh-genui 是一套面向 DeepSeek Harness 的 GenUI(生成式界面) 方案。模型在回覆裏輸出 dsh-ui 圍欄(fence),瀏覽器端渲染器把其中的 JSON 描述轉成內聯、可交互的 UI 組件——佈局、統計卡、表格、圖表、表單、測驗、Mermaid 流程圖、3D 場景等,都直接嵌在助手回答裏,文字說明不必消失。

這個倉庫一次交付三樣東西:

  1. 圍欄教學宿主插件(host plugin):讓模型學會寫 dsh-ui 規範;
  2. 瀏覽器渲染器(client half):在 Web 界面裏把圍欄變成真實組件;
  3. genui skill:可複製到 ~/.dsh/skills/genui/,幫助模型更穩定地輸出合規 JSON。

當前 npm 包名爲 @changfenhuang/dsh-genui(v0.9.2 起由舊名 @omdsh-dev/dsh-genui 更名)。

核心功能與亮點

回答即界面

組件嵌在助手回覆中,支持流式渲染——模型寫到哪、界面就出到哪,不必等整段回答結束。裝插件前你看到的是代碼塊;裝上之後同一段 JSON 會變成統計卡、趨勢圖或排序表格。

30+ 白名單組件

官方文檔列出的能力覆蓋數據展示與交互兩大方向:

  • 數據類stat 統計卡、table 可排序表格、chart / echart(ECharts 集成,引擎約 1 MB 按需懶加載)、progress 進度條;
  • 探索類plot 函數圖,參數滑塊拖動後本地即時重繪;
  • 反饋類quiz 本地判題與解析,帶 action 時答案可回傳模型;
  • 佈局與結構:卡片、標籤頁、摺疊面板、文件樹、時間線、diff 等;
  • 富媒體:瀏覽器可訪問的 http(s) 音視頻內嵌播放;
  • 圖形:Mermaid 流程圖、Three.js 3D 場景(均按需加載,不拖慢啓動)。

所有組件走白名單規格守衛:模型無法塞入任意 HTML 或腳本,函數表達式經獨立解析器處理,不使用 eval

雙通道渲染,無需改宿主源碼

插件自帶兩套渲染通道,宿主激活瀏覽器模塊後自動選擇:

  • Registry 通道:新版 dsh 提供 fence-registry 擴展點時,圍欄接入宿主流式渲染管線;
  • DOM 通道:原版 DSH 或舊構建沒有該擴展點時,插件觀察會話 DOM 自行掛載,併兼容多種代碼塊表面。

兩條通道下組件行爲、交互與持久化一致。成功激活後,瀏覽器控制檯會打印 [genui] client active; fence-channel=registry|dom

交互事件迴環

按鈕、開關、輸入框、下拉、單選、測驗等組件可攜帶 action 字段。用戶點擊或提交後,事件回傳給模型,由模型更新下一段 UI,形成閉環。同名 action 有 300ms 尾沿防抖,避免連點刷屏。

此外還有會話面板/panel 命令或 panel: true):在輸入框上方提供可拖拽調高的常駐 dock,適合放監控看板、多標籤工作區。

本地優先與安全邊界

  • 判卷、展開摺疊、表格排序等能在本地完成的操作即時完成,不必多一輪模型調用;
  • 用戶輸入按「會話 + 內容指紋」持久化,刷新後可恢復(LRU 上限 200 塊);
  • 禁止索取密碼、API Key 等祕密,密碼框即使出現也不持久化、不進表單收集;
  • 不帶 action 的按鈕渲染爲禁用態,避免「看着能點、點了沒反應」的假交互。

安裝與啓用

前置條件

  1. 本機已安裝 dsh(開源版任意構建均可);
  2. pnpm 在 PATH 上——dsh plugin 命令依賴它。若未安裝,可執行 corepack enable(或 npm i -g pnpm),然後新開終端確認 pnpm -v 有輸出。

安裝命令

在 DSH 中安裝並激活(任選其一):

# npm 公開包(無需 npm 賬號)
dsh plugin --profile web add @changfenhuang/dsh-genui

# 從 GitHub 公開源碼安裝
dsh plugin --profile web add git+https://github.com/omdsh-dev/dsh-genui.git

若你曾在 v0.9.2 之前裝過舊包名,需先遷移:

dsh plugin --profile web remove @omdsh-dev/dsh-genui
dsh plugin --profile web add @changfenhuang/dsh-genui

也可以 clone 後跑一鍵腳本:

git clone https://github.com/omdsh-dev/dsh-genui.git
cd dsh-genui
./scripts/install.sh

注意:不要用 link: 指向剛 clone、尚未 pnpm install 的目錄——link: 不會自動安裝 mermaid / three / react 等依賴,渲染器會掛。本地開發迭代應先 pnpm install,再 dsh plugin --profile web add link:$PWD

安裝完成後,重啓 dsh web 並對瀏覽器硬刷新,在新會話中驗證。

典型用法示例

60 秒冒煙測試

在新會話裏輸入:

用 dsh-ui 畫一個帶可排序服務表的統計看板。

若安裝成功,回答會原地變成儀表盤,而不是停留在代碼塊。打開瀏覽器控制檯,應看到 [genui] client active; fence-channel=registry|dom

模型輸出的圍欄長什麼樣

下面是一段官方 README 中的示例(你不需要手寫,模型會生成):

{"title":"訂單概覽","items":[
  {"type":"stat","label":"總收入","value":"¥128,430","delta":"+12.4%"},
  {"type":"stat","label":"訂單數","value":"1,024","delta":"-3.1%"}
]}

界面上會出現兩張統計卡片。若要柱狀圖,可讓模型輸出帶 echart 節點的圍欄,例如 preset: "bar"data 數組。

能力地圖速查

想試什麼 怎麼說 預期效果
數據看板 做訂單或服務監控面板 stattablechart 直接出現在回覆裏
函數探索 plot 畫帶參數的曲線 拖滑塊本地重繪,不必等模型
小測驗 出一道選擇題 本地判題 + 解析,可選 action 回傳
常駐工作區 /panel 或要求 panel: true 輸入框上方出現可調整高度的 dock

組件 JSON 完整語法見倉庫中的 SKILL.md

適用場景與注意事項

適合誰用:

  • 經常在 DSH Web 界面裏做數據分析、運維監控、教學演示的開發者;
  • 希望模型「邊講邊畫界面」,而不是反覆複製 Markdown 表格的用戶;
  • 需要按鈕、表單把用戶操作回傳給模型、驅動下一輪推理的智能體場景。

使用前請注意:

  1. 插件以當前 dsh 進程權限運行。安裝前請閱讀 GitHub 源碼 與 MIT 許可證,確認可接受其行爲。
  2. 若圍欄仍顯示爲代碼塊,先查控制檯是否有 [genui] client active 日誌;沒有則說明客戶端未真正激活,需覈對包名與 profile 配置。
  3. mermaid、three、echarts 首次使用時會按需加載插件自帶資產路由上的 JS,若加載失敗可嘗試卸掉重裝插件並更新 dsh。
  4. 不裝插件時,dsh-ui 圍欄只是普通代碼塊,不會報錯,也不污染會話——屬於「零打擾」設計。

結尾

如果你厭倦了「滿屏文字、圖表靠想象」,dsh-genui 提供了一條務實路徑:模型繼續用 JSON 描述界面,DSH 在對話流裏把它變成可點、可拖、可回傳的組件。社區目錄頁:https://www.skillhub.cn/plugins/omdsh-dev/dsh-genui;源碼與演示:https://github.com/omdsh-dev/dsh-genui;在線產品站:https://omdsh-dev.github.io/dsh-genui/

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

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

小夜