前言¶
DeepSeek Harness(命令是 dsh)是 DeepSeek 開源的智能體運行時,目前仍是開發者預覽版。官方倉庫把設計概括成一句話:Everything is a Plugin——模型、工具、技能、會話、沙箱、存儲、循環、調度,一直到界面,都可以用插件增刪,不必改框架源碼。啓動 Web 界面的官方入口是:
npx @deepseek-ai/dsh web
真正對着網頁會話提問時,另一個缺口很快出現:回答多半還是一段文字、一張 Markdown 表格,或者一塊靜態代碼。問「這個月訂單怎麼樣」,模型會給出收入、環比、轉化率,但趨勢圖、統計卡、刷新按鈕都不會出現在回覆裏。想再看一眼,只能再打一段字。
dsh-genui 就是衝着這件事來的。模型把界面描述寫成 JSON,放進 dsh-ui 圍欄;瀏覽器端渲染器把它畫成卡片、圖表、表單、測驗,組件就嵌在回答中間。點刷新、拖滑塊、交卷,有的交互本地立刻完成,需要模型參與的會回傳,再更新同一塊界面。
本文按社區目錄詳情頁、GitHub 倉庫 README / SKILL.md / package.json / CHANGELOG.md,以及 DeepSeek Harness 官方倉庫 交叉覈對後整理。需要先說明一點:下文提到的插件目錄站點 deepseek-harness-plugin.com 是獨立的社區目錄,與 DeepSeek / 幻方沒有官方從屬關係,不能當成官方應用商店。
這是什麼¶
dsh-genui 是一款面向 DeepSeek Harness Web 界面的界面增強插件,由 GitHub 組織 omdsh-dev 維護,倉庫地址:https://github.com/omdsh-dev/dsh-genui 。npm 包名爲 @omdsh-dev/dsh-genui,許可證 MIT,主要語言 TypeScript。倉庫掛了 dsh、dsh-plugin 兩個 topic。社區目錄把它歸在「界面增強」,收錄日期 2026-08-15。
截至 2026-08-17,GitHub 倉庫約 147 星;目錄頁當時顯示 88 星。星標以倉庫一手數據爲準。當前 package.json 版本爲 0.8.6(CHANGELOG 標註日期 2026-08-16)。package.json 裏的 dsh.client.platform 爲 web,也就是說它掛在網頁會話上,不是終端 TUI。
它解決的問題很具體:讓助手回覆不只是文字。模型輸出一份白名單 JSON,渲染器在圍欄所在位置畫出真實組件;不裝插件時,這段圍欄只是普通代碼塊,不報錯,也不污染會話。倉庫同時帶三樣東西:教模型寫圍欄的宿主插件、瀏覽器端渲染器,以及一份可複製到技能目錄的 SKILL.md。
核心功能¶
回答即界面¶
組件嵌在回覆裏,不是單獨一張工具卡片。README 的對比很直接:普通回答是「本月收入 ¥128,430,環比 +12.4%,建議關注轉化率」;裝上插件後,同一段分析旁邊會渲染統計卡、趨勢圖、進度條。圍欄一閉合就開始渲染,不必等整段回覆寫完。
模型輸出的圍欄長這樣(寫給瀏覽器看的,日常使用不必手寫):
{"title":"訂單概覽","items":[
{"type":"stat","label":"總收入","value":"¥128,430","delta":"+12.4%"},
{"type":"stat","label":"訂單數","value":"1,024","delta":"-3.1%"}
]}
渲染結果是兩張統計卡片。delta 以 - 開頭顯示爲紅色,以 + 開頭顯示爲綠色。
雙通道渲染¶
插件自帶兩套渲染通道,啓動時自動選擇,不綁定某一個 dsh 構建:
- Registry 通道:宿主提供
fence-registry擴展點時,圍欄走宿主流式渲染管線。 - DOM 通道:宿主沒有該擴展點時(包括原版 DSH 與部分舊構建),插件觀察會話 DOM,自行掛載渲染樹。自 0.7.2 起 DOM 通道支持流式渲染:模型寫到哪,組件就出現到哪。自 0.8.3 起圍欄發現是多表面的,同時匹配標準
md-code-block、部分宿主使用的.code-block/.code-block-small,並以 banner 標註dsh-ui的結構做兜底。
兩條通道上,組件、交互、面板和持久化行爲一致。CHANGELOG 0.8.6 還修了原版 DSH 0.1.0-rc.6 上因硬注入 inputTriggers 導致圍欄靜默不渲染的問題:該項改爲可選訂閱,缺服務時只是不註冊 /panel,渲染本身不受影響。
三十多種組件¶
SKILL.md 把允許的 type 列成一張白名單,模型不能另起爐竈。按用途大致是:
- 佈局:
text、row、col、grid、card、divider、spacer - 展示:
stat、badge、progress、list、table、keyvalue、timeline、file-tree、diff、json、code、callout、steps等 - 圖表:
chart(柱狀 / 折線 / 環形)、plot(數學函數圖,參數滑塊可即時重繪,可選自動動畫) - 交互:
button、input、select、checkbox、radio、switch、textarea、tabs、accordion、copy、submit等 - 高級:
mermaid(流程圖、時序、甘特等)、scene3d(少量 mesh 的 3D 場景)、quiz(點選判題、解析、重試)
表格表頭點擊可本地排序;文件樹目錄可本地摺疊。這些都不走模型。
本地優先,再回傳模型¶
文檔把交互分成兩層。UI 自己能做的事——判卷、判題、重置、展開、選中——一律本地即時完成。action 只留給必須模型參與的步驟:生成新內容、執行工具、給下一步建議。
具體約束來自 README 和 SKILL.md:
- 交互組件必須帶
action。不帶的按鈕渲染爲禁用態,避免「看着能點、點了沒反應」。 - 帶
action的按鈕點擊後立刻顯示「已觸發」。這隻證明本地事件已經發出,不代表模型已經收到。 - 按鈕、開關、輸入、下拉、複選、單選、文本域、測驗帶
action時,點擊或失焦會回傳模型,模型再更新界面。同名 action 做 300ms 尾沿防抖,連點合併爲一次,最後一次的值生效。 - 多道選擇題可以做成卷子:每題一個帶
group、answer、explanation的radio,最後放一個submit。用戶全部選完再點一次,分數、對錯和解析當場出現,零模型往返;題目隨後鎖定。「重新作答」在本地重置,可選resetAction通知模型。 - 答案、交卷鎖定、輸入值按「會話 + 內容指紋」保存,上限 200 塊 LRU。刷新或重開會話,同一塊 UI 的狀態會恢復;內容變了則從頭開始。
- GenUI 不得索取密碼、API Key、訪問令牌、恢復碼等祕密。即使出現密碼輸入,也保持打碼,不持久化,不進入表單收集。
工具通道和會話面板¶
圍欄適合「回答裏的界面」。交付物型 UI 可以走 render_ui 工具,把同一份 spec 畫成工具行卡片。
會話面板是輸入框上方的常駐區域:render_ui 或 panel: true 的圍欄會原地更新同一塊表面。客戶端命令:
/panel:打開面板/panel <指令>:把定製需求轉給模型/panel clear:清空
頂邊框可拖拽調高。append: true 做增量合併:同名標籤頁追加內容,新標籤頁新增。整面板默認最多 200 個節點、200 條追加,到上限後模型應發送 replace 重建。0.8.6 在面板頭部加了關閉按鈕,效果與 /panel clear 相同。
規格守衛和體積¶
每個圍欄會過一遍規格守衛:壞節點靜默丟棄,數值鉗位,字符串截斷。整棵組件樹上限是 200 個節點、8 層嵌套。SKILL.md 還要求 JSON 必須嚴格合法:插件只修字符串內半角引號、尾隨逗號這類標點級小錯;缺括號、錯括號等結構錯誤不修,直接退化成帶紅橫幅的代碼塊。
mermaid 渲染失敗會先自動修復再試(剝反引號、給含中文或空格的標籤加引號),仍失敗才降級顯示源碼。組件是白名單,模型塞不進 HTML 或腳本;函數表達式走獨立解析器,不用 eval。
主渲染包約 110 KB(minify)/ 28 KB(gzip)。mermaid 和 three.js 單獨打成按需資產,首次用到時經插件自注冊的 HTTP 路由加載,啓動時只下載渲染核心。
安裝與啓用¶
社區目錄頁給出的安裝命令是:
dsh plugin add github:omdsh-dev/dsh-genui
如需可復現安裝,目錄頁建議固定 commit 哈希:
dsh plugin add github:omdsh-dev/dsh-genui#<commit>
把 <commit> 換成倉庫裏實際的提交哈希。插件以當前 dsh 進程的權限運行,安裝時可能執行代碼,安裝前應檢查源代碼倉庫和許可證。
維護者 README 寫的是 Web profile 上的 git URL 安裝(公開倉庫,不需要 npm 賬號)。當前 package.json 標明 npm 包尚未作爲安裝主路徑,FAQ 也寫明 @omdsh-dev/dsh-genui 在 npm 上會 404。若目錄頁那條命令沒有把插件裝進網頁會話,按 README 使用下面這條:
dsh plugin --profile web add git+https://github.com/omdsh-dev/dsh-genui.git
前置條件有兩條,缺一不可:
- 已經安裝 dsh。開源版任意構建都可以,插件啓動時會自己選渲染通道。
pnpm在PATH上,dsh plugin依賴它。沒有就執行corepack enable或npm i -g pnpm,然後新開一個終端,確認pnpm -v有輸出。
package.json 還聲明瞭運行環境:Node.js ^22.19.0 || >=24.0.0,pnpm >=11.7.0 <12;一組 @deepseek-ai/dsh-* peer 依賴對齊 ^0.1.0-rc.6,Cordis 爲 @deepseek-ai/cordis@^4.0.1。
不要對剛 clone 下來、還沒裝依賴的目錄使用 link:。README 寫明 link: 不會安裝 mermaid / three / react,裝完渲染器會壞。本地開發迭代才用:
cd dsh-genui
pnpm install
dsh plugin --profile web add link:$PWD
clone 後也可以跑倉庫裏的一鍵腳本,它會檢查 dsh、pnpm 和倉庫可達性,再按 git URL 安裝,並把 SKILL.md 同步到技能目錄:
git clone https://github.com/omdsh-dev/dsh-genui.git
cd dsh-genui
./scripts/install.sh
默認裝進 web profile;./scripts/install.sh tui 可以指定別的 profile 名。裝完後重啓 dsh web,瀏覽器硬刷新(macOS 上是 Cmd+Shift+R),在新會話裏說「用 dsh-ui 畫個統計看板」做驗證。也可用 dsh plugin --profile web list 確認列表裏有本插件。
典型用法¶
讓模型主動出圍欄¶
新會話在重啓後纔會帶上插件教給模型的圍欄詞彙。如果模型仍只回文字,直接說「用 dsh-ui 輸出」即可。SKILL.md 也可以複製到 ~/.dsh/skills/genui/(安裝腳本還會同步到 ~/.agents/skills/genui/),用來增強模型對組件語法的遵循。
倉庫的 demo-prompts.md 提供了四幕演示腳本,用來展示佈局與數據、交互組件、函數圖 / 測驗 / mermaid / 3D,以及點擊按鈕後模型更新面板的事件循環。日常使用不必按腳本走,它更適合對照 README 裏的演示視頻看能力邊界。
事件循環怎麼轉起來¶
第四幕的官方示例是一塊「服務器監控面板」:四個統計卡、自動刷新開關、刷新按鈕、環境選擇。按鈕和選擇器都帶 action。用戶點「刷新數據」或切換環境後,模型收到 [genui-action],再用新的 dsh-ui 圍欄更新數值。這是文檔裏寫明的雙向互動,不是額外裝的工作流插件。
常見故障¶
README 的 FAQ 把幾類現象寫死了,安裝後可以對着查:
- 顯示成代碼塊:確認當前 dsh 構建能走 fence-registry 或 DOM 通道兜底;
dsh plugin --profile web list裏有本插件;已經重啓並硬刷新。 - 渲染圍欄時聊天界面白屏:dsh 版本過舊,先更新 dsh 再重裝插件。
dsh: pnpm not found on PATH:裝好 pnpm 後新開終端再試。- 安裝卡在 git 憑據或 404:倉庫是公開的,git URL 不需要登錄;對
@omdsh-dev/dsh-genui的 404 表示 npm 包尚未發佈,應改用 git URL。 - scene3d / mermaid 不渲染:這兩個引擎按需加載(
/plugins/@omdsh-dev/dsh-genui/assets/*.js)。先重啓並硬刷新;仍不行就卸掉重裝:
dsh plugin --profile web remove @omdsh-dev/dsh-genui
dsh plugin --profile web add git+https://github.com/omdsh-dev/dsh-genui.git
舊版宿主缺少資產路由時會降級顯示源碼或加載失敗提示,更新 dsh 即可。
適用場景與注意事項¶
適合已經在用 DeepSeek Harness Web UI、希望回答裏直接出現結構化界面的人。比較對口的內容包括:指標看板、方案對比表、流程 / 步驟、測驗與本地判卷、函數曲線演示、少量 3D 幾何說明。SKILL.md 的判斷口訣是:換成結構化組件會不會比純文字更好掃、更好懂、更好操作;會就用,不必等用戶開口要 UI。一句話能說清的事、純閒聊、用戶明確不要 UI,以及跟內容無關的 3D 炫技,文檔要求別用。
使用前注意這幾條:
- 權限與來源。目錄頁寫明:插件以當前 dsh 進程的權限運行,安裝時可能執行代碼。安裝前檢查 GitHub 源碼和 MIT 許可證;生產環境建議固定 commit。該目錄不是 DeepSeek 官方商店,收錄不等於背書。
- 只覆蓋 Web。
package.json聲明platform: web。終端 TUI、無界面的 headless 運行不是它的目標。 - 依賴 pnpm 和較新的 dsh。缺 pnpm 裝不上;過舊的宿主可能白屏,或缺少 mermaid / three 的資產路由。
- 規格上限。整樹不超過 200 節點、8 層嵌套,超出會被裁掉。複雜 spec 可先走
validate_dsh_ui工具(SKILL.md要求:不少於 3 個組件或含長表格時先驗後發)。 - 不要收集祕密。插件規範禁止在 GenUI 裏要密碼和密鑰;即便界面裏出現了密碼框,也不會持久化、不會進表單收集。
- 不要用
link:走捷徑。剛 clone 的目錄沒有依賴,渲染器會壞。公開安裝用 git URL;本地開發先pnpm install再 link。
小結¶
dsh-genui 把「回答」從純文本擴成可交互界面:模型寫 dsh-ui 圍欄,瀏覽器按白名單把 JSON 畫成組件。雙通道渲染讓原版 DSH 和新構建都能用;本地優先的交互避免無意義的模型往返;事件循環則把刷新、篩選這類操作接回智能體。它是社區 MIT 項目,不是官方內置功能。
目錄頁:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-genui/
GitHub:https://github.com/omdsh-dev/dsh-genui