15.3 会话管理深入

会话管理与压缩(深入解析)

本章节深入探讨 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>