网络中断后恢复 AI 数字人会话,关键不是“马上重连”,而是保留用户任务、判断哪一层失败,并从不会重复重要动作的安全边界恢复。数字人呈现状态可以丢失,但应用的任务状态不应随连接一起消失。
核心结论
- 将业务任务、Agent 会话与数字人连接状态分开保存。
- 根据真实错误分类重试,不要把认证和格式错误当成网络抖动。
- 使用有上限的指数退避和明确的恢复截止时间。
- 恢复前判断上一段语音是否完整播放、是否需要用户确认。
分离呈现状态与任务状态
应用应继续拥有当前用户任务、权限、工具结果、待确认动作和人工交接状态。数字人连接只负责呈现批准后的语音。这样即使动作连接中断,产品也能切换到文字或音频,而不必重新执行工具或丢失表单进度。
识别真正的故障
记录浏览器在线状态、WebSocket close code 或 RTC 状态、Token 年龄、最后一个发送和接收序号、音频播放位置与当前产品状态。MDN 的 WebSocket close event可以帮助解释基础关闭信号,但产品仍需自己的错误分类。
认证失败、权限不足、无效音频和资源不兼容不应自动重试;短时网络中断、临时服务不可用或移动网络切换可以进入受控恢复。
使用有限退避和恢复时限
指数退避应加入随机抖动,避免大量客户端同时重连。Google Cloud 的指数退避说明给出了通用原则。产品还需要一个用户可理解的截止时间:超过该时间后切换到音频、文本或结束会话,而不是无限转圈。
从安全边界恢复
不要默认重复最后一句话。先检查音频是否已完成、是否只播放了一部分、该内容是否与工具动作有关,以及重复是否可能误导用户。短说明可以从句子边界重播;涉及付款、提交或确认的内容则应显示状态并请求用户继续。
上线前测试网络切换
至少覆盖 Wi-Fi 到蜂窝网络、短暂离线、后台再前台、Token 过期、长回答中断和工具执行期间断线。记录恢复耗时、重复语音、丢失任务、用户退出和回退成功率。
Spatius 集成中的恢复
在 Direct Mode 中,AvatarKit 客户端连接 Motion Server;其他模式可能让后端承担更多传输责任。先根据集成指南确定谁拥有连接与恢复,再设计产品级任务保留和回退。
故障定位可继续阅读如何调试实时 AI 数字人会话。
常见问题
是否应该自动重复上一次回答?
不应该默认重复。先判断播放进度、内容风险和工具状态;必要时让用户确认。
什么时候停止重试?
达到次数或时间上限、故障不可重试、用户离开,或已有更可靠的文本、音频或人工路径时。