Google A2UI 解读:当 AI 不再只是陪聊,而是开始画界面

1. 为什么我们不能只靠 Markdown?

目前的 Agent 交互虽然火热,但实际上体验极其割裂。

绝大多数 Chatbot(包括 ChatGPT)的交互只停留在 "文本 + Markdown" 的阶段。你要订票,它给你吐一段文字;你要看报表,它给你画个 ASCII 表格或者静态图片。虽然有了 Function Calling,但那是给后端用的,前端展示依然匮乏。

直接让 LLM 生成 HTML/JS 代码?在生产环境这是绝对禁忌 。除了难以控制的幻觉,还有致命的 XSS 安全隐患。你不敢把 LLM 生成的 <script> 直接 innerHTML 到用户的浏览器里。

A2UI (Agent-Driven Interfaces) 的出现,就是为了解决这个问题。Google 并没有把它做成一个简单的 UI 库,而是一套协议 (Protocol)

它的核心逻辑是:Agent 不写代码,只传数据(JSON)。客户端也不猜意图,只管渲染。 这使得 Agent 可以在不触碰一行 JS/Swift 代码的情况下,安全地驱动原生界面。

2. A2UI 的核心:流式传输与跨平台

A2UI 不是 React,也不是 Flutter,它是**"Headless 的 UI 描述语言"**。

  • 声明式 (Declarative): Agent 发送的是 JSON 描述(比如"这里有个列表,列表项绑定了变量 X"),而不是命令式代码。
  • 流式优先 (Streaming First): 专为 LLM 的 Token 输出特性设计。很多传统 JSON 协议需要等 JSON 闭合才能解析,A2UI 允许边生成、边解析、边渲染。首屏延迟(TTFB)被压到最低。
  • 平台无关 (Framework-Agnostic): 同一套 JSON 流,在 Web 端可以是 React 组件,在 iOS 端可以是 SwiftUI,在 Android 端可以是 Jetpack Compose。这是它区别于 Vercel AI SDK (RSC) 的最大优势------它不绑死在 React 生态上。

3. 技术深挖:四种消息类型(Vue/React 视角)

A2UI 的文档里充斥着"Adjacency List(邻接表)"、"Flat Hierarchy(扁平层级)"等学术词汇。但对于前端工程师来说,如果你懂 Vue.js 或 React 的底层原理,A2UI 的机制其实就是"通过网络传输的响应式系统" (Reactivity over the wire)。

我们可以将 A2UI 的四种核心消息类型(Message Types),与 Vue 的渲染机制做一个类比:

(1) surfaceUpdate ≈ Virtual DOM / Template

这是 UI 的骨架

  • Vue 原理: 就像你写的 <template> 或者编译后的 render 函数。它定义了组件树的结构(Layout),以及组件属性(Props)。
  • A2UI 机制: Agent 发送 surfaceUpdate,告诉客户端:"这里放一个卡片,卡片里有个 Text,Text 的内容绑定到 model.restaurantName"。
  • 关键点: 它只定义结构和绑定关系,不一定包含具体的值。

(2) dataModelUpdate ≈ Reactivity System (ref / reactive)

这是 UI 的血液

  • Vue 原理: 就像你在 Vue 里执行了 this.count++。Vue 的响应式系统会通过 Setter 劫持,通知 Watcher 去更新对应的 DOM 节点。
  • A2UI 机制: Agent 后续只需要发送 dataModelUpdate 消息,包含 { "restaurantName": "海底捞" } 的 JSON Patch。
  • 性能杀手锏: 这意味着 Agent 不需要 每次都重发整个 UI 结构。当数据变化时,客户端的 SDK 会像 Vue 一样,实现细粒度的更新 (Fine-grained updates)。这极大地节省了 Token 和带宽。

(3) beginRenderingmounted Hook

  • Vue 原理: 组件挂载完成,开始展示。
  • A2UI 机制: 控制渲染时机。Agent 可能想先在后台默默把数据和结构都发完,避免用户看到界面"跳变",最后发一个 beginRendering 信号,界面瞬间呈现。

(4) deleteSurfacev-if="false" / unmounted

  • Vue 原理: 组件销毁,DOM 移除。
  • A2UI 机制: 会话结束或上下文切换时,清理不再需要的 UI 片段,释放客户端内存。

4. 生态位分析:A2UI 到底处于什么位置?

在 AI 工程化(AI Engineering)的版图中,A2UI 并不是孤立的。我们需要看看它和现在的热门工具有什么区别:

vs. Vercel AI SDK (RSC)

  • Vercel: 强绑定 Next.js 和 React Server Components。如果你的全栈都是 Next.js,Vercel 的体验是无敌的。
  • A2UI: 更加底层和通用。如果你的产品是一个 Flutter App 或者 Native Android 应用,你没法跑 React 组件。这时候,A2UI 这种纯 JSON 协议就是唯一解。

vs. MCP (Model Context Protocol)

Anthropic 推出的 MCP 最近很火,很多人容易混淆。

  • MCP (Model Context Protocol): 解决的是 Agent 如何连接后端数据(Server-side)。比如 Agent 怎么读取你的 Git 仓库、怎么连数据库。
  • A2UI: 解决的是 Agent 如何展示前端界面(Client-side)。
  • 结论: 它们是互补的。理想的架构是:Agent 通过 MCP 获取数据,处理后通过 A2UI 协议画出界面展示给用户。

vs. OpenAI Canvas / ChatKit

  • Canvas: OpenAI 的闭源产品功能。
  • ChatKit / CopilotKit: 这些是开源领域的应用框架 。目前像 CopilotKit 这样的库,正在积极实现类似 Generative UI 的功能(通过 useCopilotAction 渲染自定义组件)。
  • Flutter GenUI SDK: 这是 A2UI 理念的最佳实践者。利用 Flutter 强大的渲染引擎,解析标准化的 JSON 协议,实现"一次生成,多端原生渲染"。

5. 总结:UI 开发范式的转移

A2UI 给我们最大的启示并非协议本身,而是开发模式的变革

以前我们写 UI,是写死的页面(Page-based)。 未来我们写 UI,是提供一堆高质量的**"组件积木" (Component Registry)**。

前端工程师的工作将从"画页面"转变为"维护组件库"和"配置 Schema"。剩下的组装工作,将由 Agent 根据用户的意图,通过类似 A2UI 的协议,在运行时动态完成。这就是 "Component-First, AI-Assembled" 的未来。

相关推荐
Yao.Li1 小时前
PVN3D ORT CUDA Custom Ops 实现与联调记录
人工智能·3d·具身智能
诺伦1 小时前
LocalClaw 在智能制造的新机会:6部门AI+电商政策下的工厂AI升级方案
人工智能·制造
小陈工3 小时前
Python Web开发入门(十七):Vue.js与Python后端集成——让前后端真正“握手言和“
开发语言·前端·javascript·数据库·vue.js·人工智能·python
墨染天姬7 小时前
【AI】端侧AIBOX可以部署哪些智能体
人工智能
AI成长日志7 小时前
【Agentic RL】1.1 什么是Agentic RL:从传统RL到智能体学习
人工智能·学习·算法
xiaotao1317 小时前
第九章:Vite API 参考手册
前端·vite·前端打包
午安~婉7 小时前
Electron桌面应用聊天(续)
前端·javascript·electron
2501_948114247 小时前
2026年大模型API聚合平台技术评测:企业级接入层的治理演进与星链4SAPI架构观察
大数据·人工智能·gpt·架构·claude
小小工匠7 小时前
LLM - awesome-design-md 从 DESIGN.md 到“可对话的设计系统”:用纯文本驱动 AI 生成一致 UI 的新范式
人工智能·ui
黎阳之光8 小时前
黎阳之光:视频孪生领跑者,铸就中国数字科技全球竞争力
大数据·人工智能·算法·安全·数字孪生