Skip to main content

交互式 UI(render_ui

Myrm 提供声明式 UI 工件链路:Agent 调用 render_ui → Server 推送 UI_UPDATE SSE → WebUI 在对话内渲染可交互组件。

启用方式

  1. 在聊天中打开 Agent 配置
  2. 开启 交互式 UIrender_ui)。
  3. 首次在有 workspace 的场景运行时会自动 seed .agent/docs/A2UI_REFERENCE.md(完整 props 手册)。
Turn1 工具描述约 223 token(瘦 docstring);完整组件 props 不会常驻 prompt。

Surface 门禁(仅 Web / 桌面)

内联 A2UI 仅在 Web 对话Tauri 桌面客户端挂载(client_surfacewebtauri)。Telegram、Discord、定时任务等非 Web 渠道在 Turn1 不会加载 render_ui_tool / update_ui_data_tool,Agent 以纯文本回复,并在这些渠道上每轮节省约 318 prompt token。语音(OpenAI Realtime、Gemini Live、agent bridge)同样不提供内联 A2UI:会话内没有 UI 渲染面,暴露 render_ui 只会浪费 token 并导致无效工具调用。开启「交互式 UI」时 Agent 配置页会显示说明;表单与 live 面板请使用 Web 对话或桌面客户端。 已验证(2026-07-20):Chrome E2E — 配置页 Web-only 提示、client_surface=web 注入、注入 window.__TAURI__client_surface=tauri、对话内 live inline 卡片(READ 2/2 + LIVE 1/1);agent-stream 集成断言各 surface 挂载/省略;lane resolver 确保 READ 测试不再误占 LIVE lease。

render_ui 默认关闭时

为保持 Prompt Cache 轻量,render_ui 默认关闭。若你直接要求「填表 / 部署清单」等交互 UI 而未开启:
  1. Preflight 在 Agent 运行前推送 capability_gap SSE。
  2. WebUI 弹出 toast — 点 开启并重发
  3. 若首轮 stream 仍在 loading,pendingGapRetry 会等到 MESSAGE_END / ERROR / CANCEL 后自动重发(已开启 render_ui)。
  4. 第二轮在气泡内渲染 A2UI 表单 — 无需去设置页
OpenClaw、Hermes、jiuwenclaw 等竞品无此「预检 + 延迟自动重发」闭环,用户需自行找设置或重打一遍消息。

A2UI v3.1 要点

投递链路(SSE)

工具可能在 LangGraph 子 asyncio 任务中执行,此时 ArtifactContext 的 ContextVar 不可见。Myrm 按 assistant message_id stash UI 工件(run 级绑定 + post_run 弹出),确保 UI_UPDATE SSEMESSAGE_END 前到达 WebUI。 回归覆盖(2026-07-10):20 项 SSE wiring + 13 项 stream-collector + 12 项前端 Vitest(含 data_update 深合并)+ 架构枚举 parity + 1 项真实 LLM agent-stream E2E(minimax/MiniMax-M3)——关键路径 66 项全绿。GUI & UX 审计通过:65 项 A2UI 交互组件 + 105 项 ArtifactCard + 68 项 ProgressSteps + 73 项审批系统 + 6 项 gapEvents = 317 项前端测试全通过

增量数据更新(update_ui_data

长生命周期 UI(进度条、任务列表、实时指标)无需每次全量 render_ui 重绘。Agent 调用 update_ui_data 推送 data_update 事件,WebUI 深合并 data 模型字段(嵌套对象保留兄弟键,数组按 key 替换)。 用户收益:部署清单、批处理进度、监控面板类 UI 可实时刷新,不闪烁、不丢用户已填字段。

数据绑定(bindings

组件可声明 bindingsprop 名 → 数据路径的映射,如 {"text": "$.status"})。前端每次渲染时data 模型解析被绑定的 prop 并覆盖静态值,让展示与表单组件完全数据驱动。配合 update_ui_data,Agent 只需推送变化的数据切片,绑定 prop(进度百分比、状态徽章、表格行、表单值)原地更新——无需整份 artifact 重绘,也无 Markdown 再生成。

JSON 结构(邻接表)

竞品对比

简单澄清问题请优先 ask_question_tool,不必搭完整 UI。在桌面端,提问通过独立反馈窗口呈现——一个不阻塞聊天流的聚焦对话框。 OpenClaw 用浏览器 question-prompt 组件呈现同一确认;Hermes / deer-flow / CoPaw / LobsterAI 仅有终端文本 prompt,无队列、无超时、无草稿生命周期。

大文件内联预览保护

HTML/SVG/Mermaid 工件默认在对话流内自动展开渲染。当工件超过 1 MBLARGE_FILE_THRESHOLD)时,内联渲染器自动优雅降级:
  1. 不执行内容 fetch 或 srcDoc 渲染(防止 OOM / 浏览器卡顿)。
  2. 显示精简降级卡片:文件大小提示 + “全屏查看” 按钮。
  3. 点击按钮打开 ArtifactPortal,通过隔离 URL 模式(iframe src)安全渲染——无论文件多大均无性能风险。
避免用户因大文件(数据仪表盘、复杂 SVG 信息图)导致的空白/卡死而误认为”Agent 任务失败”。 另见:Agent 配置 — 工具加载策略