会话管理与压缩(深入解析)
本章节深入探讨 OpenClaw 的会话管理和上下文压缩机制。
会话路由
会话通过 sessionKey 进行路由,确保消息正确关联到对应的会话。
双重持久化
OpenClaw 使用双重持久化机制来存储会话数据:
sessions.json- 存储会话元数据和配置.jsonl文件 - 存储会话转录记录(每行一个 JSON 对象)
转录结构
转录文件以 JSONL 格式存储消息历史,每行包含一条消息的完整信息。
上下文与令牌跟踪
OpenClaw 跟踪会话中的上下文使用情况和令牌消耗:
- 监控上下文窗口使用率
- 跟踪令牌消耗统计
- 在接近限制时触发压缩
自动压缩触发器
当满足以下条件时,系统会自动触发上下文压缩:
- 上下文窗口接近容量限制
- 令牌使用超过配置的阈值
压缩配置参数
{
"reserveTokens": 16384,
"keepRecentTokens": 8192
}
reserveTokens- 为新消息保留的令牌数量keepRecentTokens- 压缩时保留的最近令牌数量
静默清理
压缩过程使用 NO_REPLY 约定进行静默清理:
- 系统在后台执行压缩操作
- 不会向用户发送通知消息
- 保持会话流畅的用户体验
压缩前的内存刷新
在压缩之前,系统会执行"内存刷新"操作(已实现):
- 将重要的上下文信息提取并保存
- 确保压缩后不丢失关键信息
- 维护会话的连贯性
问题排查
在遇到会话相关问题时,请注意以下事项:
网关作为真实来源
网关是会话状态的权威来源。检查会话状态时应:
- 使用网关 API 或 CLI 命令
- 运行
openclaw status查看会话状态
远程模式警告
警告
在远程模式下,不要直接检查本地文件。本地文件可能不是最新的,应该始终通过网关 API 访问会话状态。
检查会话状态
# 查看会话状态
openclaw status
# 查看特定会话详情
openclaw session info <session-key>