两层持久化

  1. Session Store(sessions.json):key/value 映射,存储会话元数据(当前 session id、最后活跃时间、token 计数等)
  2. 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>
Croncron:<job.id>
Webhookhook:<uuid>

Session ID 重置时机

  • /new、/reset 命令
  • 每日重置(默认凌晨 4:00)
  • 空闲超时(session.reset.idleMinutes)

压缩(Compaction)

压缩将旧对话摘要化为 compaction 条目,保留最近消息。触发条件:

  1. 溢出恢复:模型返回上下文超限错误
  2. 阈值维护: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

相关页面