openclaw支持三种对话断点续传技术:一、服务端持久化,通过redis存储带过期时间的会话上下文;二、客户端缓存+服务端校验,利用localstorage与hash比对确保状态一致;三、websocket心跳续传,凭有效resume_token恢复流式响应。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

如果用户在使用OpenClaw进行对话过程中意外离开或中断连接,系统需支持从中断处恢复上下文继续交互。以下是实现对话断点续传的多种技术路径:
一、服务端持久化对话状态
将用户当前对话的完整上下文(包括历史消息、会话ID、时间戳、模型内部状态标识等)序列化后存储至数据库或键值存储中,确保服务重启或连接丢失后可重新加载。
1、为每个会话分配唯一且稳定的会话ID,并在首次请求时生成并返回给客户端。
2、每次收到用户新消息后,立即将更新后的对话历史(含role、content、timestamp字段)以JSON格式写入Redis,Key为session:{session_id},过期时间设为7天。
3、用户重连时携带该session_id,服务端优先查询Redis中对应Key是否存在且未过期。
4、若存在,则反序列化内容并重建对话上下文,将最后一条系统回复标记为已恢复续传状态,随后接入推理流程。
二、客户端本地缓存+服务端校验机制
在浏览器或App前端保存最近N轮对话快照,并在重连时主动提交本地缓存摘要供服务端比对,避免因网络延迟导致的状态冲突。
1、用户每发送一条消息后,前端将消息体、本地生成的message_id、时间戳及前序hash值存入localStorage。
当用户请求“启用语义缓存”、“缓存LLM响应”、“降低API成本”、“加速AI响应”、“配置LangCache”、“搜索语义缓存”、“存储响应到缓存”,或提及Redis LangCache、语义相似性缓存、LLM响应缓存时使用此技能。提供与Redis LangCache托管服务的集成,用于对提示和响应进行语义缓存。
2、页面卸载前触发beforeunload事件,调用/api/v1/session/commit接口上传本地最新message_id与hash摘要。
3、用户返回时,前端读取localStorage中缓存的最后5条消息,构造resume_request对象,包含last_message_id和client_hash字段。
4、服务端收到请求后比对Redis中同session_id下最后一条记录的message_id与hash,一致则启用缓存上下文,否则返回状态不一致,请刷新重试。
三、基于长连接的心跳续传协议
利用WebSocket维持长连接,在连接异常断开后通过心跳探测与重连令牌机制自动恢复未完成响应流,适用于流式输出场景。
1、客户端建立WebSocket连接后,服务端下发一个有效期为5分钟的resume_token,绑定当前socket通道ID与最后响应序号。
2、客户端监听onclose事件,若关闭码非1000(正常关闭),则在3秒内携带resume_token发起重连请求。
3、服务端验证resume_token有效性及对应通道是否仍保留在内存映射表中。
4、验证通过后,从断点序号起重新推送剩余token流,并在首帧中插入resume:true标识。









