OpenClaw Session 机制详解:重置、压缩、剪枝与记忆管理
凌晨 4 点,AI 助手突然说'你好,请问有什么可以帮你?',前一晚的对话历史凭空消失。这并非 Bug,而是 OpenClaw 默认的 Session 重置策略。作为开发者,如果不理解这套机制,很容易在关键业务场景中遭遇'失忆'问题。
本文基于实际踩坑经验,系统拆解 OpenClaw 的 Session 体系——从路由标识、生命周期管理,到上下文压缩、工具剪枝及持久化记忆方案,帮助你彻底搞懂'对话为什么会消失'以及'如何让 AI 记住你'。
Session 基础:消息如何找到'对的对话'
理解 Session,核心在于区分两层标识:
- Session Key(路由键):决定消息属于哪个'桶'。它是固定的,例如
agent:main:main。 - Session ID(对话记录):当前轮对话的实际文件。每次重置会生成新的 JSONL 文件,如
abc123.jsonl。
关键点:重置不等于删除。旧 JSONL 文件仍保留在磁盘上,只是模型不再读取。私聊配置 (dmScope) 决定了不同渠道是否共享 Session。默认 main 模式下,飞书私聊和 Web 私聊共享同一个会话;若需隔离,可设为 per-peer。
存储结构通常位于 ~/.openclaw/agents/<agentId>/sessions/,包含元数据映射和具体的对话日志文件。
Session 生命周期:何时开始与结束
Session 的生命周期由消息到达触发。流程如下:
- 检查 Session 是否过期(每日/空闲/手动)。
- 若过期,创建新 Session ID 并加载新 JSONL。
- 若未过期,继续使用当前 Session。
- 当上下文接近满时,触发自动压缩或 Memory Flush。
三种重置触发方式
1. 每日重置(默认启用)
配置示例:
{"session":{"reset":{"mode":"daily","atHour":4}}}
注意:重置不是瞬间完成的,而是在下一条消息到来时检查时间边界。如果你昨晚聊到 23:00,早上 9:00 发消息,此时才判定为'过期',从而创建新 Session。这就是'失忆'的根本原因。
2. 空闲重置
结合每日与空闲时长,先到期的生效:
{"session":{

