Skip to content

Sessions 会话管理详解

前置知识:本章节面向具备 TypeScript/Node.js 基础、了解 WebSocket 实时通信的开发者。 目标读者:希望深入理解 OpenClaw 会话管理内部实现、进行问题诊断或二次开发的开发者。 维护状态:本文档基于 OpenClaw v2026.4+ 源码分析。

📖 入门参考:若您希望了解如何使用会话管理(而非其内部实现),请参阅 使用手册


1. 会话核心概念

1.1 会话的作用

1.2 关键文件

文件职责
session-id.ts会话 ID 生成与解析
session-key-utils.ts会话键工具
session-lifecycle-events.ts生命周期事件
session-utils.ts会话操作工具
transcript-events.tstranscript 事件

2. 会话键 (Session Key)

2.1 会话键格式

2.2 不同类型的会话键

类型格式说明
直接消息agent:<id>:main主会话
用户私聊agent:<id>:user:<open_id>按用户隔离
群组消息agent:<id>:<channel>:group:<id>群组会话
定时任务cron:<job_id>Cron 任务会话

2.3 会话键解析

typescript
// 解析会话键
const sessionKey = "agent:tars:user:ou_123";
// → { agentId: "tars", type: "user", id: "ou_123" }

3. 会话范围 (dmScope)

3.1 四种隔离级别

3.2 各范围对比

范围私聊隔离跨通道共享推荐场景
main单用户
per-peer多用户同通道
per-channel-peer多用户多通道
per-account-channel-peer多账户

3.3 配置示例

json5
{
  session: {
    dmScope: "per-channel-peer"  // 推荐多用户使用
  }
}

4. 会话生命周期

4.1 生命周期状态机

4.2 生命周期事件

typescript
// 事件类型
type SessionLifecycleEvent = 
  | { type: 'created'; sessionKey: string }
  | { type: 'activated'; sessionKey: string }
  | { type: 'idle'; sessionKey: string; idleMs: number }
  | { type: 'archived'; sessionKey: string }
  | { type: 'deleted'; sessionKey: string };

4.3 会话维护配置

json5
{
  session: {
    maintenance: {
      mode: "enforce",        // 强制执行
      pruneAfter: "45d",      // 45天后归档
      maxEntries: 800,       // 最大条目数
      rotateBytes: "20mb"     // 日志轮转大小
    }
  }
}

5. 上下文管理

5.1 上下文组成

5.2 上下文大小限制

模型上下文窗口实际可用
Claude Opus200K~180K
Claude Sonnet200K~180K
GPT-4128K~115K
GPT-3.516K~14K

5.3 上下文压缩触发


6. 会话持久化

6.1 存储结构

6.2 会话文件格式

~/.openclaw/agents/<agentId>/sessions/
├── session-2024-01-01.jsonl   # 每日会话日志
├── session-2024-01-02.jsonl
└── ...

6.3 JSONL 格式

json
{"type":"user","content":"你好","timestamp":"2024-01-01T10:00:00Z"}
{"type":"assistant","content":"你好!","timestamp":"2024-01-01T10:00:01Z"}
{"type":"tool","name":"exec","input":{"command":"ls"},"output":"..."}

7. 会话搜索

7.1 搜索类型

7.2 混合搜索配置

json5
{
  agents: {
    defaults: {
      memorySearch: {
        query: {
          hybrid: {
            enabled: true,
            vectorWeight: 0.7,
            textWeight: 0.3,
            mmr: {
              enabled: true,
              lambda: 0.7
            }
          }
        }
      }
    }
  }
}

7.3 MMR (最大边际相关性)


8. 会话重置与压缩

8.1 手动控制命令

命令作用
/new开始新会话
/reset重置当前会话
/compact [指令]压缩上下文

8.2 重置流程

8.3 压缩流程


9. 多会话管理

9.1 并发会话

9.2 查看会话列表

bash
# 列出所有会话
openclaw sessions list

# 查看特定会话
openclaw sessions view <session-key>

# 搜索会话
openclaw sessions search <query>

10. 安全与隔离

10.1 会话隔离原则

10.2 敏感数据处理

数据类型处理方式
API Keys存储在 .env,不写入会话
用户隐私加密存储
对话历史定期清理

11. 延伸阅读