Skip to main content
生成式 UI 让 AI 从自然语言提示词生成完整的用户界面。AI 的输出不再是聊天气泡中的文本回复,而是直接就是 UI:表单、卡片、仪表板等等。开发者定义可用的组件(即”目录”),AI 将它们组合成有效的 UI 树。 此模式使用 json-render——生成式 UI 框架——来定义组件目录、用 AI 生成规范,并在 React、Vue、Svelte 和 Angular 中安全渲染。

工作原理

  1. 定义目录:声明 AI 可以使用哪些组件,并指定类型化的 props
  2. 向 AI 发送提示词:用自然语言描述你想要的 UI
  3. AI 生成规范:一个描述组件树的 JSON 文档
  4. 安全渲染:json-render 的 Renderer 使用你的组件渲染规范
目录充当护栏:AI 只能使用你定义的组件,props 必须匹配你的 schema。输出始终是可预测且安全的。

定义组件目录

目录描述 AI 被允许使用的每个组件。每个组件都有一个 Zod schema 来定义其 props,以及一个描述,AI 通过读取该描述来理解何时使用它:
保持目录精简。只包含 AI 在该用例中需要的组件。较小的目录比大而全的方式能产生更好的结果。

构建组件注册表

注册表将每个目录组件映射到其实际的渲染实现。使用 defineRegistry 获取目录 props 和组件函数之间的类型安全绑定:

连接到智能体

智能体使用结构化输出来返回 json-render 规范。使用你的智能体助手 ID 设置 useStream,然后从 AI 消息的 tool_calls 中提取规范:

流式渲染与渐进式显示

在流式输出期间,规范是增量构建的。元素逐个到达,最初可能缺少 typeprops。只过滤完整的元素,并向 Renderer 传递 loading={true},告诉它静默跳过尚未到达的子元素。UI 逐个组件地构建起来:
JSONUIProvider 是必需的,用于设置 json-render 的内部上下文提供者(状态、可见性、验证、操作)。Renderer 组件必须在其内部渲染。

规范格式

AI 智能体生成一个扁平的 JSON 规范,其中 root 键指向根元素,elements 映射包含所有组件:
每个元素通过 ID 引用其子元素,TextInputButton 等叶子元素具有空的 children 数组。

最佳实践

  • 使用描述性的组件描述:AI 通过这些描述来理解何时使用每个组件。清晰的描述能带来更好的 UI 生成效果。
  • 渲染前先验证:始终检查元素是否具有有效的 type 和非空的 props,因为流式输出会传递部分数据。
  • 为流式输出而设计:在流式输出期间传递 loading={true},这样 Renderer 可以优雅地处理尚未到达的子元素。用户可以实时看到 UI 的构建过程,而不必等待完整响应。
  • 使用设计令牌进行样式设置:使用 CSS 自定义属性,使渲染的组件自动适应明暗主题。
  • 用 JSONUIProvider 包裹Renderer 必须在 JSONUIProvider 内部,以访问 json-render 用于状态、可见性和操作的内部上下文。