会话恢复与持久化
会话状态持久化后支持重连与换设备恢复。要存的是结构化状态——摘要、实体表、未决事项、最后一条消息标识——而不是整段原始消息,既省存储也省恢复时间。恢复时先校验状态版本与时效,版本不兼容或超期就降级为新会话或只读回放。
基本信息
| 存什么 | 摘要、实体表、未决事项、最后处理的消息标识 |
|---|---|
| 不存什么 | 整段原始消息、敏感字段原文 |
| 恢复流程 | 读状态 → 校验版本 → 缺失则重建摘要 → 注入上下文 |
| 时效 | 超期会话降级为新会话或只读回放 |
| 版本迁移 | 状态结构升级需带迁移逻辑,旧数据不可直接反序列化 |
典型使用场景
- 换设备继续:手机上开始的会话在电脑上接着聊,摘要与实体表保证一致性
- 服务重启恢复:进程重启后从存储读回状态,用户不必重述背景
- 超时重回:用户几小时后再回来,按时效规则决定是续用还是新建
- 客服转接:把结构化状态交给下一环节,而不是转一大段原始记录
- 审计与复盘:状态快照可用于还原当时的上下文构成
持久化结构示例(JSON)
持久化结构示例(JSON)
{
"session_id": "s-8871",
"state_version": 4,
"summary": "目标 / 已达成的结论 / 关键约束 / 未决事项",
"entities": {"timezone": "Asia/Shanghai", "lang": "zh"},
"last_turn_id": 118,
"updated_at": "2026-10-12T10:30:00+08:00",
"expires_at": "2026-11-11T10:30:00+08:00"
}
# 恢复时: 校验 state_version 与 expires_at,超期或版本不符则重建字段与用途
| 字段 | 用途 | 注意 |
|---|---|---|
| state_version | 判断能否直接反序列化 | 结构升级必须配套迁移 |
| summary | 恢复对话状态 | 本身也要受版本影响 |
| entities | 恢复用户偏好与业务标识 | 冲突值以较晚确认的为准 |
| last_turn_id | 避免重复处理 | 与消息存储对账 |
| expires_at | 判断时效 | 过期走降级路径 |
持久化状态里不要放敏感原文:会话存储往往保留时间更长、访问面更广,一旦带上原始内容,泄露窗口比在线会话大得多。
恢复动作要幂等:同一次恢复可能被重复触发(重连、刷新、多设备同时进入),状态写入前先确认当前版本,避免两次恢复互相覆盖。