訊息
本頁面將說明 OpenClaw 如何處理傳入訊息、工作階段、佇列、串流以及推論可見性。
訊息流程(高階概覽)
Section titled “訊息流程(高階概覽)”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, }, }, },}備註:
- 去彈跳僅適用於 純文字 訊息;媒體/附件會立即排空。
- 控制指令會略過去彈跳,以保持其獨立性。
工作階段與裝置
Section titled “工作階段與裝置”工作階段歸閘道所有,而非歸用戶端所有。
- 直接聊天會合併至代理程式主工作階段金鑰。
- 群組/頻道則擁有自己的工作階段金鑰。
- 工作階段存放區與文字記錄位於閘道主機上。
多個裝置/頻道可對應至同一個工作階段,但歷史記錄不會完全同步回每個用戶端。建議:長時間對話請使用一個主要裝置,以避免語境分歧。Control UI 與 TUI 一律顯示由閘道備份的工作階段文字記錄,因此其為真實來源。
傳入內容與歷史記錄語境
Section titled “傳入內容與歷史記錄語境”OpenClaw 會將 提示主體 與 指令主體 分離:
Body:傳送至代理程式的提示文字。這可能包含頻道信封與可選的歷史記錄包裝器。CommandBody:用於指令/命令解析的原始使用者文字。RawBody:CommandBody的舊版別名(為了相容性而保留)。
當頻道提供歷史記錄時,它使用一個共享的包裝器:
[Chat messages since your last reply - for context][Current message - respond to this]
對於非直接聊天(群組/頻道/房間),當前訊息內容會加上傳送者標籤前綴(與歷史記錄項目使用的樣式相同)。這使即時訊息和佇列/歷史訊息在 Agent 提示中保持一致。
歷史緩衝區是僅限待處理的:它們包含未觸發執行的群組訊息(例如,需要提及才觸發的訊息),並排除已經在會話記錄中的訊息。
指令剝離僅適用於當前訊息部分,因此歷史記錄保持完整。包裝歷史記錄的頻道應將 CommandBody(或 RawBody)設定為原始訊息文字,並將 Body 保留為組合提示。
歷史緩衝區可透過 messages.groupChat.historyLimit(全域預設值)和各頻道的覆寫(例如 channels.slack.historyLimit 或 channels.telegram.accounts.<id>.historyLimit,設定 0 以停用)進行配置。
佇列與後續處理
Section titled “佇列與後續處理”如果執行已在進行中,傳入訊息可以加入佇列、導入至當前執行,或收集以供後續輪次處理。
- 透過
messages.queue(以及messages.queue.byChannel)進行配置。 - 模式:
interrupt、steer、followup、collect,以及積壓變體。
詳細資訊:佇列處理。
串流、分塊與批次處理
Section titled “串流、分塊與批次處理”區塊串流會在模型產生文字區塊時發送部分回覆。分塊會尊重頻道文字限制,並避免分割圍欄程式碼。
關鍵設定:
agents.defaults.blockStreamingDefault(on|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
Section titled “推理可見性和 Token”OpenClaw 可以顯示或隱藏模型推理:
/reasoning on|off|stream控制可見性。- 推理內容由模型生成時仍會計入 Token 使用量。
- Telegram 支援將推理串流至草稿氣泡中。
前綴、串回和回覆
Section titled “前綴、串回和回覆”出站訊息格式化集中在 messages 中:
messages.responsePrefix、channels.<channel>.responsePrefix和channels.<channel>.accounts.<id>.responsePrefix(出站前綴串聯),加上channels.whatsapp.messagePrefix(WhatsApp 入站前綴)- 透過
replyToMode和各通道預設值進行回覆串回
詳情:組態 和通道文件。