通俗类比:标准的 A2UI 组件就像标准的 乐高积木 (2x4, 1x2),它们通用且适合大多数场景。 自定义组件 就像是 3D 打印的专用零件。您为自己的飞船 (App) 专门设计了它们,它们能完美契合您的需求。
为什么需要自定义组件库?
标准组件库覆盖了 80% 的用例(按钮、文本、表格)。 但对于剩下的 20%,你需要更强大的武器:
- 金融:一个 K 线图
<StockCandleChart />。 - 旅行:一个飞机选座器
<SeatSelector />。 - 地图:一个带定位的
<GoogleMapLocation />。
A2UI 允许您注册 原生组件 (Native Components),而不是试图用一堆文本框凑出一个地图来。
核心机制:握手协议 (Handshake)
- 宿主应用 (Host App):“我有一个组件叫
flight-card。” - 注册表 (Registry):将
flight-card加入允许名单 (Allowlist)。 - Agent:发送 JSON
{ "type": "flight-card", "props": { ... } }。 - A2UI 运行时:将字符串
flight-card匹配到您的 React 函数并渲染它。
示例:构建一个地图组件
1. React 组件
这只是一个普通的 React 组件,里面没有任何 A2UI 的黑魔法。
// components/MapWidget.tsx
export const MapWidget = ({ lat, lng }) => (
<GoogleMap center={{ lat, lng }} zoom={12} />
);
2. 注册条目
告诉 A2UI 这个组件存在。
// registry.ts
const myCatalog = {
'map-widget': MapWidget
};
3. Agent 提示词
教会 AI 如何使用它。
SYSTEM: 你可以通过发送以下 JSON 来展示地图:
{ "type": "map-widget", "props": { "lat": number, "lng": number } }
安全性:防火墙效应
这正是 A2UI 优于其他“UI 生成”方案的地方。
- Agent 无法凭空创造新组件。
- 如果 Agent 试图发送
<BitcoinMiner />(比特币挖矿机),A2UI 运行时会发现它不在注册表中,然后直接拦截。 - 您拥有对用户设备上运行的代码的绝对控制权。