Skip to content
广告 · 本站推荐广告

会话管理深入

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 天无活动归档并删除
存储清理存储空间超限清理最旧的归档会话
手动清理管理员指令按条件批量清理
合规清理数据保留期到期永久删除

数据安全

执行清理操作前建议先导出备份。永久删除操作不可恢复。

基于MIT协议开源 | 内容翻译自 官方文档,同步更新