Google 为 A2UI 推出可替换推理格式,Express 最高提速 3 倍
Fast, reliable A2UI, with swappable inference formats
Google 为生成式 UI 协议 A2UI 推出可替换推理格式,新增默认格式 A2UI Express,相比 Direct JSON 最高降低 3 倍延迟、生成同类 UI 所需 token 最多减少 3 倍。
官方给出可替换推理格式的接入方式与延迟、token 数据,读者可据此判断生成式 UI 的提速路径。
2026年10月27日
我们已了解到大家对 A2UI 和生成式 UI 体验速度的担忧:用户需要等待模型逐个生成每个屏幕。本次发布为你提供了加速的手段,让你可以针对每个屏幕选择适合的取舍。
在本次发布中,我们很高兴推出可替换的推理格式,并分享利用决策模型配合 A2UI 的示例,这有助于构建更快、更可靠的生成式 UI 体验。使用我们新的 A2UI Express 作为推理格式,你可以将延迟最多降低 3 倍;而使用像 Jev 这样的决策模型来做布局决策,最多可降低 80 倍。与 Direct JSON 相比,Express 生成同类 UI 所需的 token 最多减少 3 倍。我们将在本篇博文中深入探讨细节。
A2UI 是一种面向生成式 UI 的、针对智能体优化的协议:客户端以契约形式公布一个受信任组件目录,智能体发送 A2UI 消息来描述由该目录组合而成的定制用户界面,客户端渲染器则绘制该 UI(参见 Introducing A2UI)。
最初,智能体直接生成 A2UI JSON 传输消息,每一个花括号和嵌套元素都要生成。事实证明,对于 LLM 而言,生成受复杂 JSON schema 约束的 JSON 树既慢又容易出错。这使 A2UI 与输出文本的 LLM 绑定在一起,也使其难以集成更快的 System One 决策模型。
现在,智能体可以生成 A2UI Express——一种针对推理速度和准确性优化的中间格式,并依靠 A2UI 的 Agent SDK 中的确定性代码将其转换为基于 JSON 的传输协议。智能体构建者也可以自由替换任何其他 DSL 及其关联编译器,以应对特殊用例,而我们的 A2UI Agent SDK 使其与传输和渲染兼容。
模型生成的格式就是我们所说的 inference_format。你在创建生成器时用一个参数来设置它。SDK 会为该格式生成提示指令,并将模型的回复编译为标准 A2UI 消息。本文介绍这种替换如何工作、我们为何开发 A2UI Express 作为新的默认推理格式,以及决策模型如何根据你预先定义的布局来构建屏幕。
关于 A2UI 不再成立的两件事
可替换推理格式的工作原理
推理格式包含两部分,SDK 会根据你目录的 JSON schema 生成这两部分。提示部分教会模型该格式的语法,编译器则将模型的回复编译为经过验证的 A2UI 消息。由于两者都来自 schema,格式无法描述你目录中不存在的组件或属性。
你在创建生成器时用一个参数来选择格式:
from a2ui.processor import A2uiGenerator, CatalogConfig
from a2ui.inference_formats import ExpressFormatFactory
catalog = CatalogConfig.from_path("catalog.json")
generator = A2uiGenerator(
[catalog],
examples=few_shot_examples, # written once as A2UI JSON
inference_format_factory=ExpressFormatFactory(),
)
processor = generator.create_processor(renderer_capabilities)
system_prompt = f"{instructions}\n\n{processor.prompt_snippet}"
parts = processor.parse_response(model_reply) # text parts + validated A2UI messagesPython
已复制
A2UI Express 已在 Python agent SDK(PyPI 上的 a2ui-agent-sdk 0.9.0)、TypeScript agent SDK(npm 上的 @a2ui/agent)以及 Dart SDK(pub.dev 上的 a2ui_agent 0.0.1-wip004)中提供。在 TypeScript 中,你将 new ExpressFormatFactory() 作为生成器的第三个参数传入。Python 和 TypeScript SDK 都能逐块流式传输 Direct JSON,并从完整回复中编译 Express。
Express:用三分之一的 token 生成同样的屏幕
Express 每行写一条语句,风格接近 Python。每一行将一个组件赋值给一个变量,变量名成为组件 ID。参数按位置传递:编译器按照你的 catalog schema 声明属性的顺序,将它们映射到属性名,而 _ 表示跳过一项。$/title 将值绑定到数据模型,Event("accept") 声明一个服务器操作。下面是 A2UI gallery 的通知卡片在 Express 中的写法:
surface("gallery-notification-permission")
$/description="Get alerts for order status changes"
$/icon="check"
$/title="Enable notification"
root=Card(main_column)
main_column=Column([icon, title, description, actions], _, "center")
icon=Icon($/icon)
title=Text($/title)
description=Text($/description, "body")
actions=Row([yes_btn, no_btn], "center")
yes_btn_text=Text("Yes")
yes_btn=Button(yes_btn_text, _, Event("accept", {}))
no_btn_text=Text("No")
no_btn=Button(no_btn_text, _, Event("decline", {}))纯文本
已复制
可替换的推理格式,包括 A2UI Express,也能与 Python agent SDK 中的宏配合使用,当屏幕显示你的系统已经持有的数据时,这会很有帮助。模型只写一个带 ID 的调用,例如 OrderStatus("ord_42"),你的宏会获取订单并填入值,因此屏幕上的每个值都直接来自你的数据。宏的 README 展示了设置方法。
我们如何设计 A2UI Express
客户反馈发现了直接生成 JSON 的延迟和准确性问题。为了解决这个问题,我们开始设计一种新的推理格式。我们试验了四种方案:
- Direct JSON:这是我们现有的基线,我们在 2025 年 12 月发布时使用的就是它。
- Express:最终选定的、受 `python` 语法启发的新默认格式。
- Atom:编写 Lisp 风格的 S 表达式,没有赋值,也没有闭合标签。
- Elemental:用自定义元素编写 HTML,押注于模型已经擅长编写 HTML 这一点。
我们在 gemini-3.5-flash 上对全部四种格式运行了相同的 51 项任务评估,并比较了它们在思考模式开启和关闭时的表现。
我们观察到,即使关闭思考,Express 推理格式的表现也同样出色;在使用 A2UI Express 时,这可以为你带来最快的推理时间。
使用 Jev 进行受控生成
有些屏幕具有已知的形状,例如设置页面、结账页面或确认页面。对于这些屏幕,模型不需要设计布局。它需要在已经定义好的布局中进行选择,而另一种类型的模型正是为此而构建的。为此,你不需要 A2UI Express 提供的完整表现力。
来自 TypeSafe 的 Jev 是一种所谓的系统一模型,旨在做出代码可以直接使用的快速、结构化决策。Jev 不生成文本或 JSON。你向它发送一个状态和一组带类型的问题,它用校准后的概率回答每一个问题。问题可以询问某个陈述是否为真(Noul)、列表中的哪个选项合适(Choice),或者某事物在评分标准上的得分(Score)。Jev 在一个请求中回答许多问题,耗时大约 100 到 300 毫秒。
Apparite(jev2ui)是一个开源设计工具,展示了将系统一模型连接到 A2UI 的一种方式。Jev 决定每个屏幕的结构,代码根据这些决策构建 A2UI 组件,而一个小模型 gemini-3.5-flash-lite 只负责编写文本。问题存在于预先编写的 Markdown 语法中。一个块引用提出一个问题,项目符号是它的选项,每个选项都带有标准。下面这段来自 grammar/screen.md 的内容决定设置行获得哪种控件:
#### row_control (of each row in rows, within each group in groups)
Material: a switch for one on/off setting that takes effect at once. HIG: a disclosure indicator for a row that opens another page.
> `{row}` is a row in the supplied screen and section. Grouped rows can represent content, navigation, settings or actions; use their actual text and context to decide.
>
> What kind of row is {row}?
- **switch** — A setting that is simply on or off and takes effect at once: notifications, dark mode, autoplay, sync.
- **value** — A setting with one current value picked from several, changed on another page: language, quality, theme, frequency, units.
- **nav** — A link to another page: a content item, details, account, privacy, help, about, or managing something. Its text and section identify what it opens.
- **check** — One of several alternative options listed together, of which one is chosen: the choices of a single setting, such as '10 seconds', '30 seconds', 'High', 'Low'.
- **danger** — A final or destructive account action: sign out, delete account, clear data, reset.纯文本
已复制
在一个播客应用的设置屏幕上,Jev 回答 Skip forward → value、Auto-download → switch 和 Log out → danger,每个的概率都约为 1.00。Apparite 分三步构建整个屏幕:
- 一个 Jev 请求回答语法中的布局问题,一个屏幕大约有 30 个。
- 代码根据 catalog 构建组件树,并在约 200 毫秒内发送
createSurface和updateComponents,在文本将要出现的位置放置占位符。 - gemini-3.5-flash-lite 将文本流式传输到
updateDataModel中。每到达一部分,小型的后续 Jev 请求就会确定依赖于它的内容,例如上方的行控件。
在一次包含 11 个提示词的运行中,组件树在 92 到 298 毫秒内显示在屏幕上,每个屏幕在 0.8 到 1.7 秒内完成。文本写入器为每个屏幕生成 101 到 341 个 token,并且 Apparite 的两条 Jev 流水线在全部 11 个提示词上都生成了有效的 A2UI。该项目将这些数字视为初步观察,因为样本量很小。
受控生成只能生成其语法所描述的布局。Apparite 的语法涵盖九种屏幕原型和十二种块,因此没有已知形状的屏幕更适合使用 Express。A2UI Agent SDK 目前还不包含决策模型推理格式;apparite(jev2ui) 项目是一个示例,展示了在给定决策模型产生的一批独立决策时,如何组装 A2UI 消息。
使用哪种模式
A2UI Express 速度快,并保留了 A2UI 的完整表现力,但做出多个独立决策的决策模型仍然更快。根据你能提前定义多少屏幕内容来选择:
- 受控模式,当决策模型能生成你所需的内容时。如果你的屏幕遵循固定且已定义的布局,决策模型可能是最快的选择。
- Express 模式,实现完整表现力。当屏幕需要基于你的目录实现更多表现力时,回退到 A2UI Express。它速度快,而且模型仍然会编写整个组件树。
- 对于任何新内容,使用你自己的格式。由于推理格式可以替换,新的用例或未来的语法只需要一个提示词生成器来教会模型你的 DSL,以及一个转换器在你的 DSL 和 A2UI 消息之间进行转换。你的目录和渲染器保持不变。
试用
在你的智能体中使用 Express。使用 pip install a2ui-agent-sdk 安装 Python SDK,或使用 npm install @a2ui/agent 安装 TypeScript SDK,在创建生成器时传入 ExpressFormatFactory(),并在关闭思考的情况下运行模型。你的目录和渲染器保持不变,Express 规范记录了语法。
要教会 Gemini 或任何其他加载技能的模型仅使用你的组件编写 Express,请使用 Python SDK 的 SkillGenerator 从你的目录生成技能:
import json
from a2ui.core import Catalog
from a2ui.inference_formats.express import ExpressFormat
from a2ui.skill import SkillGenerator
catalog = Catalog.from_json(json.load(open("catalog.json")))
skills = SkillGenerator(ExpressFormat([catalog])).generate_skillset()
skills.export_to_directory("skills") # a2ui-core plus one skill per catalogPython
已复制
尝试受控生成。克隆示例 jev2ui 仓库,并按照其中的说明开始使用。Apparite(jev2ui) 的托管版本运行在 apparite.cnfg.ai。
来源
早期的 A2UI 文章:Introducing A2UI(2025 年 12 月)、A2UI v0.9(2026 年 4 月)和A2UI + MCP Apps(2026 年 6 月)。
- A2UI Express 规范
- A2UI Elemental 规范和A2UI Atom 规范
- A2UI 评估中的推理格式基线
- a2ui-agent-sdk 变更日志(0.9.0,2026 年 10 月 17 日)和 npm 上的@a2ui/agent(0.0.1)
- Python 智能体 SDK 中的技能生成器
- TypeSafe 的Jev 文档
- Apparite (jev2ui) README 中的“Results so far”和“Known limits”,以及其屏幕语法
上一篇
下一篇
来源:Google Developers Blog · developers.googleblog.com