前言¶
在 DSH 裏做智能體,最怕的一種體驗是:模型回答本身就該是一張表或一張曲線圖,結果它吐出來幾十行 Markdown,表格列還對不齊,圖表只能用 ASCII 湊。這不是模型能力問題,是表達通道的問題——Markdown 沒有表格對齊、沒有圖表組件、沒有可點擊的按鈕。
baitouwuya 維護的 dsh-super-cards 就是這個通道問題的解法:插件註冊一個 render_ui 工具,模型遇到對比、指標、表格、圖表、步驟、方案選擇這類結構化問題時,改用 UI 卡片輸出,渲染在對話流裏。下面介紹這個插件能做什麼、怎麼裝、怎麼用。
這是什麼¶
dsh-super-cards(中文名「超級卡片」)是一個 DSH Web 插件,零運行時依賴,已發佈到 npm,包名同樣是 dsh-super-cards。當前版本 0.14.0,在 DSH 0.2.2-rc.1(cordis 4.1.0)上實測可用,倉庫自帶的 npm test 報告 253/253 通過。許可證是 MIT,作者 baitouwuya。
它解決的問題很具體:模型輸出結構化內容時不再拼 Markdown,而是調用 render_ui 把答案渲染成卡片。卡片內容全部來自會話日誌裏記錄的 render_ui 工具調用參數,所以刷新、回放、fork 之後卡片仍然存在——這一點和臨時拼一段 HTML 的做法不同。
核心功能¶
29 種區塊¶
插件提供 29 種區塊:文本、標題、提示框、指標、表格、鍵值、列表、標籤、進度、條形圖、走勢圖、餅圖、代碼、引用、時間線、鏈接、操作按鈕、分隔線、實時計數、設置控件、流程圖/UML、樹、熱力圖、diff、看板、標籤頁、並排分欄、圖片、自定義 HTML。完整形態和上限見倉庫的 docs/zh/blocks.md。
兩種寫法¶
content:只描述材料,卡片自己挑控件、自己排版。2–3 節並排成列,4–5 節變成標籤頁。blocks:精確指定每個塊。
兩者可以混用。
四種落位¶
卡片可以落在四個位置:正文內聯(answer)、過程摺疊區(process)、輸入框上方常駐看板(dock)、回合結尾的下一步卡片(tail)。
漸進式披露¶
29 種區塊的完整 schema 不會常駐進模型上下文。render_ui 的描述裏只帶一個緊湊的區塊目錄,模型需要某個塊的精確字段時,再調用 render_ui_blocks 按需取回。
可選自動「下一步」卡¶
回合結束後,可以由一個小模型生成一張尾卡:一句回顧、一個問題、2–4 個可點選項。默認關閉,需要顯式打開。
安裝與啓用¶
已發佈到 npm,命令行安裝(profile 名以你的安裝爲準,桌面版是 desktop):
dsh plugin --profile desktop add dsh-super-cards
裝好之後重啓 DSH(或重載插件行)並刷新頁面。
另外三種方式:
- 在「插件」頁點 Add plugin,粘貼包名
dsh-super-cards。 - 用
plugin_manager的install_bundle指向本倉庫目錄,用於開發或離線安裝。 - 通過插件市場安裝:設置 → 插件市場 → 添加索引源,索引源地址如下,然後在 Discover 裏搜索
dsh-super-cards。
https://raw.githubusercontent.com/baitouwuya/dsh-super-cards/main/market/index.json
需要注意的是,這個索引源是這個插件自己的市場入口,不是 DSH 的官方市場。
典型用法¶
裝好後,直接用自然語言讓模型用卡片回答即可,不需要額外開關。下面是 README 裏給出的 render_ui 參數示例,可以直接參考:
// render_ui 的參數
{
"title": "本週發佈",
"content": {
"summary": "18 次發佈全部完成,2 次回滾已恢復。",
"metrics": [
{ "label": "發佈次數", "value": 18, "delta": "+3", "tone": "success" },
{ "label": "失敗回滾", "value": 2, "delta": "-1", "tone": "success" }
],
"actions": [{ "label": "查看日誌", "prompt": "查看本週的發佈日誌", "tone": "primary" }]
}
}
這一調用會渲染出一張標題爲「本週發佈」的卡片,含一段摘要、兩個帶漲跌標記的指標格、以及一個「查看日誌」按鈕。按鈕點擊只是把 prompt 放進輸入框,不會自動發送,用戶按 Enter 繼續追問。
配置項¶
配置寫在 profile 的 cordis.patch.yml 中 super-cards 行的 config 對象裏。三種改法效果相同,最終都寫回同一份行配置:插件頁有四項基礎配置(自動下一步、看板、默認落位、塊數上限);設置頁有完整表單,加上下游步驟的選項數、超時、最小長度、生成用的 provider 與 model,以及啓用的塊類型;也可以手寫 YAML:
- insert:
- id: super-cards
name: dsh-super-cards
config:
maxBlocks: 12
dock: true
defaultPlace: answer
blocks: [text, heading, callout, stats, table, progress]
行裏所有字段都可省略,省略即用默認值。出現未聲明的鍵會讓校驗失敗並報出鍵名,不會靜默忽略。
幾個值得注意的默認行爲:
maxBlocks默認 24,範圍 1 到 24。dock默認true;設爲false時,即使模型傳place: "dock"也會落到answer。defaultPlace默認answer,取answer、process、dock、tail之一。nextSteps默認false,顯式true纔開啓自動下一步卡。nextStepsProvider與nextStepsModel必須成對出現,只寫一個會被忽略,回退到會話路由。blocks不是隻改一處:它同時影響工具枚舉、工具描述裏的區塊目錄、校驗錯誤提示與自動排版回退。想完全禁止聯網的image塊,就在列表裏去掉它。
保存配置後不需要重啓 DSH。apply() 在掛載時讀取配置並註冊工具、提示詞與可選服務,所以重掛一次之後工具描述、塊枚舉、校驗提示都會換成新配置。已打開的頁面不需要刷新;但首次安裝或升級插件版本後仍建議刷新一次,讓 Client 半重新加載。
另外,插件隨包帶了 @deepseek-ai/schemastery 和 @deepseek-ai/cosmokit 的副本(當前 schemastery 3.19.0、cosmokit 1.9.0),因爲本地插件解析不到應用自己的 node_modules。DSH 升級後建議重新從應用包裏同步這一對包:
npm run sync:vendor
npm run sync:vendor -- "/Applications/DeepSeek Harness.app/Contents/Resources/app.asar"
同步後運行 npm test,再重載插件行。
適用場景與注意¶
適合誰:在 DSH Web 客戶端裏做助手、希望把對比、指標、表格、圖表、流程、方案選擇這類結構化回答做成卡片的開發者。它的定位是客戶端 UI 增強,不是服務器端渲染,也不是替代助手本身的推理邏輯。
幾個需要留意的地方:
- 插件以當前 DSH 進程的權限運行,能讀寫它會話內可見的數據。安裝前先看一遍源碼和 LICENSE(MIT)。
- 自動下一步卡默認關閉,開啓後每次回合結束都會額外發起一次小模型調用,超時默認 15000 毫秒(範圍 1000 到 60000),回答短於
nextStepsMinChars(默認 200 字符)不生成。 - 自動排版的分欄、標籤頁規則由卡片側決定,
blocks寫法是你要精確控制佈局時的出口。 - 環境要求 Node >= 22.19.0(見包內
engines字段)。 - 這個倉庫在社區目錄裏的分類是「客戶端」,社區目錄是獨立站點,與 DeepSeek / 幻方無官方從屬關係。
結尾¶
dsh-super-cards 做的事情不復雜:把結構化回答從 Markdown 拉進對話流的原生 UI,並保證卡片內容可隨會話日誌留存、回放和 fork。如果你已經在用 DSH 做帶指標和表格的回答,值得裝上試一下;如果只是偶爾發一段文字,那它帶來的收益有限。
目錄頁:https://www.skillhub.cn/plugins/baitouwuya/dsh-super-cards
源碼與文檔:https://github.com/baitouwuya/dsh-super-cards