工作原理
- 定义目录:声明 AI 可以使用的组件,并指定其带类型的属性。
- 向 AI 提供提示:用自然语言描述你想要的 UI。
- AI 生成规范:生成一个描述组件树的 JSON 文档。
- 安全渲染:json-render 的
Renderer使用你的组件来渲染该规范。
定义组件目录
目录描述了 AI 允许使用的每一个组件。每个组件都有一个用于定义其属性的 Zod 模式,以及一个供 AI 读取以理解何时使用该组件的描述:构建组件注册表
注册表将目录中的每个组件映射到其实际的渲染实现。使用defineRegistry 可以在目录属性和你的组件函数之间获得类型安全的绑定:
连接到智能体
智能体使用结构化输出来返回一个 json-render 规范。使用你的智能体的助手 ID 设置useStream,然后从 AI 消息的 tool_calls 中提取规范:
流式处理和渐进式渲染
在流式处理过程中,规范是逐步构建的。元素逐个到达,最初可能缺少type 或 props。过滤出仅包含完整元素的部分,并将 loading={true} 传递给 Renderer,这会告诉它在子元素尚未到达时静默跳过。UI 会逐个组件地构建起来:
JSONUIProvider 是必需的,用于设置 json-render 的内部上下文提供者(状态、可见性、验证、操作)。Renderer 组件必须在其中渲染。规范格式
AI 智能体生成一个扁平的 JSON 规范,包含一个指向根元素的root 键和一个包含所有组件的 elements 映射:
TextInput 和 Button 这样的叶子元素具有空的 children 数组。
最佳实践
- 使用描述性的组件说明:AI 使用这些说明来理解何时使用每个组件。清晰的说明能带来更好的 UI 生成效果。
- 渲染前进行验证:在将元素传递给 Renderer 之前,始终检查它们是否具有有效的
type和非空的props,因为流式传输提供的是部分数据。 - 为流式处理设计:在流式处理期间传递
loading={true},以便 Renderer 优雅地处理尚未到达的子元素。用户可以实时看到 UI 的构建过程,而不是等待完整响应。 - 使用设计令牌进行样式设计:使用 CSS 自定义属性,以便渲染的组件能自动适应浅色和深色主题。
- 用 JSONUIProvider 包裹:
Renderer必须位于JSONUIProvider内部,才能访问 json-render 用于状态、可见性和操作的内部上下文。
Connect these docs to Claude, VSCode, and more via MCP for real-time answers.

