Phase 7 / Ep 35: Session 深度解析 —— 对话的生命周期
🎯 学习目标:理解 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 记住事情。