跳到主要内容

消息

本页介绍了 Clawdbot 如何处理入站消息、会话、排队、流式传输以及推理过程的可见性。

消息流 (高层概览)

入站消息
-> 路由/绑定 -> 会话键 (session key)
-> 队列 (如果已有运行中的任务)
-> Agent 运行 (流式传输 + 工具调用)
-> 出站回复 (频道限制 + 分段)

关键配置项:

  • messages.*: 用于设置前缀、排队和群组行为。
  • agents.defaults.*: 用于设置块流式传输 (block streaming) 和分段默认值。
  • 频道覆盖 (channels.whatsapp.*, channels.telegram.* 等): 用于设置容量和流式传输开关。

详见 配置 以了解完整的 Schema。

入站去重

频道可能会在重新连接后重新投递同一条消息。Clawdbot 维护了一个短期的缓存,以频道/账号/对等方/会话/消息 ID 为键,确保重复投递的消息不会再次触发 Agent 运行。

入站防抖 (Debouncing)

来自同一发送者的快速连续消息可以通过 messages.inbound 合并为单次 Agent 轮次。防抖的作用域限定在每个频道 + 对话中,并使用最新的消息进行回复线索/ID 匹配。

配置 (全局默认 + 各频道覆盖):

{
messages: {
inbound: {
debounceMs: 2000,
byChannel: {
whatsapp: 5000,
slack: 1500,
discord: 1500
}
}
}
}

注意:

  • 防抖仅适用于纯文本消息;媒体/附件会立即发送。
  • 控制命令会绕过防抖,以便保持独立。

会话与设备

会话由网关 (gateway) 拥有,而不是客户端。

  • 私聊会折叠到 Agent 的主会话键。
  • 群组/频道拥有各自的会话键。
  • 会话存储和副本文件保存在网关主机上。

多个设备/频道可以映射到同一个会话,但历史记录不会完全同步回每个客户端。建议:对于长对话,使用一个主要设备以避免上下文冲突。控制 UI (Control UI) 和 TUI 始终显示网关背后的会话副本,因此它们是事实来源。

详情:会话管理

入站正文与历史记录上下文

Clawdbot 将 Prompt 正文 (prompt body)命令正文 (command body) 分开:

  • Body: 发送给 Agent 的 Prompt 文本。可能包含频道封装和可选的历史记录包装器。
  • CommandBody: 用于指令/命令解析的用户原始文本。
  • RawBody: CommandBody 的旧别名(为了兼容性而保留)。

当频道提供历史记录时,它使用共享的包装器:

  • [Chat messages since your last reply - for context]
  • [Current message - respond to this]

对于非私聊(群组/频道/房间),当前消息正文会带上发送者标签前缀(与历史记录条目使用的风格相同)。这使得 Agent Prompt 中的实时消息和排队/历史消息保持一致。

历史记录缓冲区是仅限待处理 (pending-only) 的:它们包含触发运行的群组消息(例如,被提到检测过滤掉的消息),并且排除了已经存在于会话副本中的消息。

指令剥离仅适用于当前消息部分,以便历史记录保持完整。封装历史记录的频道应将 CommandBody (或 RawBody) 设置为原始消息文本,并将 Body 保持为合并后的 Prompt。历史记录缓冲区可通过 messages.groupChat.historyLimit(全局默认)和各频道覆盖项进行配置,如 channels.slack.historyLimitchannels.telegram.accounts.<id>.historyLimit(设置为 0 以禁用)。

排队与后续 (Followups)

如果已有运行中的任务,入站消息可以进入队列、引导 (steer) 到当前运行中,或收集起来作为后续轮次处理。

  • 通过 messages.queue (以及 messages.queue.byChannel) 进行配置。
  • 模式:interrupt, steer, followup, collect,以及积压 (backlog) 变体。

详情:排队

流式传输、分段与批处理

块流式传输 (Block streaming) 在模型生成文本块时发送部分回复。 分段 (Chunking) 遵循频道的文本限制,并避免分割围栏代码块。

关键设置:

  • agents.defaults.blockStreamingDefault (on|off, 默认 off)
  • agents.defaults.blockStreamingBreak (text_end|message_end)
  • agents.defaults.blockStreamingChunk (minChars|maxChars|breakPreference)
  • agents.defaults.blockStreamingCoalesce (基于空闲的批处理)
  • agents.defaults.humanDelay (块回复之间的人性化停顿)
  • 频道覆盖: *.blockStreaming*.blockStreamingCoalesce (非 Telegram 频道需要显式设置 *.blockStreaming: true)

详情:流式传输 + 分段

推理可见性与 Token

Clawdbot 可以显示或隐藏模型的推理过程:

  • /reasoning on|off|stream 控制可见性。
  • 推理内容在模型生成时仍计入 Token 使用量。
  • Telegram 支持将推理过程流式传输到草稿泡泡中。

详情:思考 + 推理指令Token 使用

前缀、线程与回复

出站消息格式在 messages 中统一管理:

  • messages.responsePrefix (出站前缀) 和 channels.whatsapp.messagePrefix (WhatsApp 入站前缀)
  • 通过 replyToMode 和各频道默认值实现回复线程化。

详情:配置 和频道文档。