简要总结
Session Management Deep Dive
这页说明书就像一本“对话小管家”的说明书。它告诉你,当你和电脑里的智能助手聊天时,它怎么记住你们聊过的所有事情,以及当聊天内容太多、记不住的时候,它怎么把旧的事情变成一个小总结,好继续记住新的事情。如果你想知道聊天记录是怎么保存的,或者为什么有时候聊天会“重新开始”,就可以看看这一页。
五岁小孩版解释
OpenClaw 就像一个聪明的对话小管家,它会把你们的每一次聊天都好好地记下来。它主要用两个小本本来记。
- 第一个小本本叫
sessions.json:你可以把它想成是一个“目录本”。它很小,里面记着每个聊天现在用哪个大本本,还有聊天的名字、上次聊天的时间、一些开关设置(比如要不要多思考一下)等等。这个目录本可以安全地修改。 - 第二个小本本就是真正的“聊天大本本”,名字像
<聊天编号>.jsonl。它会把你们说的每一句话、助手做的每一件事,都按顺序记下来,就像一棵不断长大的树。这个本本只会往后增加内容,不会修改前面写好的东西。
这两个本本都放在电脑上一个叫 ~/.openclaw/agents/<助手名字>/sessions/ 的文件夹里。
小管家很爱干净,它会自动打扫,不让本本太多太乱。你可以告诉它怎么打扫:
mode:可以选warn(只提醒)或者enforce(真的动手打扫)。pruneAfter:如果一个聊天超过这么多天(比如30天)没人说话,就可以清理掉。maxEntries:目录本里最多记多少个聊天。maxDiskBytes:整个聊天文件夹最多用多少电脑空间。
如果选 enforce,小管家会先清理最旧的、没人要的聊天大本本,如果空间还不够,就清理最旧的聊天目录和它的大本本,直到空间够用为止。
你也可以自己动手打扫,用这两个命令:
openclaw sessions cleanup --dry-run (先看看哪些会被打扫,但不动手)
openclaw sessions cleanup --enforce (真的开始打扫)
聊天是怎么被认出来的?
每次聊天都有一个“聊天钥匙”(sessionKey),就像不同房间的钥匙。直接和助手聊天、在群里聊天、或者定时任务,都有不同的钥匙。这把钥匙决定了你们的对话会进到哪个“聊天桶”里。
聊天为什么会“重新开始”?
每个“聊天钥匙”指向一个当前正在用的“聊天大本本”(sessionId)。在几种情况下,会换一个新的大本本,感觉就像聊天重新开始了:
- 你用了
/new或/reset命令。 - 到了每天凌晨4点(管家电脑的时间),下次发消息时会开新本本。
- 聊天闲置太久(比如设置了
session.reset.idleMinutes),下次有人说话时会开新本本。 - 如果从一个很长的聊天里开新话题,但原来的本本已经太大了(超过
session.parentForkMaxTokens设置,默认10万个词),新话题也会用一个全新的本本开始。
当聊天内容太多,记不住了怎么办? 这就是“压缩”(Compaction)。小管家会把很久以前的聊天内容,变成一个简短的小总结,写进聊天大本本里。这样,以后再看时,就看到这个总结和最近的新消息,又能记住很多东西了。压缩是永久性的,总结会一直留在本本里。
小管家会在两种情况下自动压缩:
- 模型说“内容太多,装不下了!”的时候。
- 聊天内容快装满模型脑子的时候(
contextTokens > contextWindow - reserveTokens)。
你可以设置压缩的规则,主要看这两个数:
reserveTokens:要留出多少空间,给提示词和助手的回答。OpenClaw 会保证它至少是 20000,这样压缩前还有空间做点别的事。keepRecentTokens:压缩时要保留最近多少词的内容不动。
压缩前先存好重要记忆
小管家很贴心,在自动压缩快要发生之前,它会偷偷地(不让用户看见)让助手把重要的记忆写到硬盘上的日记里(比如 memory/YYYY-MM-DD.md)。这样,即使压缩把旧聊天变成了总结,重要的记忆也已经单独保存好了。这个功能默认是打开的。
怎么知道压缩发生了? 你可以用这些方法看看:
- 在聊天里输入
/status命令。 - 在命令行输入
openclaw status或openclaw sessions。 - 如果打开了详细模式,你会看到
🧹 Auto-compaction complete这样的消息。
如果出了问题怎么办?
- 聊天跑错房间了?先用
/status命令看看现在的sessionKey对不对。 - 找不到聊天记录了?确认一下你查看的电脑是不是“小管家”运行的那台电脑。
- 压缩发生得太频繁了?检查一下:模型的“脑子”(上下文窗口)是不是太小了;
reserveTokens是不是设得太大了;是不是工具返回的结果太长了(可以试试调整“会话修剪”设置)。