Google 跟踪代码管理器(noscript) 结束 Google 跟踪代码管理器(noscript) HTML 快速、可靠的 A2UI,支持可替换的推理格式 2026 年 10 月 27 日 Vishal Motwani Vibes Builder Google A2UI 团队 00-header-1600x900 (1)

我们已听到大家对 A2UI 和生成式 UI 体验速度的担忧:人们需要等待模型生成每一个屏幕。本次发布为你提供了加速的调节手段,让你可以为每个屏幕选择适合的权衡方案。

在本次发布中,我们很高兴推出可替换的推理格式,并分享利用决策模型配合 A2UI 的示例,这有助于构建更快、更可靠的生成式 UI 体验。使用我们新的 A2UI Express 作为推理格式,你可以将延迟降低至多 3 倍, 而至多 80 倍 则是使用像 Jev 这样的决策模型来做布局决策。与 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 作为新的默认推理格式,以及决策模型如何根据你预先定义的布局来构建屏幕。

01-intro-rendering-format

关于 A2UI 的两件事已不再成立

Gemini_Generated_Image_3c13f83c13f83c13

可替换推理格式如何工作

一种推理格式包含两部分,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 messages
Python 已复制 02-how-it-works-swap

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 中,你将其作为生成器的第三个参数传入。Python 和 TypeScript SDK 都能逐块流式传输 Direct JSON,并从完整回复中编译 Express。 new ExpressFormatFactory() Express:用三分之一的 token 实现相同的屏幕

Express 每行写一条语句,风格接近 Python。每一行将一个组件赋值给一个变量,变量名成为组件 ID。参数是位置参数:编译器按照你的目录 schema 声明它们的顺序将其映射到属性名,_ 表示跳过一项。$/title 将值绑定到数据模型,而

声明一个服务器操作。这是 A2UI 画廊中 Express 格式的通知卡片: Event("accept") Plain text 已复制

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 的调用,例如 03-express-same-card

,你的宏会获取订单并填入值,因此屏幕上的每个值都直接来自你的数据。 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 时,这可以为你带来最快的推理时间。

04-how-we-chose-express-eval

使用 Jev 进行受控生成

有些屏幕具有已知的形状,例如设置页面、结账页或确认页。对于这些屏幕,模型不需要设计布局。它需要在已定义的布局中进行选择,而另一种类型的模型正是为此而构建的。为此,你不需要 A2UI Express 提供的全部表达能力。

来自 TypeSafe 的

Jev, 就是所谓的 System One 模型, 旨在做出代码可直接使用的快速、结构化决策。Jev 不生成文本或 JSON。你向它发送一个状态和一组带类型的问题,它用校准后的概率回答每一个问题。问题可以询问某个陈述是否为真(Noul)、列表中的哪个选项合适(Choice),或某事物在评分标准上的得分(Score)。Jev 在单个请求中回答许多问题,耗时大约 100 到 300 毫秒。

Apparite(jev2ui)是一个开源设计工具,它展示了一种将 System One 模型连接到 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.
纯文本 已复制 05-controlled-row-control

在一个播客应用的设置屏幕上,Jev 回答 Skip forward → 值、 Auto-download → 开关和 Log out → 危险,每一项的 p ≈ 1.00。Apparite 分三步构建整个屏幕:

  1. 一次 Jev 请求即可回答语法中的布局问题,一个屏幕大约 30 个。
  2. 代码根据目录构建组件树,并发送 createSurface 和 updateComponents ,耗时约 200 毫秒,文本将要出现的位置用占位符表示。
  3. gemini-3.5-flash-lite 将文本流式写入 updateDataModel。每收到一部分内容,就会发出一些小的后续 Jev 请求,以确定依赖该部分的内容,例如上方的行控件。
06-controlled-timeline

在一次包含 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 消息之间进行转换的转换器。你的目录和渲染器保持不变。

试用一下

在你的 agent 中使用 Express。 使用以下命令安装 Python SDK: pip install a2ui-agent-sdk 或使用以下命令安装 TypeScript SDK: npm install @a2ui/agent,在创建生成器时传入 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 catalog
Python 已复制 07-try-it-skills

试试受控生成。 克隆 示例 jev2ui 仓库, 并按照其中的说明开始使用。托管版本的 Apparite(jev2ui) 运行于 apparite.cnfg.ai.

来源

早前的 A2UI 文章: 推出 A2UI (2025 年 12 月)、 A2UI v0.9 (2026 年 4 月)以及 A2UI + MCP Apps (2026 年 6 月)。

发布于: 上一篇 下一篇 相关文章 Architecting Governed, Self-Evolving AI Agents on Google Cloud AI 云 教程 行业趋势

在 Google Cloud 上架构受治理、可自我演进的 AI 智能体

2026 年 10 月 22 日
Bringing Visual Graph Debugging to Custom Edge Compilers with Model Explorer 移动端 AI 案例研究 学习

借助 Model Explorer 为自定义边缘编译器带来可视化图调试

2026 年 10 月 20 日
Building Conversational Commerce with Multi-Agent Swarms on GCP: A Working Prototype 移动端 Web 操作指南 问题解决

在 GCP 上使用多智能体集群构建对话式商务:一个可运行的原型

2026 年 10 月 27 日
Powering the Agent Development Lifecycle with any framework, from ADK to LangChain and beyond AI 云 教程 影响力

以任意框架驱动智能体开发生命周期,从 ADK 到 LangChain 及更多

2026 年 10 月 21 日