A2UI 采用JSON Lines(JSONL)格式进行消息流式传输,每条消息为独立的JSON对象,占据一行。这种格式使客户端能够在消息到达时立即解析和处理每个部分,实现渐进式渲染。LLM可以增量生成组件定义,无需一次性完美生成完整的JSON结构;可以流式传输组件定义,用户看到界面实时构建,而不是等待完整响应;可以通过ID引用更新任何组件,无需重新发送整个组件树。JSONL格式的流式传输特性是A2UI支持渐进式渲染的基础。
客户端接收updateComponents和updateDataModel消息后,会缓冲这些消息而非立即渲染。组件定义存储在以surfaceId组织的Map中,如果Surface不存在,则创建它。数据模型更新会构建或更新客户端的内部JSON数据模型。当服务器发送createSurface消息(v0.9,替代v0.8的beginRendering)时,客户端才开始初始渲染。这种机制防止"不完整内容的闪烁",确保初始视图连贯。客户端缓冲传入的组件和数据,等待明确的渲染信号,然后递归遍历组件树,解析数据绑定,并使用WidgetRegistry实例化原生组件。
A2UI 支持增量更新,智能体可以根据对话进展对新用户请求进行高效的UI变更。由于采用邻接表模型,智能体可以增量发送组件,通过ID更新任何组件,无需重新发送整个组件树。当数据模型更新时,绑定到对应路径的组件会自动更新,无需重新生成组件定义。这种增量更新机制使A2UI能够实现高效的UI变更,特别适合需要频繁更新UI内容的动态场景,如实时数据监控、股票价格追踪、订单状态显示等。