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/

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

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

小夜