工作原理
- 定义目录:声明AI可以使用的组件,包含类型化的props
- 提示AI:用自然语言描述你想要的UI
- AI生成规范:一个描述组件树的JSON文档
- 安全渲染:json-render的
Renderer使用你的组件渲染该规范
定义组件目录
目录描述了AI被允许使用的所有组件。每个组件都有一个用于其props的Zod模式,以及一个AI读取以理解何时使用它的描述:构建组件注册表
注册表将每个目录组件映射到其实际的渲染实现。 使用defineRegistry 来获得目录props与你的组件函数之间的类型安全绑定:
连接到代理
代理使用结构化输出来返回一个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用于状态、可见性和操作的内部上下文。
将这些文档连接到 Claude、VSCode 等,通过 MCP 获取实时答案。

