Skip to content

訊息

本頁面將說明 OpenClaw 如何處理傳入訊息、工作階段、佇列、串流以及推論可見性。

Inbound message
-> routing/bindings -> session key
-> queue (if a run is active)
-> agent run (streaming + tools)
-> outbound replies (channel limits + chunking)

主要控制選項位於設定中:

  • messages.* 用於前置詞、佇列與群組行為。
  • agents.defaults.* 用於區塊串流與分塊的預設值。
  • 頻道覆寫(channels.whatsapp.*channels.telegram.* 等)用於上限與串流切換。

完整架構請參閱 Configuration

頻道可能在重新連線後重新傳送相同的訊息。OpenClaw 會維護一個短期快取,以頻道/帳號/對象/工作階段/訊息 ID 作為鍵值,以確保重複傳送不會觸發另一次代理程式執行。

來自 相同傳送者 的快速連續訊息可透過 messages.inbound 合併為單一代理程式輪次。去彈跳是以頻道 + 對話為範圍,並使用最新的訊息進行回覆串接/ID 指定。

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

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

備註:

  • 去彈跳僅適用於 純文字 訊息;媒體/附件會立即排空。
  • 控制指令會略過去彈跳,以保持其獨立性。

工作階段歸閘道所有,而非歸用戶端所有。

  • 直接聊天會合併至代理程式主工作階段金鑰。
  • 群組/頻道則擁有自己的工作階段金鑰。
  • 工作階段存放區與文字記錄位於閘道主機上。

多個裝置/頻道可對應至同一個工作階段,但歷史記錄不會完全同步回每個用戶端。建議:長時間對話請使用一個主要裝置,以避免語境分歧。Control UI 與 TUI 一律顯示由閘道備份的工作階段文字記錄,因此其為真實來源。

詳情:Session management

OpenClaw 會將 提示主體指令主體 分離:

  • Body:傳送至代理程式的提示文字。這可能包含頻道信封與可選的歷史記錄包裝器。
  • CommandBody:用於指令/命令解析的原始使用者文字。
  • RawBodyCommandBody 的舊版別名(為了相容性而保留)。

當頻道提供歷史記錄時,它使用一個共享的包裝器:

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

對於非直接聊天(群組/頻道/房間),當前訊息內容會加上傳送者標籤前綴(與歷史記錄項目使用的樣式相同)。這使即時訊息和佇列/歷史訊息在 Agent 提示中保持一致。

歷史緩衝區是僅限待處理的:它們包含未觸發執行的群組訊息(例如,需要提及才觸發的訊息),並排除已經在會話記錄中的訊息。

指令剝離僅適用於當前訊息部分,因此歷史記錄保持完整。包裝歷史記錄的頻道應將 CommandBody(或 RawBody)設定為原始訊息文字,並將 Body 保留為組合提示。 歷史緩衝區可透過 messages.groupChat.historyLimit(全域預設值)和各頻道的覆寫(例如 channels.slack.historyLimitchannels.telegram.accounts.<id>.historyLimit,設定 0 以停用)進行配置。

如果執行已在進行中,傳入訊息可以加入佇列、導入至當前執行,或收集以供後續輪次處理。

  • 透過 messages.queue(以及 messages.queue.byChannel)進行配置。
  • 模式:interruptsteerfollowupcollect,以及積壓變體。

詳細資訊:佇列處理

區塊串流會在模型產生文字區塊時發送部分回覆。分塊會尊重頻道文字限制,並避免分割圍欄程式碼。

關鍵設定:

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

詳情:串流 + 分塊

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

  • /reasoning on|off|stream 控制可見性。
  • 推理內容由模型生成時仍會計入 Token 使用量。
  • Telegram 支援將推理串流至草稿氣泡中。

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

出站訊息格式化集中在 messages 中:

  • messages.responsePrefixchannels.<channel>.responsePrefixchannels.<channel>.accounts.<id>.responsePrefix (出站前綴串聯),加上 channels.whatsapp.messagePrefix (WhatsApp 入站前綴)
  • 透過 replyToMode 和各通道預設值進行回覆串回

詳情:組態 和通道文件。

  • 串流 — 即時訊息傳遞
  • 重試 — 訊息傳遞重試行為
  • 佇列 — 訊息處理佇列
  • 頻道 — 訊息平台整合