两层持久化
- Session Store(
sessions.json):key/value 映射,存储会话元数据(当前 session id、最后活跃时间、token 计数等) - Transcript(
<sessionId>.jsonl):追加式对话记录,含工具调用和压缩摘要,用于重建模型上下文
磁盘位置:
- Store:
~/.openclaw/agents/<agentId>/sessions/sessions.json - Transcripts:
~/.openclaw/agents/<agentId>/sessions/<sessionId>.jsonl
Session Key 模式
| 场景 | Key 格式 |
|---|---|
| 主/直接对话 | agent:<agentId>:<mainKey> |
| 群组 | agent:<agentId>:<channel>:group:<id> |
| 频道/房间 | agent:<agentId>:<channel>:channel:<id> |
| Cron | cron:<job.id> |
| Webhook | hook:<uuid> |
Session ID 重置时机
/new、/reset命令- 每日重置(默认凌晨 4:00)
- 空闲超时(
session.reset.idleMinutes)
压缩(Compaction)
压缩将旧对话摘要化为 compaction 条目,保留最近消息。触发条件:
- 溢出恢复:模型返回上下文超限错误
- 阈值维护:
contextTokens > contextWindow - reserveTokens
关键配置:
{
compaction: {
enabled: true,
reserveTokens: 16384,
keepRecentTokens: 20000,
truncateAfterCompaction: true,
maxActiveTranscriptBytes: "20mb",
},
}预压缩 Memory Flush
在压缩前触发静默轮次,将重要状态写入磁盘(memory/YYYY-MM-DD.md):
{
compaction: {
memoryFlush: {
enabled: true,
softThresholdTokens: 4000,
},
},
}静默轮次(NO_REPLY)
助手输出以 NO_REPLY 开头时,OpenClaw 不向用户投递回复,用于后台任务。
维护命令
openclaw sessions cleanup --dry-run
openclaw sessions cleanup --enforce相关页面
- docs/concepts/concept-session
- ref-transcript-hygiene