前言¶
在 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