A2UI的核心设计原则如下:
A2UI 的核心设计哲学是"安全优先"。智能体发送声明式JSON数据描述UI意图,而非可执行代码。客户端维护一个预批准的可信组件目录(Catalog),智能体只能从目录中请求渲染组件,无法执行任意逻辑或注入恶意代码。这种"数据与代码分离"不是策略建议,而是协议层面的结构性保证。即使发生提示注入攻击或模型幻觉,智能体生成的JSON 也只包含数据,不包含可执行代码,从架构层面杜绝安全漏洞。
A2UI 采用邻接表模型(Adjacency List Model)而非传统嵌套JSON树来描述组件层次结构。所有组件存储为带ID引用的扁平列表,这种扁平结构特别适合LLM生成。LLM 可以增量生成组件,无需一次性完美嵌套深层JSON结构;可以流式传输组件定义,实现渐进式渲染;可以通过ID引用更新任何组件,无需重新发送整个组件树。邻接表模型使A2UI协议特别适合LLM 友好的UI生成场景。
A2UI 将UI结构与UI实现彻底解耦。智能体发送抽象组件树和数据模型描述,客户端应用程序负责将这些抽象描述映射到自己的原生组件库(无论是Web端的React、Angular、Lit,还是移动端的Flutter、SwiftUI、Jetpack Compose)。同一个A2UI JSON负载可以由不同框架构建的客户端渲染,实现"一次生成,多处运行"的可移植性。这种框架无关设计使A2UI 成为真正的跨平台UI协议。
A2UI 协议严格分离三个关键元素:组件树(UI结构)、数据模型(应用状态)和组件注册表(客户端目录)。组件树由updateComponents消息(v0.9,替代v0.8的surfaceUpdate)定义,描述UI的结构;数据模型由updateDataModel消息(v0.9,替代v0.8的dataModelUpdate)管理,包含填充UI的动态数值;组件注册表由客户端应用程序定义,不在协议流中传输。服务器必须生成目标客户端注册表能够理解的组件类型。这种关注点分离实现了清晰的架构边界、响应式数据绑定和增量更新能力。