会话管理和压缩(深入解析)
本文档解释 OpenClaw 如何端到端管理会话:会话路由、会话存储(sessions.json)、记录持久化(*.jsonl)、记录清洁、上下文限制、压缩以及静默维护。
高层概览见:/concepts/session、/concepts/compaction、/concepts/session-pruning
权威来源:Gateway
OpenClaw 围绕单一 Gateway 进程设计,它拥有会话状态。UI 应该查询 Gateway 获取会话列表和 token 计数。
两个持久化层
- 会话存储(
sessions.json) — key/value 映射,小、可变、可安全编辑,跟踪会话元数据。 - 记录(
<sessionId>.jsonl) — 追加式记录,树结构(条目有id+parentId),存储实际对话 + 工具调用 + 压缩摘要。
存储维护和磁盘控制
会话持久化有自动维护控制(session.maintenance):mode(warn/enforce)、pruneAfter(30d)、maxEntries(500)、rotateBytes(10mb)、maxDiskBytes 等。
Session key 和 Session id
sessionKey 标识你在哪个会话桶中(路由 + 隔离)。sessionId 指向当前的记录文件。Reset 创建新 sessionId,每日重置和空闲过期也是。
压缩
压缩将较旧的对话总结为持久的 compaction 条目,保留近期消息。压缩是持久的(不同于会话修剪)。
Pi 运行时中的自动压缩在溢出恢复或阈值维护时触发。
压缩前”记忆刷新”(已实现)
在自动压缩发生前,运行一个静默的 agentic 回合将持久状态写入磁盘(如工作空间中的 memory/YYYY-MM-DD.md),这样压缩不会擦除关键上下文。使用 NO_REPLY 抑制用户可见输出。
静默维护(NO_REPLY)
OpenClaw 支持后台任务的”静默”回合。助手以 NO_REPLY 开始输出表示”不要向用户投递回复”。2026.1.10 起还抑制 NO_REPLY 开头的草稿/typing 流式。
排查清单
- Session key 错了?从
/status确认。 - 存储与记录不匹配?确认 Gateway 主机和存储路径。
- 压缩频繁?检查模型上下文窗口、压缩设置、工具结果膨胀。
- 静默回合泄露?确认回复以
NO_REPLY开头。