跟 Bot 聊久了,你会注意到它记得你之前说的话。有时候这很有用,有时候你想开启一段全新的对话。这篇讲清楚 OpenClaw 的会话是怎么工作的,以及怎么管理它。
一、什么是会话(Session)
OpenClaw 里的会话,简单理解就是 Bot 的短期记忆:在同一个会话里,Bot 记得你们聊过的所有内容;开启新会话后,Bot 从零开始,忘掉之前的一切。
每个对话窗口(每个 Channel、每个聊天对象)默认有独立的会话。比如你在 Telegram 里和 Bot 说的话,飞书里是感知不到的。
二、手动重置会话
想开启新对话,直接在任意 Channel 里发:
text
1/new或者:
text
1/resetBot 会清空当前会话的上下文,回复确认后,就像第一次见面一样重新开始。
三、查看会话状态
想知道当前会话用了多少上下文(token)、还剩多少空间,发:
text
1/statusBot 会回复类似这样的信息:
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 小时自动重置。常见的值:30m、1h、2h、12h。
五、多人使用时的会话隔离
如果你的 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}