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

会话管理

Session(会话)是 Agent 与用户交互的有状态容器。每个会话维护独立的对话历史、上下文与配置。

会话基础

核心规则

每个 Agent 对每个用户维护一个直接聊天(DM)会话。群组会话按群组 ID 独立创建。

会话键(Session Keys)

会话通过唯一的 Session Key 标识:

# 直接消息(DM)会话
agent::<peer-id>

# 群组会话
agent:::<group-id>:<peer-id>
text
general::user_12345
coder::telegram_67890
writer::whatsapp_11111
text
general:::group_dev_team:user_12345
coder:::group_code_review:telegram_67890

会话状态存储

sessions.json

会话元数据保存在 sessions.json 中:

json
{
  "general::user_12345": {
    "sessionKey": "general::user_12345",
    "agentName": "general",
    "peerId": "user_12345",
    "channel": "telegram",
    "createdAt": "2025-01-15T08:00:00Z",
    "lastActiveAt": "2025-01-15T10:30:00Z",
    "messageCount": 42,
    "model": "openai/gpt-4o"
  }
}

JSONL 转录

对话历史以 JSONL(JSON Lines)格式存储:

~/.openclaw/sessions/general::user_12345/transcript.jsonl

每行一条消息记录:

json
{"role":"user","content":"你好","timestamp":1705305600000}
{"role":"assistant","content":"你好!有什么可以帮助你的吗?","timestamp":1705305601500}

DM 作用域(dmScope)

dmScope 控制直接消息会话的隔离粒度:

模式说明会话键示例
main所有 DM 共享一个会话agent::main
per-peer每个用户独立会话agent::user123
per-channel-peer每个渠道+用户独立agent::telegram:user123
per-account-channel-peer每个账号+渠道+用户独立agent::acc1:telegram:user123
yaml
# 配置 DM 作用域
dmScope: per-peer  # 推荐:每个用户独立会话

选择建议

  • 个人使用main(一个会话即可)
  • 多用户服务per-peer(每个用户独立上下文)
  • 多渠道运营per-channel-peer(同一用户在不同渠道独立)

会话重置

会话可通过以下方式重置:

自动重置

yaml
# 每日凌晨 4 点自动重置
sessionReset:
  daily: "04:00"
  
# 或基于空闲时间重置
sessionReset:
  idleTimeout: 3600  # 空闲 1 小时后重置(秒)

手动重置

bash
# 用户命令
/new     # 创建新会话
/reset   # 重置当前会话

重置影响

会话重置会清除内存中的对话历史,但 JSONL 转录文件会保留。长期记忆(MEMORY.md)不受影响。

会话覆写(Overrides)

可按消息类型或渠道覆写会话配置:

yaml
# 全局默认
model: openai/gpt-4o
maxTokens: 4096

# 按渠道覆写
overrides:
  telegram:
    model: anthropic/claude-3-5-sonnet
    maxTokens: 8192
  whatsapp:
    model: deepseek/deepseek-chat
    maxTokens: 2048
    blockStreamingDefault: true

会话维护

修剪旧条目

定期清理过期会话以释放存储空间:

yaml
maintenance:
  pruneAfterDays: 30     # 30 天未活跃的会话自动清理
  maxSessions: 1000       # 最大会话数量

文件轮转

JSONL 转录文件按大小轮转:

yaml
transcriptRotation:
  maxFileSize: 10MB       # 单文件最大大小
  maxFiles: 5             # 保留的历史文件数

数量上限

yaml
sessions:
  maxPerAgent: 500        # 每个 Agent 最大会话数
  maxPerUser: 10          # 每个用户最大会话数

会话生命周期

创建                   活跃                   重置/过期
Created  ─────────▶  Active  ─────────────▶  Reset
   │                    │                      │
   ▼                    ▼                      ▼
初始化会话状态     处理消息、更新历史     清除历史、保留转录
分配 Session Key   更新 lastActiveAt      可选保留 MEMORY.md

🇨🇳 中国用户须知

  • 会话重置时间建议设置为北京时间凌晨(配合 timezone: Asia/Shanghai
  • 如在国内部署,建议适当增加 maxSessions 以应对高并发场景
  • JSONL 文件支持中文内容,无需额外编码配置

下一步

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