数据截至 (上游 commit f5baf760d23a)
02 · 组件模型与目录
本章讲什么: 为什么 A2UI 把 UI 表示成「一张扁平 ID 列表」而不是嵌套树?为什么这恰好对流式和 LLM 友好?以及 A2UI 安全模型的核心——目录(catalog)白名单。
1. 邻接表模型:UI 是一张扁平列表,不是嵌套树
它要解决的小问题
如果 UI 用嵌套 JSON(孩子套在父亲里),LLM 必须一次性生成结构完整、括号配平的整棵树才能渲染——既难增量,也难乱序。A2UI 反其道:所有组件平铺成一个列表,父子关系靠 id 引用(a2ui_protocol.md:642-650)。这叫邻接表模型(adjacency list:用「谁指向谁」的引用列表表示图/树,而非物理嵌套)。
长什么样
// 示意,非源码:容器用 children/child 引用孩子的 id
[
{"id": "root", "component": "Column", "children": ["title", "btn"]},
{"id": "title", "component": "Text", "text": "Welcome"},
{"id": "btn", "component": "Button", "child": "btn_label"}
]
客户端把它们全塞进一个 Map<id, Component>,渲染时再顺着 root 的引用把树「拼」出来。