跳到主要内容

会话 (Session)

在 Clawdbot 中,会话 (Session) 代表了智能体与一个或多个用户之间持续的对话流。本页面介绍了会话是如何被标识、存储以及管理的。

会话密钥 (Session Key)

每个会话都由一个唯一的 会话密钥 (Session Key) 标识。该密钥决定了消息如何被分组以及上下文如何被持久化。

常见的密钥格式:

  • 私聊 (DM)agent:<agentId>:<channel>:dm:<userId> (通常折叠到主会话)
  • 群组 (Group)agent:<agentId>:<channel>:group:<groupId>
  • 频道/论坛主题agent:<agentId>:<channel>:topic:<topicId>

发送策略 (Send Policy)

发送策略控制智能体是否可以向特定的会话发送消息。这对于防止在公共群组中产生意外的“刷屏”或限制智能体仅在特定频道内回复非常有用。

{
session: {
sendPolicy: {
rules: [
{ action: "deny", match: { channel: "discord", chatType: "group" } },
{ action: "deny", match: { keyPrefix: "cron:" } }
],
default: "allow"
}
}
}

消息流 (Message Flow)

  1. 入站 (Inbound):消息到达网关,根据频道信息生成会话密钥。
  2. 检索 (Retrieval):根据密钥加载会话历史、记忆和工作区文件。
  3. 推理 (Inference):智能体处理输入并生成回复。
  4. 出站 (Outbound):网关检查发送策略,如果允许,则将回复发送回该会话所属的频道。

会话存储

会话历史记录存储在智能体工作区的 sessions/ 目录下,通常为 .jsonl 文件。这些文件包含了:

  • 消息文本和发送者元数据。
  • 工具调用及其结果。
  • 压缩摘要 (Compaction summaries)。

交叉频道持久化 (Cross-channel Persistence)

由于会话密钥是由网关管理的,因此可以将多个不同的频道映射到同一个会话密钥。这意味着您可以从 Telegram 开始一段对话,然后在 Discord 中继续,而智能体仍能保留之前的上下文(前提是配置了相应的身份映射)。

常用命令

  • /new/reset:启动一个全新的会话 ID,忽略之前的历史记录。
  • /status:查看当前会话的元数据、Token 使用情况和压缩计数。
  • /compact:手动触发当前会话的上下文压缩。

另请参阅