W
AI-Wiki

AI · 源文件

入库前的原始上传文件存档。点击左侧文件名可预览文件内容。

json-render:1.7万+ 的生成式UI框架,让AI在开发者护栏内造界面 - 今日头条.md8.8 KBit/ai/json-render:1.7万+ 的生成式UI框架,让AI在开发者护栏内造界面 - 今日头条.md
---
title: "json-render:1.7万+ 的生成式UI框架,让AI在开发者护栏内造界面 - 今日头条"
source_url: "https://www.toutiao.com/article/7687791580107588111/?log_from=4321fbac1431e_1790088360090&wid=1790088348121"
source_site: "www.toutiao.com"
clipped_at: "2026-09-22T14:45:58.181698+00:00"
clipper: "aiwiki-url-ingest"
extractor: "toutiao_rendered"
source_strategy: "normal_web_clip"
source_strategy_label: "普通网页抓取"
---

# json-render:1.7万+ 的生成式UI框架,让AI在开发者护栏内造界面 - 今日头条

![](https://p3-sign.toutiaoimg.com/tos-cn-i-axegupay5k/c3b17bf96c224555b70400eb5d2b3752~tplv-tt-origin-web:gif.jpeg?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1790693148&x-signature=zpkv6pXt4EPKMZmnKDv0wH%2Fs6b8%3D) 

# json\-render:1\.7万\+ Stars的生成式UI框架,让AI在开发者护栏内"造"界面

# 一句话定位

json\-render 是 Vercel Labs 开源的「生成式 UI(Generative UI)框架」——它把 AI 的输出严格限制在开发者预定义的组件目录(catalog)里,让大模型用自然语言生成动态、个性化界面时,依然做到安全、可预测、跨平台。简单说,AI 不负责"画"界面,只负责在护栏内产出结构化的 JSON Spec,真正的渲染交给你自己写好的组件。

# 项目档案

| 维度 | 数据 |
| --- | --- |
| 仓库名 | vercel\-labs/json\-render |
| GitHub Stars | **17,280\+**(Trending 在榜,单日 \+291) |
| Forks | 918 |
| 开源协议 | Apache\-2\.0 |
| 主语言 | TypeScript |
| 创建时间 | 2026\-01\-14 |
| 最近更新 | 2026\-09\-20(高度活跃) |
| 官网 | json\-render.dev |

# 痛点引入:直接让 AI 写界面,坑有多大

2025 年底起,随着 \[\[OpenClaw]]、\[\[Hermes Agent]] 这类对话式 Agent 普及,开发者越来越想要"让 AI 直接产出界面"——而不是在代码里手写每个组件。需求是真需求,只是实现路径错了。把 LLM 当"全栈工程师"用,翻车往往就在三个地方:

| 你让 AI 做的事 | 直接生成 UI 的后果 |
| --- | --- |
| "给我做个订单卡片" | ❌ 幻觉组件、样式崩坏,甚至注入恶意脚本(XSS) |
| "界面随后端数据变" | ❌ 输出结构不可预测,没法做流式渲染,体验卡顿 |
| "React、Vue 都要跑" | ❌ 与具体框架死绑,迁移成本指数级上升 |

根子上的矛盾是:**模型擅长"涌现",但界面要求"确定"**。把不确定性完全交给 LLM,产品就不可控。

# 核心定位:护栏 \+ AI 生成 JSON \+ 渲染器

这是 json\-render 最容易被误解、也最关键的设计哲学:

> **"AI 不写 UI,AI 只生成受约束的 JSON Spec;真正把像素画出来的是你定义的组件。"**

整个流水线只有三步:用户 Prompt → AI \+ Catalog → JSON Spec → Renderer。开发者用 defineCatalog 把"AI 能用哪些组件、能绑定哪些数据、能触发哪些动作"写成 schema(基于 zod);AI 在这个白名单里生成严格匹配 schema 的 JSON;渲染器再把 JSON 变成真实 UI。不确定性留在模型侧,确定性牢牢攥在开发者手里——既享受 AI 的灵活,又不丢工程的可靠。它和库内已有的 \[\[cua]](Computer\-Use Agent)、\[\[Open WebUI]](本地 AI 前端)、\[\[Cline]] / \[\[OpenCode]](编码 Agent)形成互补:前者负责"操控界面",json\-render 负责"生成界面",组合后即是一个能自己搭 UI 的 Agent。

这种"护栏式生成"并非 json\-render 首创,却是目前把"可控"与"好用"平衡得最干净的开源实现之一:schema 即契约,AI 在契约内自由发挥,开发者在契约外完全掌控。对强调数据主权的信创与私有化场景尤其友好——模型跑在本地 \[\[Ollama]] / \[\[vLLM]],界面边界由你亲自定义,敏感数据永远不离开内网。

# 核心功能详解

# 1\. 护栏约束:组件白名单 \+ Schema 校验

所有 AI 可生成的组件、动作、数据绑定,都先在你的 catalog 里登记。模型越界?直接被 schema 挡回。

```
import { defineCatalog } from '@json-render/core';
import { z } from 'zod';

const catalog = defineCatalog(
 z.object({
 root: z.object({ children: z.array(z.string()) }),
 elements: z.record(z.union([
 z.object({ type: z.literal('Card'), title: z.string() }),
 z.object({ type: z.literal('Metric'), value: z.number() }),
 z.object({ type: z.literal('Button'), label: z.string() }),
 ])),
 }),
 { components: ['Card', 'Metric', 'Button'], actions: ['setState'] }
);
```
# 2\. 流式渲染:SpecStream 边生成边画

json\-render 内置 SpecStream,模型每吐出一块 JSON,界面就渐进渲染一块——和 ChatGPT 打字机式输出同款体验,告别"等模型全想完才出图"。

| 能力 | 说明 |
| --- | --- |
| 流式编译 | createSpecStreamCompiler().push(chunk) 逐块解析 |
| 自动提示词 | catalog.prompt() 一键生成系统提示,喂给任意 LLM |
| 一致性 | 输出永远严格匹配你定义的 schema |

# 3\. 跨平台渲染器:一套 catalog,多端复用

同一份 JSON Spec,可渲染到完全不同的前端技术栈:

| 渲染目标 | 安装包 |
| --- | --- |
| React / Next.js | @json\-render/react、@json\-render/next |
| Vue 3 | @json\-render/vue |
| Svelte 5 / SolidJS | @json\-render/svelte / @json\-render/solid |
| React Native(移动端) | @json\-render/react\-native |
| Ink(终端 TUI) | @json\-render/ink |

更进一步,它还支持 Remotion(视频)、React PDF(发票文档)、React Email(邮件)、Satori(SVG/PNG 社交卡片)、React Three Fiber(3D 高斯泼溅场景)等"非传统 UI"输出。

# 4\. 开箱即用 \+ 动态交互

内置 36 个预构建的 shadcn/ui 组件;支持 $state、$cond、$template 等表达式做数据驱动渲染,元素可带 visible 条件显隐;组件还能触发 setState 动作,并通过 watch 字段监听状态变化联动其他动作——让"AI 生成的界面"不再是死图,而是可交互的真实应用。

# 与同类方案对比

| 维度 | json\-render | 直接 LLM 生成 JSX | 传统低代码平台 |
| --- | --- | --- | --- |
| 安全性 | 组件白名单,杜绝注入 | 不可控,易 XSS | 可控但僵化 |
| 可预测性 | JSON 严格匹配 schema | 幻觉频发 | 固定模板 |
| 跨平台 | 一套 catalog 多端渲染 | 需重写 | 受平台限制 |
| 流式体验 | SpecStream 原生支持 | 难实现 | 通常不支持 |
| 灵活性 | AI 自由组合组件 | 自由但危险 | 受拖拽组件约束 |

# 实际应用场景

- **AI 助手内嵌可视化**:让 \[\[OpenClaw]]、\[\[Hermes Agent]] 这类对话 Agent 不再只回文字,而是直接生成订单看板、数据卡片——背后由 \[\[Ollama]] / \[\[vLLM]] 本地模型驱动,数据不出内网。
- **内部工具 / 低代码搭建**:产品、运营用自然语言拉出一个管理后台,工程师只维护 catalog,迭代成本骤降。
- **批量内容生成**:用同一套 Spec 批量产出发票 PDF、营销邮件、OG 社交图、甚至 Remotion 短视频。
- **终端与 3D**:在 CLI(Ink)里渲染 TUI,或用 Three.js 实时生成 3D 场景——把"生成式 UI"的边界拉到屏幕之外。
- **IDE 内实时预览**:通过内置 MCP 接入 Claude、Cursor、VS Code,配合 \[\[Cline]] / \[\[OpenCode]] 等编码 Agent,AI 改一句需求,界面即时重渲,开发闭环大幅缩短。

# 快速上手

```
# 以 React 为例,安装核心 + 渲染器
npm install @json-render/core @json-render/react
```

```
import { Renderer } from '@json-render/react';
import { defineRegistry } from '@json-render/core';

// 把 catalog 的 spec 类型映射到真实组件实现
const registry = defineRegistry(catalog, {
 components: { Card: MyCard, Metric: MyMetric, Button: MyButton },
});

// AI 生成的 spec 直接交给渲染器
<Renderer spec={spec} registry={registry} />;
```
想接自己的大模型?调用 catalog.prompt() 拿到系统提示词,把任意 LLM 的流式输出喂给 SpecStream 即可,无需绑定 Vercel 自家服务。

值得一提,json\-render 采用 Apache\-2\.0 协议,可自由用于商业产品;核心 @json\-render/core 与各端渲染器完全解耦,意味着今天用 React、明天切 Vue,catalog 与 schema 一行都不必改——这正是"生成式 UI"相对"让 AI 直接写前端"最大的工程红利:界面资产沉淀为可复用、可审计的契约,而非散落各处的提示词黑盒。

# 信息汇总

| 项目 | 信息 |
| --- | --- |
| **GitHub** | https://github.com/vercel\-labs/json\-render |
| **官网** | https://json\-render.dev |
| **许可证** | Apache\-2\.0 |
| **适合人群** | AI 应用开发者、低代码平台团队、想给 Agent 加"可视化双手"的工程师 |
| **一句话总结** | 把 AI 关进组件白名单,让它安全地"造"界面——这是生成式 UI 在 2026 年最值得关注的可靠落地范式之一。 |