dsh-valuz-genui:让模型在 DSH 聊天中生成可交互 UI

前言

在 DSH 插件场景里,模型经常需要输出结构化的界面内容:图表、KPI 卡片、表格、表单、仪表盘。如果只让模型输出文本或代码,前端还得自己解析、渲染、处理交互;如果引入额外的嵌套模型调用,链路又会变长。

dsh-valuz-genui 的思路是:给模型提供一个 generate_ui 工具,让模型自己生成 A2UI v0.9.1 文档,浏览器在聊天内将其渲染为交互式界面。下面介绍它的定位、能力、安装方式、配置项和已知限制。

这是什么

dsh-valuz-genui 是 valuz-ai 维护的 DeepSeek Harness 插件,许可证为 MIT。它是一个 Web 客户端插件,package.json 中声明 dsh.client.platformweb

它的核心价值是:模型在一次模型回合中生成 UI,浏览器在聊天内渲染,并且不发起嵌套模型调用。它基于 valuz-genui core,使用 A2UI catalog、streaming sanitizer 和 React renderer。

核心能力

generate_ui 工具

插件给模型提供 generate_ui 工具,调用形式为:

generate_ui(messages, title?)

其中:

  • messages:模型书写的 A2UI v0.9.1 消息对象数组。
  • messagescreateSurface 在前,随后是 updateComponents / updateDataModel
  • 恰好一个组件的 idroot
  • title 可选,用作短 surface 标题。

聊天内渲染

浏览器会在聊天内将 A2UI 文档渲染为交互式界面,包括:

  • 图表;
  • KPI 卡片;
  • 表格;
  • 表单;
  • 仪表盘。

渲染发生在当前聊天上下文中,而不是额外页面或外部面板。

流式生成

模型在书写 generate_ui 参数时,浏览器会流式渲染已生成的部分。UI 作为模型自身输出实时出现,而不是一次性等待完整文档结束后再显示。

交互回传

用户在渲染界面上的点击或提交,会作为普通用户消息返回给模型。模型可以根据这些交互继续回答文本,或再次调用 generate_ui 生成更新后的界面。

校验与重放

生成文档会被校验,然后持久化到 tool/result.meta。在 reload / replay 时,插件会根据该结果重新渲染 surface。

A2UI 文档校验会丢弃 schema-invalid components,而不是让整个 surface 失败。

Authoring guide

插件通过 system prompt 与 skill 向模型提供 authoring guide。

在支持 skills 的宿主中,完整目录可以按需加载;如果没有 skill 能力,或者配置了 alwaysOnFullGuide: true,完整目录会保留在 system prompt 中。

安装与启用

基本安装

要求:

Node.js >=22.19

将插件安装到已经配置好模型的现有 profile:

dsh plugin --profile web add @valuz/dsh-valuz-genui

npm 包携带预构建 lib/,无需构建步骤或 allowBuilds 条目。

基本使用无需额外配置。

安装后验证

安装后,先重启 dsh web,再对浏览器做 hard-refresh。然后让模型生成一个图表或仪表盘,用于确认 surface 能正常出现在聊天中。

固定未发布 commit

如果需要固定一个未发布 commit,可以改用 git 安装:

dsh plugin --profile web add github:valuz-ai/dsh-valuz-genui#<commit-sha>

如果 pnpm 版本 >=10,git 依赖的 prepare build 可能需要允许后才成功。

本地开发

本地开发时,可以这样做:

git clone https://github.com/valuz-ai/dsh-valuz-genui.git
cd dsh-valuz-genui && pnpm install && pnpm run check
dsh plugin --profile web add /absolute/path/to/dsh-valuz-genui

之后按正常流程重启 dsh web 并 hard-refresh。

配置

可以在 profile 的 cordis.patch.yml 中覆盖以下配置项:

Key Default 含义
maxDocumentBytes 262144 序列化后的 A2UI 文档字节上限,包含边界。
alwaysOnFullGuide false 是否将完整目录保留在 system prompt 中,而不是通过 skill 按需加载。

如果希望完整 authoring guide 始终出现在 system prompt 中,可以设置:

alwaysOnFullGuide: true

适用场景与注意

适合谁

这个插件适合希望模型在 DSH 聊天中直接产出可交互 UI 的场景,尤其是图表、仪表盘、表单、表格这类需要用户点击或提交的界面。

安装前注意

插件会以当前 dsh 进程权限运行。安装前建议检查源码与许可证。当前已核实资料中的许可证为 MIT。

Authoring guide 成本

始终开启的 authoring guide 有 prompt 成本。

如果没有 skill 能力,或者设置了 alwaysOnFullGuide: true,完整目录会保留在 system prompt 中。模型如果猜测字段,可能导致组件被丢弃。

客户端 bundle

客户端 bundle 较大,约 3.5 MB。

主题桥接

主题桥接较粗:未完整映射 A2UI --va2-* tokens 到 host --dsw-alias-* scale。

交互路径

所有交互都通过模型往返,暂无 local-only handling。

PTC / Code Mode preset

在 PTC / Code Mode preset 下不会出现 surface。应使用 Standard preset,或 mode: both

Session events

没有 plugin-owned session events。临时 surface state 不属于 model-visible log。

宿主兼容性

peer ranges 开放,且 client bundle 手抄 dsh 模块列表。未来宿主变更可能影响加载。

已核实资料中的 peerDependencies 包括:

@deepseek-ai/cordis ^4.0.1
多个 @deepseek-ai/dsh-* 包 >=0.1.0-rc.5
React ^18.2.0 || ^19.0.0

完整 dependencies 清单未在本次已核实资料中完整给出,安装前仍建议查看仓库中的 package.json

链接

  • GitHub:https://github.com/valuz-ai/dsh-valuz-genui
  • 目录页:本次已核实资料未提供目录页 URL。
羽毛球分组比赛记分
小程序二维码

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

Xiaoye