跟 Bot 聊久了,你会注意到它记得你之前说的话。有时候这很有用,有时候你想开启一段全新的对话。这篇讲清楚 OpenClaw 的会话是怎么工作的,以及怎么管理它。

一、什么是会话(Session)

OpenClaw 里的会话,简单理解就是 Bot 的短期记忆:在同一个会话里,Bot 记得你们聊过的所有内容;开启新会话后,Bot 从零开始,忘掉之前的一切。

每个对话窗口(每个 Channel、每个聊天对象)默认有独立的会话。比如你在 Telegram 里和 Bot 说的话,飞书里是感知不到的。

二、手动重置会话

想开启新对话,直接在任意 Channel 里发:

text
1/new

或者:

text
1/reset

Bot 会清空当前会话的上下文,回复确认后,就像第一次见面一样重新开始。

三、查看会话状态

想知道当前会话用了多少上下文(token)、还剩多少空间,发:

text
1/status

Bot 会回复类似这样的信息:

text
1Context window: 45% full (18,400 / 40,960 tokens)
2Session started: 2 hours ago
3Last reset: never

更详细的上下文分解:

text
1/context list

可以看到各部分(对话历史、工具调用记录、注入的文件等)分别占了多少。

四、自动重置

不想每次手动重置?可以设置自动重置规则。

每天定时重置

默认情况下,OpenClaw 会在每天凌晨 4 点自动重置所有会话。如果你想改时间,在 ~/.openclaw/openclaw.json 里修改:

json
1{
2  "session": {
3    "resetPolicy": {
4      "dailyResetHour": 6
5    }
6  }
7}

6 改成你想要的小时数(0–23,本地时间)。

空闲超时重置

如果超过一段时间没有对话,自动重置:

json
1{
2  "session": {
3    "resetPolicy": {
4      "dailyResetHour": 4,
5      "idleTimeout": "2h"
6    }
7  }
8}

上面的配置表示:空闲超过 2 小时自动重置。常见的值:30m1h2h12h

五、多人使用时的会话隔离

如果你的 Bot 分享给了多个人用(参见第7篇),默认情况下他们共用同一个会话,也就是说 A 和 B 都能看到对方聊过的内容。

这通常不是你想要的。用 dmScope 来隔离:

json
1{
2  "session": {
3    "dmScope": "per-channel-peer"
4  }
5}

这样每个人都有自己独立的会话,互不干扰。

dmScope 的三个选项:

说明
main(默认)所有私聊共用一个会话
per-channel-peer每个 Channel + 每个用户各自独立
per-account-channel-peer更严格,同一用户在不同账号下也隔离

多人使用时推荐 per-channel-peer

六、上下文是什么

理解了会话,再了解一下**上下文(context)**的概念会很有帮助。

每次 Bot 回复你,它实际上是把以下内容一起打包发给 AI 模型:

  • 系统提示(OpenClaw 自动生成的规则和工具列表)
  • 对话历史(你们聊过的内容)
  • 工具调用记录(Bot 查询或执行过的结果)

这些加起来就是"上下文",有长度限制(取决于你用的模型)。当上下文太长,老的内容会被自动压缩或裁剪。

手动发 /status 可以随时查看上下文使用率,避免聊到一半 Bot 开始"失忆"。

七、会话存储与清理

OpenClaw 会把历史会话存在本地,时间久了会占用磁盘空间。默认规则:

  • 超过 30 天的旧会话自动清理
  • 最多保留 500 条会话记录

如果想手动清理,先预览:

bash
1openclaw sessions cleanup --dry-run

确认没问题后执行清理(去掉 --dry-run 即可)。

也可以在 openclaw.json 里调整存储限制:

json
1{
2  "session": {
3    "storage": {
4      "maxAge": "30d",
5      "maxEntries": 500
6    }
7  }
8}
下一篇:Skills 插件系统——给 Bot 装上新技能。