A2UI 使用JSON Pointer路径(RFC 6901)将UI组件连接到应用状态。组件属性可以接受字面值或指向数据模型的路径引用。字面值(固定)直接在组件定义中指定静态内容,如{"text": "Welcome"}(v0.9扁平格式)。数据绑定值(响应式)使用路径引用数据模型中的动态内容,如{"text": {"path": "/user/name"}}。当数据模型中/user/name的值从"Alice"变为"Bob"时,绑定到该路径的Text组件会自动更新显示内容,无需重新生成组件定义。这种分离使A2UI能够高效定义大数据数组的布局,或在不从头重新生成的情况下显示更新内容。
A2UI 严格分离UI结构(组件)和应用状态(数据模型)。UI结构定义界面的外观,包含组件类型、层次关系和布局信息。应用状态定义显示的数据,包含文本、布尔值、列表等动态数值。每个Surface拥有独立的JSON对象作为数据模型状态存储。当智能体需要更新UI显示内容时,只需发送updateDataModel消息(v0.9核心消息)更新数据模型,无需重新发送UI结构定义。这种分离实现了响应式更新、数据驱动的UI、可重用模板和双向绑定等高级特性,是A2UI高效增量更新的关键。
A2UI 支持使用模板(Template)渲染动态列表。容器组件可以绑定到数据模型中的数组路径,并为数组中的每个元素渲染模板指定的组件。在模板作用域内,路径是相对于数组元素的(如/name会解析为当前元素的name属性),而以/开头的绝对路径仍然引用根数据模型。例如,数据模型包含/products数组,模板指定对于/products中的每一项,渲染一个绑定到/name的卡片。当数据模型更新时,列表会自动更新,新增或删除元素会触发相应的UI更新。
A2UI 支持双向数据绑定,特别适用于表单输入场景。当用户在TextField等交互组件中输入时,本地数据模型会立即更新,这些更改在客户端保持,直到用户操作(如点击提交按钮)触发userAction将最终状态发送回智能体。这种双向绑定减少了网络开销,保持表单交互的响应性。智能体接收到更新后的数据模型状态,可以根据新数据决定下一步操作(如搜索、计算、导航等),然后通过新的updateComponents或updateDataModel消息更新UI,实现完整的交互循环。