AI 智能体只能发文字?A2UI 协议打破这一限制,让智能体通过 JSON 描述生成丰富 UI。本文详解核心原理、实战案例和常见问题,带你快速上手。
1、概述
A2UI(Agent-to-User Interface)是由 Google 推出的开放标准协议,专门用于解决 AI 智能体与用户界面之间的交互问题。传统上,智能体只能通过文本与用户沟通,而 A2UI 使智能体能够生成结构化的 UI 描述(通过 JSON 格式),让智能体真正"用界面说话"。
通过 A2UI,智能体可以动态生成表单、图表、按钮等交互式 UI 组件,客户端应用则将这些描述渲染为原生界面元素。这种设计既保证了安全性(不执行任意代码),又提供了丰富的表达能力,让 AI 驱动的应用能够提供更直观、更强大的用户体验。
A2UI 渲染卡片图库,展示了 A2UI 可以实现的各种 UI 组合。A2UI 目前版本为 v0.8(公开预览版)。
2、核心价值
生成式人工智能擅长生成文本和代码,但智能体在向用户呈现丰富、交互式的界面时可能面临困难,尤其是在这些智能体处于远程环境或运行于不同信任边界之间时。
A2UI 使智能体能够"用 UI 说话"。采用声明式 JSON 格式来描述用户界面,将 UI 的生成(智能体端)与渲染(客户端)完全解耦。客户端应用则利用自身原生的组件库(如 Flutter、Angular、Lit 等)对该描述进行渲染。
这种设计让 AI 智能体能够生成丰富、交互式的用户界面,同时保证了安全性和跨平台兼容性。智能体生成的用户界面既像数据一样安全,又像代码一样富有表现力。
凭借创新的技术架构与灵活的应用特性,A2UI 正在工业制造、智慧城市、能源管理、智慧医疗和数字政务等领域加速应用。 PART 03****核心特性 A2UI 旨在应对智能体生成的用户界面在互操作性、跨平台性以及生成式或模板化 UI 响应方面的特定挑战,其核心特性包括:
- 🔒 安全优先
规避 LLM 生成的任意代码的风险,采用声明式数据格式,客户端仅加载预置的可信组件(例如: Card, Button, TextField),从源头实现安全管控。
- 🤖 对 LLM 友好且支持增量更新
UI 表示为带 ID 引用的扁平组件列表,便于 LLM 逐步生成,支持渐进渲染、快速响应,并可高效局部更新。
- 🌐 框架无关且可移植
将 UI 结构与 UI 实现解耦,智能体仅发送组件树描述与数据模型,客户端负责映射到原生控件——无论是 Web组件、Flutter Widget、React 组件、SwiftUI 视图,还是其他任何技术栈。同一份 A2UI JSON 数据可在不同框架的多个客户端上渲染。
- 🔧 灵活性
采用开放注册表模式,支持将服务端类型映射至任意客户端实现(原生移动控件、React组件)。通过"智能包装器",开发者可将现有 UI(含安全 iframe)接入 A2UI 的数据与事件系统,并在自定义逻辑中直接实施沙箱和"信任阶梯",自主掌控安全,无需依赖核心框架。
4、应用场景
📝 动态数据收集
在对话过程中,智能体根据具体业务上下文(如预订特殊服务)实时生成定制化表单,包含日期选择器、滑块、输入框等交互控件。
🌐 远程子代理
主控智能体将任务委派给远程的专业子智能体(如差旅预订助手),后者返回结构化 UI 内容,直接嵌入主聊天界面中呈现。
📊 自适应工作流
企业级智能体可根据用户查询即时生成审批看板、数据图表等可视化界面,动态支撑决策与操作流程。
5、端到端的架构流程
A2UI 将用户界面的生成与执行解耦,实现了一个完整的闭环交互系统。整体流程包含以下六个阶段:
1.📝 生成(Generation) 智能体基于当前上下文(如用户初始请求或历史对话)生成 A2UI JSON 响应。
2.📡 传输(Transport) 该消息通过 A2A、AG UI 等协议发送至客户端应用。
3.🔍 解析(Resolution) 客户端的 A2UI 渲染器解析该 JSON 内容。
4.🎨 渲染(Rendering)
渲染器将抽象组件(如type: 'text-field')映射原生 UI 元素(如 Vue 组件、Flutter Widget 或 Web Component 等)。
5.🔄 交互与反馈(Interaction & Event Capture) 用户与界面交互(如点击按钮、提交表单),客户端捕获事件和数据,并将其作为新输入发送回智能体(通常附带当前会话状态)。
6.⚡ 增量更新(Incremental Regeneration & Re-rendering) 智能体根据新输入生成增量式 A2UI 更新(例如仅修改某个组件的属性或替换子树),客户端接收后局部更新界面,实现流畅交互。
💡关键设计点:扁平结构 + 组件 ID 引用机制为高效支持局部更新而设计闭环设计不仅适用于"一次性展示",更适用于多轮对话、动态表单、审批流、向导式操作等复杂交互场景支持事件回传与增量刷新,构成完整的 agent-in-the-loop(智能体在环)工作流
6、技术架构 依赖关系
A2UI 本身是一个轻量级格式,但需融入更广泛的生态系统:
6.1 📡 传输协议
A2UI 兼容以下协议进行消息传输:
- A2A 协议 Agent-to-Agent 通信协议,用于智能体之间消息传递。
- AG UI Google 的智能体 UI 传输协议
这些协议负责将智能体生成的 A2UI JSON 消息安全、高效地传输到客户端应用。
6.2 🤖 大语言模型
A2UI 的设计对 LLM 非常友好,可由任何能输出 JSON 的模型生成,包括:
- Gemini(Google)
- GPT 系列(OpenAI)
- Claude(Anthropic)
- 其他支持结构化输出的现代 LLM
6.3 🖥️ 宿主框架
A2UI 需要运行在支持的宿主应用中,目前官方支持的框架包括:
- Web 基于 Lit/Web Components,可在现代浏览器中运行
- Flutter 支持移动端和桌面端应用
未来还将支持更多框架,如 React、Vue、Angular、SwiftUI 等。 PART 07****快速开始 实战案例 运行"餐厅搜索"演示,快速上手 A2UI。本指南将带你 5 分钟内体验智能体生成的用户界面。
📋 先决条件
在开始之前,请确保您已经:
- Node.js(v18 或更高版本,推荐 v20+)
- Gemini API 密钥— 从 Google AI Studio 免费获取
- Python 3.11+(用于运行后端智能体)
- Git(用于克隆仓库)
🎯 你将构建什么
完成本快速入门后,你将拥有:
- ✅一个运行中的 Web 应用,集成 A2UI Lit 渲染器
- ✅ 一个由 Gemini 驱动的智能体,可动态生成用户界面
- ✅ 一个交互式餐厅搜索应用,支持表单生成、时间选择和确认流程
- ✅ 理解 A2UI 消息如何从智能体传递并渲染为用户界面
📥 Step 1: 克隆仓库
git clone https://github.com/google/A2UI.gitcd A2UI
🔑 Step 2: 设置 API 密钥
将 Gemini API 密钥设置为环境变量:
Windows (PowerShell):
$env:GOOGLE_GENAI_USE_VERTEXAI = "TRUE"$env:GEMINI_API_KEY = "your_gemini_api_key_here"
Linux / macOS:
export GEMINI_API_KEY="your_gemini_api_key_here"
⚠️注意:请将your_gemini_api_key_here替换为你从 Google AI Studio 获取的实际 API 密钥。
🚀 Step 3: 导航到 Lit 客户端并启动
cd samples/client/litnpm installnpm run demo:all
💡提示:如果遇到 Node.js 版本问题,建议升级到 Node.js 20 或更高版本。
此命令将自动完成以下操作:
- 安装所有依赖项
- 构建 A2UI 渲染器
- 启动 A2A 餐厅查找代理(Python 后端)
- 启动开发服务器
- 访问
http://localhost:5173
如果一切正常,您应该在浏览器中看到 Web 应用程序。代理现在已准备好生成 UI!
🎮 Step 4: 试试看
在 Web 应用程序中,尝试以下提示:
- "Book a table for 2"
— 观看智能体生成预订表单

用户提交
2. "Find Italian restaurants near me" — 查看动态搜索结果
- "What are your hours?" — 体验不同意图的不同 UI 布局
🔍 后台发生了什么?
下图展示了 A2UI 的完整工作流程:
工作流程详解:
- 用户发送消息 通过网页界面发送一条消息(如 "Book a table for 2")
- 智能体接收 A2A 智能体接收该消息,并将对话内容转发给 Gemini
- LLM 生成 JSON Gemini 生成描述用户界面的 A2UI JSON 消息(包括组件定义、数据模型等)
- 流式传输 A2A 智能体将这些消息以流式方式传回网页应用
- 解析渲染 A2UI 渲染器解析 JSON 并将其转换为原生 Web 组件
- 界面展示 你在浏览器中看到渲染后的界面(预订表单、按钮等)
📦 A2UI 消息结构解析
让我们来看看智能体发送的内容。以下是一个简化的 JSON 消息示例:
📝 定义用户界面
{
"surfaceUpdate": {
"surfaceId": "main",
"components": [
{
"id": "header",
"component": {
"Text": {
"text": {
"literalString": "Book Your Table"
},
"usageHint": "h1"
}
}
},
{
"id": "date-picker",
"component": {
"DateTimeInput": {
"label": {
"literalString": "Select Date"
},
"value": {
"path": "/reservation/date"
},
"enableDate": true
}
}
},
{
"id": "submit-btn",
"component": {
"Button": {
"child": "submit-text",
"action": {
"name": "confirm_booking"
}
}
}
},
{
"id": "submit-text",
"component": {
"Text": {
"text": {
"literalString": "Confirm Reservation"
}
}
}
}
]
}
}
这定义了该界面区域的 UI 组件:一个文本标题、一个日期选择器和一个按钮。
💾 填充数据
{
"dataModelUpdate": {
"surfaceId": "main",
"contents": [
{
"key": "reservation",
"valueMap": [
{
"key": "date",
"valueString": "2025-12-15"
},
{
"key": "time",
"valueString": "16:25"
},
{
"key": "partySize",
"valueInt": 2
},
{
"key": "dietaryRequirements",
"valueString": "微辣"
}
]
}
]
}
}
这会填充组件可绑定的数据模型。
🎨 触发渲染
{
"beginRendering": {
"surfaceId": "main",
"root": "header"
}
}
这会通知客户端:已有足够信息,可以渲染 UI 了。
💡这只是 JSON注意这段内容多么清晰且结构化?大语言模型(LLMs)可以轻松生成此类数据,而且传输和渲染都是安全的——无需执行任何代码。这正是 A2UI 的核心优势:安全性与表现力的完美平衡。
8、更多演示-联系人查询智能体
A2UI 还提供了其他演示场景,帮助你更好地理解其应用范围。尝试联系人查询演示:
cd A2UI\samples\client\litnpm run demo:contact
该演示展示了一个联系人查询智能体,它能动态生成搜索表单和结果列表,展示了 A2UI 在处理数据检索和展示方面的能力。
生成展示界面
🎉恭喜!你已成功运行第一个 A2UI 应用。你见证了 AI 智能体如何通过安全、声明式的 JSON 消息,生成丰富且可交互的用户界面,并在 Web 应用中实现原生渲染。
9、更多演示-联系人查询智能体
在运行A2UI智能体时,遇到的问题:
9.1 ⚠️ Node.js 版本问题
**问题:**安装依赖时出现EBADENGINE警告,提示 Node.js 版本不兼容。
错误示例:
npm warn EBADENGINE Unsupported engine {npm warn EBADENGINE package: 'vite@7.3.0',npm warn EBADENGINE required: { node: '^20.19.0 || >=22.12.0' },npm warn EBADENGINE current: { node: 'v18.17.0' }}
9.2 Windows 系统上的构建错误
问题: 在 Windows 上运行npm run build:renderer时出现copy-spec脚本失败。
原因: copy-spec脚本使用了 Unix 命令(mkdir -p和cp),在 Windows PowerShell 中不兼容。
9.3 🔑 环境变量设置
问题: Agent 启动时提示GEMINI_API_KEY environment variable not set。
9.4 🌐 无法访问 localhost:5173
问题: 服务启动成功,但浏览器无法访问http://localhost:5173/。
9.5 🔌 Agent 连接失败
问题: 客户端无法连接到 Agent 服务器,出现ETIMEDOUT或ECONNREFUSED错误。
9.6 🔤 中文乱码问题
问题: 在 Windows PowerShell 中,日志输出的中文显示为乱码(如ûҵˡ)。
9.7 📜 找不到 npm 脚本
问题: 运行npm run demo:contact时提示 "Missing script"。
9.8 📦 依赖安装失败
问题: npm install失败或出现网络错误。
9.9 🔨 构建失败
问题:npm run build:renderer失败。
10、后续步骤
现在你已经亲身体验了 A2UI 的运行效果,接下来可以:
- 📚学习核心概念:深入了解界面区域(surfaces)、组件类型和数据绑定机制
- 🔧搭建自己的客户端:将 A2UI 集成到你现有的 Web 或移动应用中
- 🤖开发智能体:创建能生成 A2UI 响应的智能体,实现自定义业务场景
- 📖深入协议规范:查阅完整的 A2UI 技术协议说明,了解所有组件类型和 API
💡更多资源:访问 A2UI 官方仓库 获取最新文档和示例代码。
END
如果你觉得本文有帮助,欢迎点赞👍、在看👀、转发📤,也欢迎留言💬分享你的经验!