訊息

本頁將 OpenClaw 如何處理入站訊息、sessions、佇列、串流和推理可見性串在一起說明。

訊息流程(高層概覽)

入站訊息
  -> 路由/綁定 -> session key
  -> 佇列(如果有執行中的 run)
  -> agent 執行(串流 + 工具)
  -> 出站回覆(頻道限制 + 分段)

關鍵設定參數:

  • messages.* 控制前綴、佇列和群組行為。
  • agents.defaults.* 控制區塊串流和分段預設值。
  • 頻道覆寫(channels.whatsapp.*channels.telegram.* 等)控制上限和串流開關。

請參閱 Configuration 瞭解完整 schema。

入站去重

頻道在重連後可能會重新傳送相同的訊息。OpenClaw 維護一個以 channel/account/peer/session/message id 為 key 的短期快取,避免重複傳送觸發另一次 agent 執行。

入站 Debounce

來自同一發送者的快速連續訊息可以批次合併為單一 agent 回合,透過 messages.inbound 設定。Debounce 以 channel + 對話為範圍,使用最近一則訊息的回覆串接/ID。

設定(全域預設 + 按頻道覆寫):

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

注意事項:

  • Debounce 適用於純文字訊息;媒體/附件會立即處理。
  • 控制指令繞過 debounce,保持獨立執行。

Sessions 與裝置

Sessions 由 gateway 擁有,不是由用戶端擁有。

  • 私訊聊天合併到 agent 的主要 session key。
  • 群組/頻道有各自的 session key。
  • Session 儲存區和對話記錄存放在 gateway 主機上。

多個裝置/頻道可以對應到同一個 session,但歷史記錄不會完整同步回每個用戶端。建議:長對話使用一個主要裝置,避免上下文分歧。Control UI 和 TUI 始終顯示 gateway 端的 session 對話記錄,是唯一的真實來源。

細節:Session management

入站內容與歷史上下文

OpenClaw 區分提示內容指令內容

  • Body:送給 agent 的提示文字。可能包含頻道信封和可選的歷史包裝。
  • CommandBody:用於指示詞/指令解析的原始使用者文字。
  • RawBodyCommandBody 的舊版別名(保留以維持相容性)。

當頻道提供歷史記錄時,使用共享的包裝格式:

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

非直接聊天(群組/頻道/聊天室)中,當前訊息內容會加上發送者標籤(與歷史條目使用相同的格式)。這讓即時和排隊/歷史訊息在 agent 提示中保持一致。

歷史緩衝是僅限待處理的:它們包含未觸發 run 的群組訊息(例如被 mention 過濾的訊息),並排除已在 session 對話記錄中的訊息。

指示詞剝除只適用於當前訊息區段,歷史記錄保持原樣。包裝歷史的頻道應該將 CommandBody(或 RawBody)設為原始訊息文字,將 Body 保留為合併後的提示。 歷史緩衝可透過 messages.groupChat.historyLimit(全域預設)和按頻道覆寫(如 channels.slack.historyLimitchannels.telegram.accounts.<id>.historyLimit)設定。設 0 停用。

佇列與後續訊息

如果已有 run 在執行中,入站訊息可以被佇列、轉向到當前 run,或收集起來做後續回合。

  • 透過 messages.queue(和 messages.queue.byChannel)設定。
  • 模式:interruptsteerfollowupcollect,以及 backlog 變體。

細節:Queueing

串流、分段與批次

區塊串流在模型產生文字區塊時發送部分回覆。分段遵守頻道文字限制,避免切斷程式碼區塊。

關鍵設定:

  • agents.defaults.blockStreamingDefaulton|off,預設 off)
  • agents.defaults.blockStreamingBreaktext_end|message_end
  • agents.defaults.blockStreamingChunkminChars|maxChars|breakPreference
  • agents.defaults.blockStreamingCoalesce(基於閒置的批次合併)
  • agents.defaults.humanDelay(區塊回覆之間的擬人暫停)
  • 頻道覆寫:*.blockStreaming*.blockStreamingCoalesce(非 Telegram 頻道需要明確設定 *.blockStreaming: true

細節:Streaming + chunking

推理可見性與 token

OpenClaw 可以顯示或隱藏模型的推理過程:

  • /reasoning on|off|stream 控制可見性。
  • 模型產生推理內容時,仍然計入 token 用量。
  • Telegram 支援將推理串流到草稿氣泡中。

細節:Thinking + reasoning directivesToken use

前綴、串接與回覆

出站訊息格式集中在 messages 中設定:

  • messages.responsePrefixchannels.<channel>.responsePrefixchannels.<channel>.accounts.<id>.responsePrefix(出站前綴層疊),以及 channels.whatsapp.messagePrefix(WhatsApp 入站前綴)
  • 透過 replyToMode 和按頻道預設值控制回覆串接

細節:Configuration 和各頻道文件。