对比 · 协议与平台

QORM 对比 Google A2UI

A2UI 定义了 Agent 如何向客户端描述界面;QORM 则是渲染、签名、分发并打包整个应用的运行时。二者处于不同层级 —— 以下精确标明各自的边界。

English version →

A2UI 是什么 —— 以及它刻意“不”做什么

A2UI 是 Google 开源的 Agent 到客户端 UI 消息格式。Agent 不输出 HTML 或代码,而是以扁平的邻接表组件模型进行流式输出:每条消息描述的组件通过 ID 引用其子组件。这使得该格式对 LLM 十分友好 —— 模型可以逐 token 增量生成,客户端也可以在消息到达时渐进渲染。CopilotKit、Flutter 的 GenUI SDK 等项目已将其采纳为 Agent 与生成式 UI 客户端之间的传输格式。

这种刻意收窄的设计是一种优点,而非缺陷。A2UI 不规定渲染器(每个客户端将消息映射到自己的组件目录)、传输方式、分发或更新机制、内容签名或完整性校验,也不涉及任何形式的应用打包。它只专注回答一个问题:Agent 对客户端说了什么?

QORM 是什么

QORM(Query · Observe · Render · Mutate)是一个完整的、Agent 原生的纯 Go 应用平台。应用是语言中立的 JSON —— qorm.json 加上 scenes/actions/ —— 其余工作由同一个运行时完成:在浏览器中实时渲染应用、快照生成静态 HTML、将其 ed25519 签名为内容寻址的 bundle、通过 OTA 推送更新并支持一键回滚,还能将同一应用打包到 Web、iOS、Android、桌面端和小程序。

由于运行时本身就是集成点,QORM 通过 20+ 个 MCP 工具将运行中的应用暴露给 AI Agent:检查 UI 树、查询和设置状态、预览并应用补丁(带乐观令牌),以及用 qorm measureqorm check 验证渲染几何。人类与 Agent 共享同一个实时会话 —— SSE 让所有观察者保持同步,qorm_activity 则将用户操作流式回传给 Agent。

并排对比

维度Google A2UIQORM
定位协议 —— Agent 与客户端之间的 UI 消息格式平台 —— 面向完整应用的运行时、分发与打包
渲染器不作规定;每个客户端将消息映射到自己的组件内置:同一个纯 Go 运行时渲染为 HTML/CSS 与原生壳
分发 / OTA不在范围内内容寻址 bundle、OTA 更新、即时回滚
签名 / 完整性不在范围内每个 bundle 均经 ed25519 签名,激活前完成校验
打包目标不在范围内Web、iOS、Android、桌面、小程序 —— 来自同一份 JSON 应用
人机共享实时会话规范未定义支持 —— SSE 同步,qorm_activity 将用户操作流式传给 Agent
验证能力规范未定义Agent 用 qorm measure / qorm check 验证渲染几何

你该选哪一个?

如果你正在构建自己的生成式 UI 客户端,需要一种干净、可流式、对 LLM 友好的方式让 Agent 描述界面树,A2UI 正是为此而生的优秀格式 —— 它可以与你已有的渲染器和框架自然组合。

如果你需要的是应用本身 —— 完成渲染、签名、OTA 分发、打包到各大平台,并能让人类与 AI Agent 在同一会话中实时驱动 —— 这正是 A2UI 刻意留白的层级,也是 QORM 填补的层级。二者并非对立:QORM 运行时原则上完全可以把 A2UI 流作为又一种输入格式来消费。

另请参阅 QORM 对比 AG-UI(CopilotKit) 了解生态中的事件传输一侧,或返回生态概览

试用完整平台

QORM 基于 MIT 许可证开源。一条命令即可脚手架创建应用,然后通过 MCP 用你的 Agent 驱动它。

github.com/qorm/qorm