非前端开发,但显而易见的是,在AI/LLM时代,UI也迎来不少变革。
本文试图梳理网络资源,整理成个人的理解,并形成文档。
GenUI
Generative UI的简称,界面不是提前设计好的,而是由AI根据当下的需求,现场生成。不是你去找功能,而是功能来找你。
传统UI:
- 静态
- 路径是预设好的
- 用户必须先学会"这个系统怎么用"
本质是:人去适应系统。
对比传统GUI
| 维度 | 传统GUI的本质 | AI时代新范式的本质 | 颠覆性 |
|---|---|---|---|
| 交互逻辑 | 指令-操作:用户必须学习软件的逻辑(如菜单、按钮),将自身意图翻译成软件能理解的精确操作序列 | 意图-结果:用户直接用模糊、自然的方式(语言、手势、眼神)表达要什么,系统理解并执行 | 交互责任从用户转移到系统。UI不再是固定的操作手册,而是动态的意图理解器 |
| 界面形态 | 静态、一致:所有用户在同一时间看到基本相同的界面,功能被预先定义和布局 | 动态、生成、消失:界面根据当前上下文和用户意图实时生成,任务完成后可能隐去,甚至没有可见界面 | UI从空间占用(App布局)进化为时间响应(瞬间服务) |
| 用户角色 | 操作者:必须学习、记忆、遵循软件的规则 | 协作伙伴:用户是提出目标和反馈的伙伴,AI负责规划、执行和调整 | 人机关系从工具使用走向目标协同 |
CopilotKit
CopilotKit开源(GitHub,783 Star,69 Fork)GenUI示例,可用于AG-UI、A2UI、Open-JSON-UI、MCP Apps,官方文档。
WanDB-OpenUI
官网打不开,可用于替代v0等工具的开源(GitHub,22.5K Star,2.1K Fork)项目,但具备更强的灵活性和自定义选项;基于AI,用于快速构建并迭代UI原型。
特性
- 可视化UI生成
- 根据输入的描述可实时组件渲染,查看渲染效果
- 支持复杂布局和交互
- 支持自动生成响应式设计
- 框架灵活性
- 将HTML转换为React、Svelte、Vue和Web Components
- 跨框架保持组件功能
- 支持导出干净、可用于生产的代码
- 多模型支持
- 无缝切换不同LLM提供商:OpenAI、OpenAI兼容等
- 本地模型支持,保护隐私并可离线使用
- 通过LiteLLM集成自定义模型
- 会话持久化
- 支持保存和共享UI创作
- 保留版本历史,方便后续迭代跟踪
- 支持多人协作开发
实战
部署方式:
- 源码
bash
git clone https://github.com/wandb/openui
cd openui/backend
uv sync --frozen --extra litellm
source .venv/bin/activate
# Set API keys for any LLM's you want to use
export OPENAI_API_KEY=xxx
python -m openui
- Docker、Docker Compose
bash
git clone https://github.com/wandb/openui
pip install -e .
python -m openui --dev
# Docker
docker run --rm --name openui -p 7878:7878 \
-e OPENAI_API_KEY=xxx \
ghcr.io/wandb/openui
浏览器访问http://localhost:7878,
thesysdev-OpenUI
另一个高星同名开源(GitHub,8.2K Star,602 Fork)项目,官网。
组件包
| 包名 | 适用场景 | 描述 |
|---|---|---|
@openuidev/lang-core |
框架无关的解析与提示生成 | 核心解析器、提示生成、运行时评估和类型层,无React、Vue或Svelte依赖 |
@openuidev/react-lang |
React渲染运行时 | 定义组件库、生成提示,并在React中渲染流式OpenUILang |
@openuidev/react-headless |
自带React聊天UI | 无头聊天状态、流式适配器和消息格式转换器 |
@openuidev/react-ui |
最快路径的全功能React聊天体验 | 预构建聊天布局、独立UI原语和两个内置组件库 |
@openuidev/react-email |
邮件生成与HTML导出 | ReactEmail组件定义,以及面向模型生成邮件的提示选项 |
@openuidev/vue-lang |
Vue集成 | Vue3绑定,用于定义模型可渲染组件和渲染流式OpenUILang |
@openuidev/svelte-lang |
Svelte集成 | Svelte5绑定,用于定义模型可渲染组件和渲染流式OpenUILang |
@openuidev/browser-bundle |
CDN、iframe和无构建嵌入 | 预构建浏览器捆绑包,包含渲染器、UI库、React和样式,作为脚本和样式表资源提供 |
@openuidev/cli |
项目脚手架与提示生成 | CLI工具,用于创建新应用和从库定义生成系统提示或JSONSchema |
@openuidev/openclaw-os-plugin |
OpenClaw工作区 | OpenClawOS插件,用于提供OpenUI驱动的OpenClaw工作区 |
提供技能包,CC等客户端拿来即用:
bash
# 通过npx安装
npx skills add thesysdev/skills --skill openui
# 手动复制安装
cp -r skills/openui .claude/skills/openui
实战
基于源码部署安装:
bash
npx @openuidev/cli@latest create --name genui-chat-app
cd genui-chat-app
echo "OPENAI_API_KEY=sk-your-key-here" > .env
npm run dev
A2UI
随着Agent技术的发展,传统通过文本或代码生成界面的方式暴露明显不足:交互效率低、难以保证安全、不同平台一致性难以维护等问题。
A2UI,是Agent-to-User Interface Protocol的简称,官网,由Google及社区推进的开源(GitHub,15.8K Star,1.2K Fork)开放协议,旨在让Agent能够安全、通用地生成可在客户端原生渲染的复杂用户界面,从而为智能应用带来更流畅、可控和跨平台的交互体验。中文文档,。
解决问题:
- UI安全性:在以往Agent生成UI的尝试中,输出HTML/JS会带来安全风险(如包括恶意脚本等)。A2UI只允许Agent使用客户端"可信组件目录"内的组件类型,从根本上隔离安全隐患。
- 跨平台一致性:不同平台(Web、移动、桌面)使用不同UI技术栈。A2UI抽象出协议层,允许同样的界面定义在不同平台统一渲染,确保一致性并减少重复开发。
- 交互丰富性不足:文本交互难以实现复杂的用户输入或反馈(如表单选择、图表展示、地图交互等)。A2UI通过结构化组件描述,使Agent可生成更复杂、更具交互性的UI。
不是一个UI框架,而是声明式UI协议,通过JSON消息描述界面结构和状态,由客户端应用根据其本地组件库渲染成原生UI,而不是执行Agent提供的代码。与传统直接输出HTML/JS或通过iframe嵌入的方式不同,A2UI提供一种安全、可控、框架无关的UI生成路径。
工作原理
- Agent生成UI描述:Agent在执行任务时生成符合A2UI Schema的JSON对象,描述用户需要看到的内容、输入控件和操作按钮
- 客户端渲染:前端应用(Web、移动端或桌面端)接收JSON描述,并使用原生组件(如Angular、React、Flutter等)渲染UI,而无需执行Agent代码
- 用户交互:用户通过原生UI组件进行操作,Agent接收用户输入并继续生成新的UI更新,实现流式、渐进式交互
核心特性
- 安全优先:传输声明性数据(JSON),而不是可执行代码。客户端根据预先注册的组件目录决定渲染行为,从而防止不受信任代码执行与UI注入风险。
- 面向LLM生成:协议采用扁平化、可流式更新的JSON结构,方便LLM逐步生成或修正界面定义,有利于渐进式渲染和及时反馈。
- 框架无关:同一套A2UI响应可以在不同前端框架环境下渲染,如React、Angular、Flutter、SwiftUI等,客户端负责将抽象组件映射到本地原生控件。
- 渐进渲染:UI可随着Agent的生成过程逐步更新,而不是等待整个界面定义传输完成,提高响应体验。
优势
- 安全性:声明式数据而非可执行代码,避免UI注入攻击和代码执行风险
- 原生体验:无需
iframe或嵌入HTML/JS,UI继承应用样式、可访问性和性能 - 跨平台可移植性:同一JSON描述可在Web、移动端和桌面端渲染,框架无关
- 高效交互:减少传统文本对话的低效来回,如预订餐厅时,Agent可直接生成日期选择器、时间选择器和提交按钮的表单,而非多轮文本问答
- 渐进式渲染:支持流式UI更新,用户可实时看到界面构建过程
流程
- 用户向Agent发起请求
- Agent返回一系列A2UI协议消息(JSON)描述界面结构与数据模型
- 客户端根据这些消息以本地原生组件构建界面
- 用户与界面交互事件发送回Agent
- Agent根据用户操作,再次发送UI更新消息
打破传统以文本为主的交互方式,使Agent具备生成动态、互动UI的能力,而不仅限于静态文本或代码输出。
作为Agent-driven UI的交互协议,其设计原则包括:
- 将界面描述与渲染实现完全分离:Agent只负责描述UI,客户端负责渲染、样式、性能和无障碍支持等实现细节。
- 支持流式和增量更新:与传统一次性生成相比,允许Agent边生成边更新界面,有利于快速交互反馈。
- 简化模型生成难度:协议结构对大型语言模型友好,避免输出复杂或不规范的JSON。
务虚,对未来产品设计的影响
- 从静态界面设计向动态生成设计转变:产品不再由开发者手工写死界面布局,而是由Agent根据用户意图动态生成,大幅提升交互智能性与个性化体验。
- 设计策略更关注交互语义而非布局细节:因为界面由Agent以协议形式描述,设计师需关注组件语义、用户目标流程和使用场景,而非具体元素位置。
- 构建可组合的组件目录成为核心资产:客户端的"可信组件目录"决定Agent能生成哪些界面和交互。设计体系、组件库和规范需优先定义可组合单元。
- 跨平台一致性变得更容易维护:A2UI协议允许不同平台使用统一定义渲染UI,对跨平台产品开发具有重要意义,可大幅降低重复开发和维护成本。
- 安全与体验不再对立:数据而非代码的方式保障安全边界,允许Agent生成复杂交互界面,不牺牲用户体验。
A2UI特别适用于多Agent系统和分布式架构,Agent通常远程运行,无法直接操作UI,通过A2UI消息安全地传递UI描述,实现跨信任边界的交互。典型场景包括智能助理、任务管理、预订系统和企业内部Agent平台。
核心理念
A2UI围绕三个核心理念构建:
- 流式消息:UI更新作为一系列JSON消息从代理流向客户端
- 声明式组件:UI被描述为数据,而非编写为代码
- 数据绑定:UI结构与应用程序状态分离,实现响应式更新
使用四种消息类型:
surfaceUpdate:定义或更新UI组件dataModelUpdate:更新应用程序状态beginRendering:信号客户端进行渲染deleteSurface:移除UI表面
使用邻接表模型来表示组件层次结构。组件不是嵌套JSON树,而是带有ID引用的扁平列表。传统嵌套方法:
- LLM必须一次性生成完美的嵌套结构
- 难以更新深层嵌套的组件
- 难以增量流式传输
A2UI邻接表:
- 扁平结构,易于LLM生成
- 增量发送组件
- 通过ID更新任何组件
- 清晰分离结构和数据
定义按用途组织的标准组件目录:
- 布局:Row、Column、List,用于排列其他组件
- 展示:Text、Image、Icon、Video、Divider,用于显示信息
- 交互:Button、TextField、CheckBox、DateTimeInput、Slider,用于用户输入
- 容器:Card、Tabs、Modal,用于分组和组织内容
数据绑定使用JSON Pointer路径(RFC 6901)将UI组件连接到应用程序状态。这使得A2UI能够高效地定义大型数据数组的布局,或在不从头重新生成的情况下显示更新的内容。
AG-UI
Agent-User Interaction Protocol简称,官网,CopilotKit主导开源(GitHub,14.9K Star,1.4K Fork)轻量级的、事件驱动的Agent-用户交互协议,专门为把Agent接入前端应用而设计。核心功能是标准化Agent后端和前端应用的连接方式,Agent执行时发送~16种标准事件类型,前端自动渲染成实时聊天、进度提示、生成式UI,支持双向状态同步、人机协作、前端工具集成,内置中间件层兼容SSE、WebSocket、Webhook等各种传输方式,LangGraph和CrewAI官方合作集成,支持Microsoft Agent Framework、Google ADK、Pydantic AI等十几个主流框架,npx一条命令创建项目模板秒上手。官方文档。
智能体协议栈

核心优势:
- 前端自由度最大化:同一个Agent可对接Web、Mobile、CLI等不同客户端
- 实时性极强:基于流式事件,用户能看到Agent思考的每一步
- 与现有应用深度集成:Agent可驱动现有UI的状态变化
核心功能
- 极简:一条命令创建项目生成模板,不用从头配置Agent和前端的连接,抄示例就能跑
- 标准事件类型:Agent执行时发送AgentStateMessage、ToolCall、ActionRequest等事件,前端自动渲染成对应UI组件,流式聊天、进度条、确认弹窗全自动
- 双向状态同步:Agent能读取前端实时上下文(用户正在看什么页面、输入框内容),前端也能实时拿到Agent状态,不用手动写状态管理
- 生成式UI支持:Agent可动态生成React组件发给前端,聊天框里嵌入表格、图表、表单,比纯文本交互体验好10倍
- 人机协作模式:Agent遇到关键决策可请求人类确认,前端自动弹窗等待用户选择,确认后Agent继续执行
- 前端工具集成:Agent能调用前端定义的工具函数,直接操作浏览器、读取本地存储、触发页面跳转,能力无缝扩展
- 框架无关中间件;兼容SSE、WebSocket、Webhook等传输方式,松散的事件格式匹配,不同Agent框架都能接入
- 多语言SDK:提供Kotlin、Golang、Dart、Java、Rust等社区SDK,不只是前端协议,后端也能用
技术特色
- 事件驱动架构:Agent不直接调用前端API,而是发送标准事件,前端订阅事件自动更新UI,解耦度高可维护性强
- 协议层松散匹配:不要求事件格式严格一致,允许字段缺失或额外字段,不同Agent框架都能接入
- 中间件层灵活扩展:传输层、序列化、认证、日志都可插拔式替换,适配各种部署环境
- 前端上下文实时共享:Agent能拿到用户当前页面、输入内容、选中文本等实时信息,理解用户意图更准确
- A2A协议集成:AG-UI支持A2A通信协议,多Agent系统前端交互无缝对接
实际应用场景
- 开发文档助手Agent,用户在网页编辑文档时Agent实时提供建议,AG-UI把Agent的建议流式渲染到侧边栏,用户点击确认就插入内容
- 做数据分析应用,Agent跑复杂查询时用户看不到进度很焦虑,现在Agent发送ProgressMessage事件前端自动显示进度条,"正在处理第3/5步"一目了然
- 构建电商推荐Agent,Agent生成商品推荐时不只返回文本,发送生成式UI事件前端直接渲染商品卡片,点击就能加购物车
- 团队协作工具里接入Agent,Agent要删除重要数据时请求人类确认,前端自动弹窗显示操作详情等待用户决策,避免误操作
- 多Agent编排系统,LangGraph定义的工作流接入AG-UI,每个子Agent的执行状态都实时同步到前端看板,调试效率翻倍
事件类型系统
参考源码ag-ui/sdks/typescript/packages/core/src/events.ts,增加注释:
ts
export enum EventType {
// 文本消息(流式)
TEXT_MESSAGE_START = "TEXT_MESSAGE_START",
TEXT_MESSAGE_CONTENT = "TEXT_MESSAGE_CONTENT",
TEXT_MESSAGE_END = "TEXT_MESSAGE_END",
TEXT_MESSAGE_CHUNK = "TEXT_MESSAGE_CHUNK",
// 工具调用
TOOL_CALL_START = "TOOL_CALL_START",
TOOL_CALL_ARGS = "TOOL_CALL_ARGS",
TOOL_CALL_END = "TOOL_CALL_END",
TOOL_CALL_CHUNK = "TOOL_CALL_CHUNK",
TOOL_CALL_RESULT = "TOOL_CALL_RESULT",
// 思考过程(可选暴露)。已废弃,使用REASONING_START,1.0.0版本移除
THINKING_START = "THINKING_START",
// 已废弃,使用REASONING_END,同上
THINKING_END = "THINKING_END",
// 已废弃,使用REASONING_MESSAGE_START,同上
THINKING_TEXT_MESSAGE_START = "THINKING_TEXT_MESSAGE_START",
// 已废弃,使用REASONING_MESSAGE_CONTENT,同上
THINKING_TEXT_MESSAGE_CONTENT = "THINKING_TEXT_MESSAGE_CONTENT",
// 已废弃,使用REASONING_MESSAGE_END,同上
THINKING_TEXT_MESSAGE_END = "THINKING_TEXT_MESSAGE_END",
// 状态管理
STATE_SNAPSHOT = "STATE_SNAPSHOT",
STATE_DELTA = "STATE_DELTA",
MESSAGES_SNAPSHOT = "MESSAGES_SNAPSHOT",
// 活动状态,用于UI展示
ACTIVITY_SNAPSHOT = "ACTIVITY_SNAPSHOT",
ACTIVITY_DELTA = "ACTIVITY_DELTA",
RAW = "RAW",
CUSTOM = "CUSTOM",
// 生命周期:5个
RUN_STARTED = "RUN_STARTED",
RUN_FINISHED = "RUN_FINISHED",
RUN_ERROR = "RUN_ERROR",
STEP_STARTED = "STEP_STARTED",
STEP_FINISHED = "STEP_FINISHED",
REASONING_START = "REASONING_START",
REASONING_MESSAGE_START = "REASONING_MESSAGE_START",
REASONING_MESSAGE_CONTENT = "REASONING_MESSAGE_CONTENT",
REASONING_MESSAGE_END = "REASONING_MESSAGE_END",
REASONING_MESSAGE_CHUNK = "REASONING_MESSAGE_CHUNK",
REASONING_END = "REASONING_END",
REASONING_ENCRYPTED_VALUE = "REASONING_ENCRYPTED_VALUE",
}
实战
安装
bash
# 安装AG-UI核心库
npm install @ag-ui/core
# 一条命令创建AG-UI应用
npx create-ag-ui-app my-agent-app
cd my-agent-app
npm install
npm rundev
操作过程示例:

选择智能体框架

需配置LLM API Key:

执行npm run dev命令,打开浏览器访问http://localhost:3000:

同时,本地将生成如下文件(夹):

使用CopilotKit客户端,React接入示例
js
Python集成
基于pip安装:pip install ag-ui-python
LangGraph集成示例
py
from langgraph.prebuilt import create_react_agent
from langchain_openai import ChatOpenAI
from ag_ui import AGUIMiddleware
# 创建LangGraph Agent
llm = ChatOpenAI(model="gpt-4")
agent = create_react_agent(llm, tools=[...])
# 包装AG-UI中间件
ag_ui = AGUIMiddleware(agent)
# 启动HTTP服务器
ag_ui.serve(port=8000)
# 前端自动连接到 http://localhost:8000
# 支持流式输出、进度提示、人机协作
CrewAI集成示例:
py
from crewai import Crew, Agent, Task
from ag_ui import CrewAIAdapter
# 定义CrewAI团队
researcher = Agent(role="研究员", goal="收集数据")
writer = Agent(role="写手", goal="撰写报告")
crew = Crew(agents=[researcher, writer], tasks=[...])
# 集成AG-UI
adapter = CrewAIAdapter(crew)
adapter.run_with_ui(inputs={"topic": "AI趋势"})
# 前端实时显示每个Agent的执行状态
# 自动渲染生成式UI(数据表格、图表)
py
py
A2UI Composer
官网,一个由CopilotKit团队(AG-UI的主导者)构建的A2UI可视化构建工具,使用AG-UI协议与后端通信,来生成和测试符合Google A2UI规范的JSON。
聊天式生成UI界面入口

侧边栏功能菜单如下(早期版本):

当前版本:

功能
- 可视化地试验A2UI组件
- 通过描述您想要的内容生成A2UI JSON
- 查看实时预览
- 复制JSON以在代理中使用
AG-UI对比A2UI
一句话总结:
- A2UI:显示什么UI,声明式UI规范 / Payload
- AG-UI:怎么传输和交互,运行时通信协议 / Transport
核心定位与设计哲学
- A2UI:后端主导(Agent驱动)。Agent用结构化JSON描述UI组件,客户端用原生/白名单组件渲染。强调安全第一、跨平台、LLM友好。解决Agent只能输出文本的痛点,让Agent能说UI语言。
- AG-UI:前端-后端双向主导。专注于实时状态同步、事件流、工具调用生命周期。不规定UI长什么样,而是提供一个高带宽的管道,支持传输A2UI、Open-JSON-UI、MCP-UI等任意生成式UI规范。
| 维度 | AG-UI | A2UI |
|---|---|---|
| 协议类型 | 事件驱动运行时交互协议 | 声明式生成式UI规范 |
| 核心定位 | 交互传输协议:连接AI代理(后端)与用户界面(前端)的实时通信协议。参考:Microsoft代理框架、Gen UI规范、Agentic协议 | 界面声明规范:一种让AI代理用JSON数据来描述UI组件和布局的格式标准。。 |
| 主要作用 | 解决"怎么传"和"怎么连"的问题。负责在后端Agent和前端应用之间建立一个双向、实时的数据通道,用来传输消息、工具调用、状态更新等各种事件。oracle blog | 解决"传什么"和"画什么"的问题。定义了一种LLM友好、声明式的JSON格式,让Agent能"告诉"前端要渲染哪些按钮、输入框、卡片等UI元素 |
| 类比理解 | 相当于快递物流网络,负责建立连接、规划路线、实时运输包裹 | 相当于包裹里的组装说明书(JSON格式),描述收到包裹后应该拼装出什么家具(UI)。 |
| 主导方 | CopilotKit团队主导的开源协议。1 | Google发起并主导的规范,开源且社区驱动 |
另一个对比矩阵
| 维度 | A2UI | AG-UI | 谁更优? |
|---|---|---|---|
| UI生成方式 | 声明式JSON(流式JSONL),白名单组件catalog | 不规定UI格式,可传输任意spec(原生支持A2UI) | A2UI |
| 渲染方式 | 客户端原生组件渲染(React、Flutter、Angular、Lit等) | 开发者自定义渲染器(框架无关) | A2UI(跨平台) |
| 实时性 | 流式增量更新(Progressive Rendering) | 最强:16种标准事件+实时状态同步+重连机制 | AG-UI |
| 安全性 | 最高:纯声明式数据、无代码执行、无iframe沙箱 | 依赖前端实现+运行时验证 | A2UI |
| 跨平台能力 | 最强:同一JSON可在Web/移动/桌面/原生渲染 | 框架无关,但需各端单独实现渲染 | A2UI |
| 多Agent支持 | 原生支持跨信任边界(多Agent协作) | 主要单Agent,结合A2A协议可扩展 | A2UI |
| LLM生成友好度 | 极高(扁平JSON,易prompting) | 中等(事件序列) | A2UI |
| 状态管理 | 仅UI状态 | 全栈:共享状态、工具调用、HIL(Human-in-the-Loop) | AG-UI |
| 传输协议 | 可通过A2A、REST、AG-UI等任意传输 | 自身就是传输协议(SSE/WebSocket+事件流) | AG-UI |
| 风格控制 | 继承宿主App样式 | 开发者完全掌控 | 平手 |
安全性深度对比
- A2UI:安全模型最严格。只允许Agent发送预批准组件+数据,客户端渲染器映射到原生控件,彻底杜绝代码注入。适合高安全场景(如企业内部工具、金融、医疗)
- AG-UI:更灵活,但安全性依赖实现。支持敏感数据在后端处理、前端只显示脱敏视图
A2UI更适合:
- 需要跨平台一致UI的多端应用,如Web、App、Desktop
- 多Agent协作场景(Agent之间传递UI蓝图)
- 对安全要求极高的企业级 Agent 产品
- 希望 Agent "一键生成表单、卡片、向导、表格"等复杂交互
AG-UI更适合:
- 需要极致实时交互(聊天 + 工具 + 共享状态 + 长时间运行Agent)
- 已有成熟前端框架,想快速接入Agent后端
- 需要完整事件生命周期、断线重连、命令/响应追踪的场景
最佳实践:A2UI、AG-UI两者组合,AG-UI负责管道和状态同步,A2UI负责UI内容描述,既安全又实时,几乎是2026年Agent应用的事实标准。
生态与兼容性
- A2UI已集成进:CopilotKit、Flutter GenUI SDK、Angular/Lit渲染器等
- AG-UI已支持:A2UI、Open-JSON-UI、MCP-UI、自定义Schema;并与A2A、MCP协议无缝握手
CopilotKit同时是两个协议的重要贡献者和实现者,提供一站式框架。
MCP-UI
官网,开源(GitHub,5K Star,389 Fork)。
与AG-UI、A2UI不同,MCP-UI不试图定义新的协议,而是复用现有MCP协议,在工具返回值中添加UIResource字段。
Open-JSON-UI
blog。