鸿蒙端渲染 SSE 流式回答:状态机比动画更重要
把等待首字、持续输出、完成、失败和恢复拆成明确状态,而不是只写成功路径。
流式交互的核心是状态机
AI 问答一旦变成流式输出,页面就不只是“请求前 / 请求后”两个状态。至少要设计:
idle:等待用户提问。connecting:建立连接,等待首个事件。streaming:增量渲染答案。finished:补齐来源与反馈按钮。interrupted:连接断开,保留已生成内容。failed:失败并给出重试。
事件协议
后端事件应尽量简单:delta 表示增量文本,sources 表示来源,done 表示结束,error 带稳定错误码。端侧根据事件驱动状态,不靠猜字符串。
渲染建议
- 每次增量追加到同一条消息,避免生成一堆气泡。
- Markdown 渲染放在完成态,流式过程先渲染纯文本,减少布局抖动。
- 来源引用必须可点击,并保留标题。
- 用户切换页面时明确是取消请求还是后台继续。
断线处理
保留已收到内容,同时显示“连接中断”。直接清空屏幕会让用户失去上下文。如果接口支持续传或重新生成,再提供对应按钮。
评论
Giscus 评论配置完成后自动开启。可在
.env中填写 GISCUS_* 变量。