八种渲染面
Profy 有八种将 Agent 产出内容展示给用户的通道。理解它们的区别有助于 Plugin 创作者选择正确的输出方式。总览对比
1. ToolCallCard(工具调用结果卡片)
位置:嵌入在聊天消息流中 特点:- 纯 React DOM 渲染(无 iframe)
- 代码高亮使用 Prism.js
- 支持展开/折叠
- 可包含图片(base64 或 URL)
tool_calls 事件自动渲染
展示能力:
- 文本结果(Markdown 渲染)
- 代码块(语法高亮)
- 图片(截图等)
- 结构化卡片(通过 plugin manifest
ui.toolCallCards模板) - 状态指示器(进行中/成功/失败)
2. Inline Visualization(内联可视化)
位置:嵌入在聊天消息流中(紧跟 ToolCallCard 之后) 特点:- 使用
<iframe srcdoc>渲染完整 HTML/CSS/JS - 沙箱化:
sandbox="allow-scripts"(无网络、无导航、无表单提交) - 自动高度适应内容(通过
postMessage上报document.body.scrollHeight) - 支持展开/折叠(默认最大高度 400px,展开后 800px)
- 支持暗色/亮色主题自动适配
result.inline_vis 字段(包含 title、html、可选 css)
通信协议:
- D3/Vega-Lite 数据图表
- Three.js 3D 场景预览
- 统计可视化
- 任何需要 JavaScript 交互的轻量可视化
- Inline Visualization 嵌入聊天流中(不占右侧面板)
- 无双向 JSON-RPC 通信(只单向上报高度)
- 适用于「看一眼就懂」的可视化,而非需要持续交互的工具
3. A2UI(Agent to UI)
位置:嵌入在聊天消息流中 特点:- 原生 React 组件渲染(非 iframe,性能优于 srcdoc)
- 声明式 JSON → 本地 UI 组件映射
- 支持用户交互:按钮点击触发 Action 回传给 Agent
- 16 种内置组件覆盖常见 UI 模式
- 主题、暗色模式自动适配
render_ui 工具 → 返回 result.a2ui 字段
组件分类:
交互循环:
- 结构化信息展示(套餐对比表、状态仪表盘)
- 需要用户确认/选择的交互卡片
- 业务数据展示(积分余额、订阅状态)
- 操作引导(按钮触发下一步)
- A2UI 是声明式 JSON,无需编写 HTML/CSS/JS
- 渲染为原生 React 组件(一致性更好,性能更优)
- 支持 Action 回调(真正的双向交互)
- 不支持自由绘图/Canvas/WebGL(受限于预定义组件集)
4. FilePanel(文件面板)
位置:右侧工作区「文件」Tab 特点:- 根据文件类型选择渲染方式
- 支持多种格式:图片、视频、音频、PDF、Markdown、代码、HTML/SVG
- HTML/SVG 使用
<iframe srcDoc>渲染(沙箱化) - 代码文件使用语法高亮
适用场景:查看 Agent 生成的文件产出物
5. Preview(实时预览)
位置:右侧工作区「预览」Tab 特点:- 通过
<iframe src={proxyUrl}>连接到沙箱内的 dev server - 默认端口 5173(TanStack Start / Vite)
- 支持 HMR(热模块替换),代码修改实时反映
- 完全交互式(可点击、滚动、输入)
open_preview 工具调用
适用场景:Sites 项目开发中的实时预览
6. Browser(浏览器面板)
位置:右侧工作区「浏览器」Tab 特点:- 通过 noVNC WebSocket 连接沙箱内的 Chrome 桌面
- 展示的是完整的浏览器 GUI(包括地址栏、标签栏)
- 用户可以直接通过 VNC 远程操作
browser(action="navigate") 触发打开
适用场景:
- 浏览器自动化过程的可视化观察
- 需要用户介入的操作(CAPTCHA 等)
- 复杂网页交互的调试
7. Widget(交互式组件)
位置:右侧工作区「Widget」Tab 特点:- 使用
<iframe srcDoc={html}>注入完整 HTML - 沙箱化:
sandbox="allow-scripts allow-forms" - 支持双向 JSON-RPC 通信(iframe ↔ 宿主)
- 可调用宿主提供的 MCP 工具
result.widget 字段
通信协议:
- 交互式游戏/演示
- 数据可视化仪表盘
- 表单工具
- 任何需要与 Agent 双向通信的富 UI
8. Video Timeline Widget(视频时间线编辑器)
位置:右侧工作区「Widget」Tab(Widget 的特化实例) 特点:- 基于 Twick SDK 的专业多轨时间线编辑器
- 通过 JSON-RPC bridge 与 Agent 双向通信
- Agent 可通过
timeline_edit工具程序化操作时间线 - 用户可手动拖拽、剪辑、调整片段
movie(action="assemble") 或 timeline_edit 工具调用后自动打开
Agent 操作:
- 专业视频剪辑
- 多轨时间线编排
- 视频片段拼接与转场
选择指南
Plugin 创作者指南
如果你在创建 Plugin,选择输出通道的建议:- 简短结果(< 500 字符)→ 直接返回文本,渲染为 ToolCallCard
- 截图/图片→ 返回 base64 图片,渲染为 ToolCallCard 图片
- 轻量可视化(图表/3D 预览)→ 通过
result.inline_vis返回,渲染为 Inline Visualization - 结构化交互 UI(按钮/表格/卡片)→ 通过
render_ui工具 +result.a2ui返回,渲染为 A2UI - 生成的文件→ 写入沙箱文件系统,FilePanel 自动展示
- 交互式工具 UI(需要自由 HTML + 双向通信)→ 通过
result.widget返回,渲染为 Widget - 实时开发预览→ 启动 dev server +
open_preview,渲染为 Preview - 浏览器自动化可视化→ 通过 browser 工具触发,渲染为 Browser

