意项
39.91M · 2026-03-23
用过 OpenClaw 的人都会遇到一个问题:聊着聊着,AI 的回复开始变得迟钝、前言不搭后语,甚至报错"context too large"。这背后是大模型固有的 context window 限制在作怪。
OpenClaw 为此设计了一套完整的 Session 管理机制。理解它,能让你的 AI Agent 长期稳定运行。
OpenClaw 把每一个对话维度都映射成一个 Session:
Session 的核心标识是 sessionKey(比如 agent:main:feishu:direct:ou_xxx),状态保存在:
~/.openclaw/agents/<agentId>/sessions/sessions.json # Session 索引
~/.openclaw/agents/<agentId>/sessions/<sessionId>.jsonl # 完整对话历史
每个大模型都有 context window 上限(比如 Claude Sonnet 是 200k tokens)。一个长对话会不断往 context 里塞入:
积累到一定程度,不是报错,就是模型开始"忘事"。
OpenClaw 默认开启自动压缩。当 Session 接近 context window 上限时,自动触发:
之后的对话会看到:
在 verbose 模式下你会看到 Auto-compaction complete,/status 也会显示压缩次数。
不用等自动触发,随时可以手动压缩:
/compact
还可以带指令,引导 AI 怎么总结:
/compact 重点保留所有技术决策和代码变更,忽略闲聊
什么时候手动压缩比较好?
这两个概念容易混淆:
| 压缩(Compaction) | 裁剪(Pruning) | |
|---|---|---|
| 对象 | 整个对话历史 | 只针对 Tool 调用输出 |
| 方式 | 总结归纳 | 直接截断 |
| 持久化 | 写入 JSONL | 仅内存,每次请求临时处理 |
| 触发方式 | 自动 + 手动 | 自动(按配置) |
配置裁剪策略:
{
"agents": {
"defaults": {
"contextPruning": true
}
}
}
当你想彻底抛开旧的上下文、重新开始时:
/new
/reset
两个命令效果几乎相同:生成一个新的 Session ID,旧的 JSONL 文件保留存档(不会删除)。
唯一区别:/new 支持同时切换模型:
/new kimi
/new claude-opus
一条命令,重置 session + 切换模型,非常方便。
| 场景 | 建议 |
|---|---|
| 同一个项目,只是对话太长 | /compact |
| 切换到完全不同的话题 | /new |
| 发现 AI "记错了"重要信息 | /new |
| 切换模型顺便重置 | /new <model> |
Session 索引文件,记录每个 sessionKey 的元数据:
{
"agent:main:feishu:direct:ou_xxx": {
"sessionId": "abc123",
"updatedAt": "2026-03-03T06:00:00Z",
"inputTokens": 45000,
"outputTokens": 12000,
"totalTokens": 57000
}
}
每条消息、每次 tool call 都记录在 .jsonl 文件里,按行存储 JSON。这是 OpenClaw 的"单一真相来源",gateway 重启后从这里恢复状态。
默认情况下,所有私聊共享同一个 Session(dmScope: "main")。如果你的 Agent 会被多人使用,必须开启隔离,否则用户之间的上下文会互相泄漏!
// ~/.openclaw/openclaw.json
{
"session": {
"dmScope": "per-channel-peer"
}
}
dmScope 选项:
| 值 | 隔离维度 |
|---|---|
main | 所有 DM 共享(单用户推荐) |
per-peer | 按发送者隔离 |
per-channel-peer | 按渠道 + 发送者隔离(多用户推荐) |
per-account-channel-peer | 按账号 + 渠道 + 发送者(多账号场景) |
长期运行的 Agent,sessions.json 会不断增长。OpenClaw 内置了自动维护策略:
默认配置:
{
"session": {
"maintenance": {
"mode": "warn", // warn=只报告,enforce=真正清理
"pruneAfter": "30d", // 30天未活跃的 Session 归档
"maxEntries": 500, // 最多保留 500 个 Session 条目
"rotateBytes": "10mb" // sessions.json 超过 10MB 时轮转
}
}
}
建议生产环境开启 enforce 模式:
{
"session": {
"maintenance": {
"mode": "enforce",
"pruneAfter": "14d",
"maxEntries": 200
}
}
}
手动触发清理:
openclaw sessions cleanup
openclaw sessions cleanup --dry-run # 先预览,不真正删除
# 查看当前 Session 状态(token 使用量、压缩次数)
/status
# 查看 context 组成(哪些东西占了多少 token)
/context list
/context detail
# 压缩对话历史
/compact
/compact 保留技术决策,忽略闲聊
# 开新 Session
/new
/new kimi # 同时切换到 kimi 模型
# 查看所有 Session
openclaw sessions --json
# 清理过期 Session
openclaw sessions cleanup
OpenClaw 的 Session 管理是一个设计精良的系统:
/compact 让你在切换话题时保持清晰/new 重置 适合需要全新上下文的场景,还能顺便换模型理解这套机制,你的 OpenClaw Agent 就能在长时间、高强度使用下保持稳定和高效。