OpenClaw 透過一條包含會話解析、佇列處理、串流、工具執行與推理可見性的管線處理傳入訊息。本頁說明從傳入訊息到回覆的路徑。Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
訊息流程(高層級)
messages.*用於前綴、佇列處理與群組行為。agents.defaults.*用於區塊串流與分塊預設值。- 通道覆寫(
channels.whatsapp.*、channels.telegram.*等)用於上限與串流切換。
傳入去重
通道可能會在重新連線後重新遞送相同訊息。OpenClaw 會保留一個短效快取,以通道/帳號/對等端/會話/訊息 ID 作為鍵,避免重複遞送觸發另一個代理執行。傳入防抖
來自同一寄件者的快速連續訊息,可透過messages.inbound 批次合併成單一代理回合。防抖範圍限定於每個通道 + 對話,並使用最新訊息作為回覆串接/ID。
設定(全域預設 + 每通道覆寫):
- 防抖套用於純文字訊息;媒體/附件會立即排出。
- 控制命令會略過防抖,因此仍會維持獨立。明確選擇啟用同寄件者私訊合併的通道,可以讓私訊命令保留在防抖視窗內,讓分段傳送的承載內容加入同一個代理回合。
會話與裝置
會話由 Gateway 擁有,而不是由用戶端擁有。- 直接聊天會收斂為代理主會話鍵。
- 群組/通道會取得自己的會話鍵。
- 會話儲存區與轉錄記錄位於 Gateway 主機上。
工具結果中繼資料
工具結果的content 是模型可見的結果。工具結果的 details 是用於 UI 轉譯、診斷、媒體遞送與 Plugin 的執行階段中繼資料。
OpenClaw 明確維持這個邊界:
toolResult.details會在提供者重播與 Compaction 輸入之前移除。- 持久化的會話轉錄記錄只保留有界的
details;過大的中繼資料會替換為標記persistedDetailsTruncated: true的精簡摘要。 - Plugin 與工具應將模型必須讀取的文字放在
content,而不是只放在details。
傳入本文與歷史情境
OpenClaw 會區分提示本文與命令本文:BodyForAgent:目前訊息面向主要模型的文字。通道 Plugin 應讓它聚焦於寄件者目前帶有提示的文字。Body:舊版提示備援。這可能包含通道信封與選用的歷史包裝,但在BodyForAgent可用時,目前通道不應仰賴它作為主要模型輸入。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)設定。 - 預設模式是
steer,當導向退回到排入佇列的後續遞送時,會有 500ms 的後續防抖。 - 模式:
steer、followup、collect、steer-backlog、interrupt,以及舊版一次一個的queue模式。
通道執行擁有權
通道 Plugin 可以在訊息進入會話佇列之前維持排序、對輸入進行防抖,並套用傳輸反壓。它們不應在代理回合本身周圍施加獨立逾時。一旦訊息被路由到會話,長時間執行的工作會由會話、工具與執行階段生命週期治理,讓所有通道能一致地回報並從緩慢回合中復原。串流、分塊與批次處理
區塊串流會在模型產生文字區塊時傳送部分回覆。分塊會遵守通道文字限制,並避免切分圍欄程式碼。 主要設定: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)
推理可見性與權杖
OpenClaw 可以公開或隱藏模型推理:/reasoning on|off|stream控制可見性。- 當模型產生推理內容時,它仍會計入權杖使用量。
- Telegram 支援將推理串流到暫時草稿泡泡中,並在最終遞送後刪除;若要持久推理輸出,請使用
/reasoning on。
前綴、串接與回覆
傳出訊息格式集中在messages:
messages.responsePrefix、channels.<channel>.responsePrefix和channels.<channel>.accounts.<id>.responsePrefix(傳出前綴串接),加上channels.whatsapp.messagePrefix(WhatsApp 傳入前綴)- 透過
replyToMode與每通道預設值進行回覆串接
靜默回覆
精確的靜默權杖NO_REPLY / no_reply 表示「不要遞送使用者可見的回覆」。
當某個回合同時有待處理的工具媒體,例如產生的 TTS 音訊,OpenClaw 會移除靜默文字,但仍會遞送媒體附件。
OpenClaw 會依對話類型解析該行為:
- 直接對話預設不允許靜默,並將單獨的靜默回覆改寫為簡短可見的備援。
- 群組/通道預設允許靜默。
- 內部編排預設允許靜默。
/verbose 為 on 或 full 時,才會顯示原始執行器詳細資料。
預設值位於 agents.defaults.silentReply 與 agents.defaults.silentReplyRewrite 下;surfaces.<id>.silentReply 與 surfaces.<id>.silentReplyRewrite 可以依介面覆寫它們。
當父會話有一個或多個待處理的已衍生子代理執行時,單獨的靜默回覆會在所有介面上被丟棄,而不是被改寫,因此父會話會保持安靜,直到子完成事件遞送真正的回覆。