Skip to content

会话管理

OpenClaw 通过 DM 配对白名单群组规则三层机制识别用户身份,并在 Session 层面隔离不同来源的上下文,确保隐私安全与数据独立。

身份认证

DM Pairing Policy(默认认证策略)

当一个未知用户首次通过私聊(DM)联系 Agent 时,OpenClaw 会启动一次性配对流程:

text
未知用户发送私聊消息


  ┌─────────────────────────────┐
  │  1. Agent 回复一次性配对码    │
  │     (6位数字,如 482917)    │
  └────────┬────────────────────┘


  ┌─────────────────────────────┐
  │  2. 消息不被处理              │
  │     Agent 进入等待状态        │
  └────────┬────────────────────┘


  ┌─────────────────────────────┐
  │  3. 主人在已配对渠道中        │
  │     输入配对码批准            │
  │     或直接拒绝               │
  └─────────────────────────────┘

安全设计

配对码是一次性的,每次新用户请求都会生成不同的码。主人必须在已经配对的渠道中确认,确保只有授权用户才能与 Agent 建立会话。

白名单机制(allowFrom)

对于已知的可信用户,可以在 AGENTS.md 中预先配置白名单,跳过配对流程直接授权:

yaml
allowFrom:
  - telegram:123456789
  - whatsapp:+8613800138000
  - discord:user#1234

格式说明

白名单条目的格式为 平台:用户标识,支持所有已接入的消息渠道。用户标识需要使用对应平台的唯一 ID(而非显示名称)。

群组规则(requireMention)

在群组场景中,Agent 默认只响应 @Agent名称 的消息,避免对无关对话产生干扰。

模式行为适用场景
mention(默认)仅响应 @提及 的消息多人群组,减少噪音
always响应群内所有消息小型专属群组,Agent 全程参与

切换命令:

bash
/activation mention    # 仅响应 @提及(默认)
/activation always     # 响应所有消息

注意

在活跃的大群中启用 always 模式会导致 Agent 对每条消息都作出响应,可能产生大量回复和 token 消耗。建议仅在小型、专属群组中使用。

Session 隔离

不同场景下,Session 的创建和隔离策略有所不同:

场景Session 行为MEMORY.md说明
私聊(DM)所有已配对的私聊折叠到共享的 main session加载无论来自哪个渠道的私聊,都共享同一上下文
群组每个群组默认使用独立的隔离 session不加载群组对话与私聊完全隔离,保护隐私
跨渠道同一用户在 Telegram 和 WhatsApp 的私聊共享 main session加载已配对用户的身份跨渠道统一

核心概念:Main Session

Main Session 是用户与 Agent 之间最核心的会话。它:

  • 汇聚所有私聊渠道的对话
  • 加载 MEMORY.md 长期记忆
  • 加载 USER.md 用户信息
  • 是唯一会触发 Pre-Compaction 记忆保存的 session 类型

隔离示意

text
用户 Alice
├── Telegram DM ──┐
├── WhatsApp DM ──┼──→ Main Session(共享上下文,加载 MEMORY.md)
├── Discord DM ───┘
├── 群组 A ───────────→ Group Session A(隔离,不加载 MEMORY.md)
└── 群组 B ───────────→ Group Session B(隔离,不加载 MEMORY.md)

会话生命周期

text
用户发送消息


身份认证(配对/白名单/群组规则)


查找或创建 Session


加载上下文(历史消息 + 记忆层)


Agent 处理并回复


更新 Session 记录 → 写入 sessions.json

会话持久化

所有会话数据存储在工作区的 sessions.json 文件中,网关重启后自动恢复。

text
workspace/
└── sessions.json    ← 会话状态持久化

重置会话

用户可以通过以下命令管理会话:

bash
/reset     # 清除当前会话的历史消息,开启新对话
/clear     # 同 /reset

重置不会清除长期记忆

/reset 只清除当前 Session 的对话历史。MEMORY.md 中的长期记忆和 memory/ 目录下的 Daily Log 不受影响,它们是独立的持久化存储。

基于 MIT 协议发布