模块 6Agent UX 与生成式 UI
Streaming UI
流式 UI 消费事件,不是拼接一个字符串
- Run、Message、Content、Tool、Approval 和 Artifact 事件分型
- 稳定 ID 关联生命周期
- Delta 与 Snapshot 不可混用
- 未知事件保留兼容性和诊断信息
Reducer 从事件推导可预测状态
状态集合
连接状态
- idle、connecting 与 reconnecting
- 网络状态不等于 Run 终态
运行状态
- streaming、waiting-tool 与 waiting-approval
- completed、failed 与 cancelled
终态不可被晚到 Delta 改写
- 同一事件幂等
- Tool 与消息状态独立
- UI 只渲染状态,不在组件中散落协议判断
SSE、Fetch Stream 与 WebSocket 的选择
- 单向服务事件、双向实时控制与基础设施约束
- 心跳、代理缓冲和连接上限
- 断线重连携带 Last Event ID 或游标
- 恢复失败时回拉服务器快照
渲染节奏与 Token 节奏解耦
- 按 animation frame 或时间窗口批量刷新
- Markdown 增量解析与未闭合结构
- 长列表虚拟化和 Artifact 懒加载
- 自动滚动尊重用户已离开底部
取消和重试必须表达真实后端状态
- 立即更新交互状态并发送取消信号
- 区分“停止展示”与“服务端已停止”
- 已执行 Tool 副作用不能随重试重复
- 重试从哪个检查点开始由服务端状态决定
动态内容也要可访问
- 避免每个 Token 触发 Screen Reader
- 状态变化用适度 live region
- 键盘可操作暂停、取消和跳转
- Reduced Motion、焦点保持和错误说明
用确定性事件回放测试概率 UI
- 正常文本、并行 Tool、审批和 Artifact
- 重复、乱序、晚到、截断和未知事件
- 断线恢复与服务器快照对账
- 性能、内存和 DOM 增长