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

工作原理

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

定义组件目录

目录描述 AI 允许使用的每个组件。每个组件有一个 Zod schema 用于其属性和一个描述,AI 通过读取描述来理解何时使用该组件:
保持目录聚焦。只包含 AI 在该用例中需要的组件。较小的目录比包含所有内容的方法产生更好的结果。

构建组件注册表

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

连接智能体

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

流式处理和渐进式渲染

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

规范格式

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

最佳实践

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