跳转到内容

Canvas 与 A2UI:Agent 可视化交互渲染

Canvas 与 A2UI:Agent 可视化交互渲染

概述

Canvas(画布)与 A2UI(Agent-to-User Interface)是一种从 Agent 的文本输出中提取交互式 UI 规范并渲染为可视化工作区的模式。Agent 不仅生成文本回复,还能生成可交互的 UI 组件,使用户能够在对话过程中直接操作和查看结果。

核心概念

A2UI 的核心思想是:Agent 的文本输出不仅是信息,还可以是 UI 的声明式描述。系统从文本中解析这些描述,并将其渲染为交互式组件。

两种提取方式

1. JSON 记录提取

从工具输出或 Agent 回复中解析 JSON 记录:

{
"kind": "canvas",
"presentation": {
"target": "assistant_message",
"title": "数据可视化",
"preferred_height": 400
},
"view": {
"url": "/path/to/canvas",
"id": "doc-id"
}
}
字段说明
kind固定为 "canvas",标识这是一个 Canvas 记录
presentation.target渲染目标表面,目前仅支持 "assistant_message"
presentation.titleCanvas 标题,显示在 UI 头部
presentation.preferred_height首选高度(160-1200px)
view.urlCanvas 内容的 URL
view.id文档标识符

2. 短代码(Shortcode)提取

从 Agent 的文本输出中解析 [embed] 短代码:

[embed ref="my-doc" title="我的画布" height=400 class="my-class" /]
[embed url="https://example.com/canvas" title="外部画布"][/embed]

短代码支持两种形式:

  • 自闭合[embed ref="..." ... /]
  • 成对标签[embed url="..."][/embed]

围栏感知解析

短代码解析器是围栏感知的:位于 Markdown 围栏代码块内的短代码会被忽略,不会被提取为 Canvas。这确保了代码示例中的短代码不会被误解析。

Canvas 渲染规范

属性类型说明约束
kind"canvas"固定值必须
surface"assistant_message"渲染表面仅支持此值
render"url"渲染方式通过 URL 加载
urlstringCanvas 内容 URL可选
viewIdstring视图标识符可选
titlestring标题可选
preferredHeightnumber首选高度160-1200px
classNamestringCSS 类名可选
stylestring内联样式可选

URL 解析规则

当短代码使用 ref 而非完整 URL 时,系统自动解析为标准路径:

/__openclaw__/canvas/documents/<ref>/index.html

这使得 Agent 只需引用文档标识符,无需构建完整 URL。

设计考量

为什么选择声明式提取而非直接渲染?

方案优点缺点
声明式提取安全(Agent 无法直接注入 HTML)、可控(尺寸约束)、可审计灵活性受限、需要预定义格式
直接 HTML 渲染完全灵活XSS 风险、难以约束、安全风险高

围栏感知的重要性

围栏感知解析确保:

  1. 代码示例中的短代码不会被误执行
  2. Agent 可以安全地展示短代码语法作为教程
  3. 解析器能够区分”使用”和”展示”短代码

尺寸约束的必要性

Canvas 高度限制在 160-1200px 之间:

  • 最小值 160px:确保内容有足够空间展示
  • 最大值 1200px:防止单个 Canvas 占据过多屏幕空间

与其他交互模式的对比

模式描述适用场景
纯文本Agent 仅生成文本回复简单问答、解释说明
工具调用Agent 调用工具执行操作文件操作、代码执行
Canvas/A2UIAgent 生成可视化交互界面数据可视化、编辑器、仪表板

参考来源

  • A2UI 概念来源于 AI Agent 交互设计领域的通用模式
  • 短代码语法受 WordPress shortcode 和 Astro component 语法启发