消息
本页面概述了OpenClaw如何处理入站消息、会话、排队、流式传输以及推理可见性。消息流(高层次)
messages.*用于前缀、排队和群组行为。agents.defaults.*用于块级流式传输和分块的默认设置。- 通道覆盖(
channels.whatsapp.*、channels.telegram.*等)用于限制和流式传输开关。
入站去重
在重新连接后,通道可能会重新发送相同的消息。为避免重复交付触发额外的代理运行,OpenClaw维护一个以通道、账户、对等方、会话和消息ID为键的短期缓存。入站防抖
来自同一发送者的快速连续消息可以通过messages.inbound 批量合并为一次代理回合。防抖功能作用于每个通道和对话,并使用最新消息对回复进行线程化或编号。
配置(全局默认值 + 每个通道的覆盖):
- 防抖仅适用于纯文本消息;媒体/附件会立即刷新。
- 控制命令绕过防抖,因此它们保持独立。
会话与设备
会话由网关而非客户端拥有。- 直聊会话将合并到代理主会话密钥中。
- 群组和频道各自拥有独立的会话密钥。
- 会话存储和对话记录保存在网关主机上。
入站正文与历史上下文
OpenClaw将提示正文与命令正文分开:Body:发送给代理的提示文本。这可能包括通道信封和可选的历史包装器。CommandBody:用于解析指令/命令的原始用户文本。RawBody:CommandBody的旧别名(为兼容性保留)。
[Chat messages since your last reply - for context][Current message - respond to this]
CommandBody(或 RawBody)设置为原始消息文本,并将 Body 保留为组合提示。历史缓冲区可通过 messages.groupChat.historyLimit(全局默认值)以及每通道覆盖(如 channels.slack.historyLimit 或 channels.telegram.accounts.<id>.historyLimit)进行配置。要禁用,请将 0 设置为关闭。
排队与后续处理
如果运行已经处于活动状态,入站消息可以排队、引导至当前运行,或收集以供后续回合处理。- 通过
messages.queue(和messages.queue.byChannel)进行配置。 - 模式:
interrupt、steer、followup、collect,以及积压变体。
流式传输、分块与批处理
块级流式传输会在模型生成文本块时发送部分回复。分块会遵守通道的文本限制,并避免拆分围栏代码块。 关键设置:agents.defaults.blockStreamingDefault(on|off,默认关闭)agents.defaults.blockStreamingBreak(text_end|message_end)agents.defaults.blockStreamingChunk(基于空闲时间的批处理)agents.defaults.blockStreamingCoalesce(基于空闲时间的批处理)agents.defaults.humanDelay(块回复之间的类人暂停)- 通道覆盖:
*.blockStreaming和*.blockStreamingCoalesce(非Telegram通道需要显式设置*.blockStreaming: true)
推理可见性和令牌
OpenClaw可以显示或隐藏模型推理:/reasoning on|off|stream控制可见性。- 模型生成的推理内容在生成时仍会计入令牌使用量。
- Telegram 支持将推理流显示在草稿气泡中。
前缀、线程化与回复
出站消息格式化集中于messages:
messages.responsePrefix(出站前缀)和channels.whatsapp.messagePrefix(WhatsApp入站前缀)- 通过
replyToMode实现回复线程化,并为每个渠道提供默认设置