模块 6Agent UX 与生成式 UI
Generative UI
模型选择 UI 能力,不拥有渲染器
- 前端注册允许的组件和操作
- 模型只输出组件类型、受限参数和数据引用
- Renderer 决定真实 DOM、样式和行为
- 未知组件或字段降级为安全文本/错误视图
UI 协议要表达结构但限制自由度
- 判别联合类型和组件版本
- Props Schema、数据类型和长度上限
- 有限的布局容器与嵌套深度
- 事件只引用白名单 Action,不传任意脚本
组件 Registry 是产品与治理边界
- 组件用途、适用条件和无障碍契约
- 允许的数据分类与交互权限
- 版本、Owner、实验状态和废弃流程
- 服务端/客户端能力协商
MCP Apps 把交互 UI 作为协议扩展交付
Server、Host 与 View 分担不同责任
- MCP Server 声明 Tool 和 UI Resource
- Host 决定是否信任、获取和承载 UI
- View 在隔离环境中渲染并通过受控 Bridge 通信
UI Resource 与 Tool Result 解耦
- 使用 ui:// 标识可审查和可缓存的模板资源
- Tool 元数据关联所需 UI,但数据仍来自调用结果
- 模板、数据与交互协议分别版本化
Host 拥有最终安全与体验边界
- Sandbox iframe、CSP 和外部 Origin 白名单
- 摄像头、麦克风等能力需要显式 Permissions
- postMessage/App Bridge 校验来源、消息类型和会话
扩展能力必须协商并可降级
- Host 不支持 UI 扩展时返回文本或结构化结果
- 未知版本、资源失效和渲染失败不得阻断 Tool 事实结果
- Server 升级前做跨 Host 兼容和供应链审查
数据与表现分离
- 大型数据通过 Artifact/Resource ID 引用
- 前端按当前用户权限重新获取
- 格式化、排序和计算使用确定性代码
- 禁止模型在展示参数中携带秘密或未验证 HTML
流式 UI 更新需要稳定 Patch 语义
- 先创建占位节点,再增量更新内容
- 按节点 ID 和版本应用 Patch
- 拒绝指向不存在/过期节点的更新
- 完成后做整树 Schema 与业务校验
用户交互回到 Agent 时保持语义
- Action ID、组件上下文和用户输入
- 再次校验身份、Schema 和当前状态
- 乐观更新只用于可回滚动作
- 防止重复提交和旧组件触发新状态
生成式 UI 的验收维度
- 任务完成效率和信息匹配
- 布局、响应式、无障碍和本地化
- Schema 合法率、降级率和组件误选
- XSS、URL、数据泄露和交互越权测试