跳到正文
本页内容

连接 A2UI 渲染器

面向生产接入官方维护的 React、Lit、Angular 与 Flutter A2UI 渲染器,不假设未公开 API。

更新: 2026/8/6 审校: HIA2UI 编辑组 v0.9.1

连接 A2UI 渲染器

宿主渲染器负责校验消息、维护 Surface 状态、把 Catalog 映射到本地组件,并返回用户 Action;传输层是独立职责。

1. 选择官方维护渲染器

宿主维护中的包或 SDK
React@a2ui/react@a2ui/web_core
Web Components@a2ui/lit@a2ui/web_core
Angular@a2ui/angular@a2ui/web_core
Flutter官方渲染器指南记录的 Flutter GenUI 包

安装官方渲染器目录列出的版本,并固定对应协议 Schema。公开 API 可能随协议分支变化,初始化代码应来自已安装包文档,而不是未标版本的文章。

2. 注册 Catalog

把每个允许的 Catalog 条目映射到宿主自有组件。Catalog 应保持小型、版本化和显式。能够导航、嵌入远程内容、读取文件、使用剪贴板、认证或提交交易的组件必须单独审核策略。

// 1. 创建注册表 (防火墙)
const catalog = createCatalog({ Text, Button, Form });

// 2. 渲染输出
const renderer = createRenderer({ catalog, protocolVersion: "0.9.1" });

上述标识符用于说明职责;实际代码应使用固定渲染器版本导出的准确 API。

3. 连接有边界的数据流

A2UI 与传输无关,但消息分帧不可省略。必须保留完整消息边界,限制大小和速率,认证对端,处理取消,并拒绝不支持的媒体类型。

const response = await fetch("/api/agent", {
  headers: { Accept: "application/a2ui+json" },
});

// 将数据块喂给 A2UI 解析器
for await (const message of decodeA2UI(response.body)) {
  renderer.receive(validateA2UI(message));
}

4. 通过服务端处理 Action

renderer.onAction(async (action) => {
  // Action = { name: "submit", data: { ... } }
  await sendAuthorizedAction(action);
});

可见或禁用组件都不是授权边界。服务端必须重新检查身份、权限、资源状态和幂等性。发布前测试非法消息、不支持组件、半包、重连、过期 Action、键盘操作与文本降级。

参见消息参考渲染器矩阵生产安全清单