Phase 7 / Ep 35: Session 深度解析 —— 对话的生命周期

⏱ 预计阅读 4 分钟 更新于 2026/4/13

🎯 学习目标:理解 Session 的完整生命周期和上下文窗口管理。

1. Session 是什么?

Session = 一次连续对话的完整记录。从你发第一条消息到对话结束,所有内容都存储在一个 Session 中。

2. Session 生命周期

stateDiagram-v2
    [*] --> Active: 用户发起对话
    Active --> Active: 持续对话
    Active --> Compacting: 上下文窗口即将满
    Compacting --> Active: 压缩完成\n保留核心信息
    Active --> Idle: 用户停止对话\n(超过 30 分钟)
    Idle --> Active: 用户回来继续
    Idle --> Archived: 超过 24 小时\n自动归档
    Archived --> [*]

3. 上下文窗口管理

LLM 有上下文窗口限制(如 Claude 200K Token)。当对话越来越长,Session 会自动触发压缩 (Compaction)

graph LR
    A["原始对话\n1000 条消息\n180K Token"] -->|"压缩"| B["保留:\n最近 50 条原始消息\n+ 历史摘要 5K Token\n总计 55K Token"]

压缩策略

策略 说明
保留近期 最近 N 条消息保持原样
摘要历史 旧消息生成摘要
保留关键 含工具调用的消息优先保留
丢弃闲聊 纯寒暄消息优先丢弃

4. Session 存储格式

sessions.json(索引)

[
  {
    "id": "session-abc123",
    "startedAt": "2026-04-06T08:00:00Z",
    "lastMessageAt": "2026-04-06T10:30:00Z",
    "status": "archived",
    "messageCount": 47,
    "summary": "讨论了 OpenClaw 教程的架构设计"
  }
]

session-xxx.jsonl(完整记录)

每行一条消息,JSON Lines 格式:

{"role":"user","content":"帮我查天气","timestamp":"2026-04-06T08:00:00Z"}
{"role":"assistant","content":"北京今天晴,28°C","timestamp":"2026-04-06T08:00:03Z","tools_used":["web-search"]}

5. 管理命令

openclaw sessions list                # 列出所有 Session
openclaw sessions show <id>           # 查看详情
openclaw sessions clear               # 清除当前活跃 Session
openclaw sessions archive <id>        # 手动归档
openclaw sessions compact             # 手动触发压缩
openclaw sessions export <id> > out.json  # 导出

下节预告: Ep 36,Memory 系统——MEMORY.md 与分层记忆架构。Agent 如何跨 Session 记住事情。