会话管理深入
Session Management(会话管理)是 OpenClaw 保持 Agent 对话连贯性的核心机制。本文深入探讨会话压缩算法、存储内部结构与维护策略。
会话压缩算法
为什么需要压缩
随着对话轮次增加,上下文 Token 不断累积。Compaction(压缩)在 Token 接近上下文窗口限制时自动触发,将早期对话摘要化以释放空间。
对话轮次: 1 → 2 → 3 → ... → N
Token 累积: 500 → 1200 → 2100 → ... → 阈值触发压缩压缩策略
OpenClaw 支持多种压缩策略:
| 策略 | 说明 | 适用场景 |
|---|---|---|
summary | 用 LLM 将早期对话总结为摘要 | 通用场景 |
sliding | 滑动窗口,丢弃最早的消息 | 低成本场景 |
selective | 保留关键消息,压缩其余部分 | 任务导向对话 |
yaml
# openclaw.config.yaml
session:
compaction:
enabled: true
strategy: 'summary'
threshold: 4000 # Token 阈值
preserveLastN: 10 # 保留最近 N 轮对话
summaryModel: 'gpt-4o-mini' # 用于生成摘要的模型压缩流程
检测 Token 数 → 超过阈值?
│ │
No → 继续 Yes → 执行压缩
│
┌─────────┼─────────┐
│ │ │
summary sliding selective
│ │ │
└─────────┼─────────┘
│
替换早期消息为摘要
│
更新会话状态压缩透明性
压缩对用户完全透明,不会影响对话体验。Agent 仍能基于摘要理解早期对话的关键信息。
会话存储内部机制
存储结构
data/
├── sessions/
│ ├── {agentName}/
│ │ ├── {userId}/
│ │ │ ├── session.json # 会话元数据
│ │ │ ├── transcript.jsonl # 对话转录
│ │ │ └── compaction.json # 压缩记录session.json 结构
json
{
"id": "sess-abc123",
"agentName": "main",
"userId": "user-456",
"channel": "wechat",
"createdAt": "2026-03-01T10:00:00Z",
"lastActiveAt": "2026-03-05T14:30:00Z",
"tokenCount": 3200,
"messageCount": 42,
"compactionCount": 2,
"metadata": {}
}JSONL 转录格式
会话转录使用 JSONL(JSON Lines)格式存储,每行一条消息:
jsonl
{"role":"system","content":"你是客服助手...","ts":"2026-03-01T10:00:00Z"}
{"role":"user","content":"我想查询订单","ts":"2026-03-01T10:00:05Z"}
{"role":"assistant","content":"请提供您的订单号","ts":"2026-03-01T10:00:06Z","tokens":{"in":1200,"out":15}}
{"role":"user","content":"ORD-20260301-001","ts":"2026-03-01T10:00:15Z"}
{"role":"tool_call","name":"order_query","params":{"orderId":"ORD-20260301-001"},"ts":"2026-03-01T10:00:16Z"}
{"role":"tool_result","name":"order_query","result":{"status":"shipped"},"ts":"2026-03-01T10:00:17Z"}JSONL 优势
JSONL 格式支持流式写入和逐行读取,非常适合日志类数据,不会因文件损坏丢失所有记录。
维护调度
自动维护任务
yaml
session:
maintenance:
# 会话过期清理
expiry:
enabled: true
maxIdleDays: 30 # 空闲超过 30 天的会话自动归档
schedule: '0 3 * * *' # 每天凌晨 3 点执行
# 转录文件轮转
rotation:
enabled: true
maxFileSize: '10MB' # 单文件最大体积
compress: true # 归档时压缩
# 存储空间监控
storage:
maxTotalSize: '10GB'
alertThreshold: 0.8手动维护命令
bash
# 查看会话统计
openclaw session stats
# 清理过期会话
openclaw session cleanup --older-than 30d
# 归档指定会话
openclaw session archive --user user-456
# 导出会话
openclaw session export --user user-456 --format json会话清理策略
| 策略 | 触发条件 | 操作 |
|---|---|---|
| 空闲清理 | 超过 N 天无活动 | 归档并删除 |
| 存储清理 | 存储空间超限 | 清理最旧的归档会话 |
| 手动清理 | 管理员指令 | 按条件批量清理 |
| 合规清理 | 数据保留期到期 | 永久删除 |
数据安全
执行清理操作前建议先导出备份。永久删除操作不可恢复。
