A2UI:Agent 到用户界面(Agent-to-User Interface)

A2UI 是一个开源项目,包含一种专门优化的格式,用于表示 可更新的、由 Agent 生成的 UI,以及一组初始渲染器,使 Agent 能够生成或填充 丰富的用户界面。 ([GitHub][1])


⚠️ 状态:早期公开预览

注意:A2UI 当前版本为 v0.8(Public Preview)。 规范和实现已经可用,但仍在持续演进。

我们开放该项目是为了:

  • 促进社区协作
  • 收集反馈
  • 吸引贡献(例如客户端渲染器)

未来版本可能会发生变化。


概述

生成式 AI 非常擅长生成 文本和代码,但 Agent 在向用户展示 丰富的交互界面 时往往比较困难,尤其是当这些 Agent:

  • 运行在远程
  • 跨越信任边界
  • 与前端应用分离

A2UI 是一个开放标准和库集合,使 Agent 能够“说 UI”。

Agent 通过发送 声明式 JSON 格式 来描述 UI 的意图。 客户端应用随后使用自己的 原生组件库 来进行渲染,例如:

  • Flutter
  • Angular
  • Lit
  • 其他框架

这种方式使得:

  • Agent 生成的 UI 像数据一样安全
  • 同时 像代码一样强大和灵活。 ([GitHub][1])

高层设计理念

A2UI 的设计目标是解决 跨平台、可互操作的 Agent UI 问题。

核心理念包括:

1️⃣ 安全优先(Security First)

运行 LLM 生成的任意代码可能带来安全风险。

因此:

  • A2UI 是 声明式数据格式
  • 不是可执行代码

客户端应用维护一个 受信任的组件目录,例如:

  • Card
  • Button
  • TextField

Agent 只能请求渲染这些 预先批准的组件


2️⃣ 对 LLM 友好且可增量更新

UI 使用 组件平面列表 + ID 引用 表示。

优点:

  • LLM 更容易生成
  • 支持 渐进式 UI 渲染
  • Agent 可以在对话过程中 逐步更新 UI

3️⃣ 框架无关、可移植

A2UI 将 UI 结构与 UI 实现分离

Agent 发送:

  • 组件树描述
  • 数据模型

客户端负责将这些描述映射到 本地组件实现,例如:

  • Web Components
  • Flutter Widgets
  • React Components
  • SwiftUI Views

同一个 A2UI JSON:

可以在多个不同框架的客户端中渲染。


4️⃣ 灵活扩展

A2UI 提供 开放注册机制

开发者可以将服务器类型映射到 自定义组件实现

例如:

  • 原生移动组件
  • React 组件
  • iframe 容器(用于旧系统)

通过 Smart Wrapper 可以:

  • 连接现有 UI 组件
  • 使用 A2UI 的数据绑定和事件系统

同时开发者可以:

  • 实施安全沙箱策略
  • 定义信任等级机制

使用场景

A2UI 适用于多种场景,例如:

动态数据收集

Agent 根据对话上下文生成 动态表单

  • 日期选择器
  • 滑块
  • 输入框

例如:预订特殊餐厅。


远程子 Agent

主 Agent 将任务委派给远程 Agent。

远程 Agent 返回 UI payload, 在主聊天界面中渲染。


自适应工作流

企业 Agent 根据用户请求生成:

  • 审批面板
  • 数据可视化
  • 操作工作流

架构

A2UI 的核心思想是:

UI 的生成 与 UI 的执行分离

流程如下:

1️⃣ 生成(Generation)

Agent(例如使用 LLM)生成:

A2UI Response

即描述 UI 组件及其属性的 JSON。


2️⃣ 传输(Transport)

JSON 通过通信协议发送到客户端,例如:

  • A2A
  • AG-UI

3️⃣ 解析(Resolution)

客户端的 A2UI Renderer 解析 JSON。


4️⃣ 渲染(Rendering)

Renderer 将抽象组件映射到实际 UI 实现,例如:

type: "text-field"

对应:

  • React input
  • Flutter TextField
  • Web component

依赖生态

A2UI 是一个 轻量级格式,但可以融入更大的 AI Agent 生态。

主要依赖包括:

传输协议

  • A2A Protocol
  • AG-UI

LLM

任何能够生成 JSON 的模型都可以使用。


主应用框架

需要一个宿主应用,例如:

  • Web
  • Flutter

快速开始

理解 A2UI 最好的方法是运行示例。


前置条件

需要:

  • Node.js(Web 客户端)
  • Python(Agent 示例)
  • 有效的 Gemini API Key

运行 Restaurant Finder Demo

1️⃣ 克隆仓库

git clone https://github.com/google/A2UI.git
cd A2UI

2️⃣ 设置 API Key

export GEMINI_API_KEY="your_gemini_api_key"

3️⃣ 运行 Agent(后端)

cd samples/agent/adk/restaurant_finder
uv run .

4️⃣ 运行客户端(前端)

打开新的终端:

cd renderers/lit
npm install
npm run build

cd ../../samples/client/lit/shell
npm install
npm run dev

Roadmap

未来计划包括:

  • 稳定规范并发布 v1.0
  • 增加更多渲染器:

    • React
    • Jetpack Compose
    • SwiftUI
  • 支持更多传输协议:

    • REST
  • 集成更多 Agent 框架:

    • Genkit
    • LangGraph

贡献

A2UI 使用:

Apache 2.0 License

我们相信 未来的 UI 将是 Agent 驱动的,欢迎社区参与。

请查看:

CONTRIBUTING.md

了解贡献流程。

参考资料