跳轉到主要內容
Swarm 是一種實驗性的選用功能,可透過 程式碼模式指令碼協調許多子代理程式。使用一般的 JavaScript 或 TypeScript 控制流程,例如 Promise.allwhileif,以分派工作、收集 結果並做出決策。 它沒有圖形 DSL,也沒有獨立的工作流程格式。程式本身就是 協調機制。Swarm 為該程式加入可等待的收集器子項、結構化結果、 有界並行處理和進度回報。

啟用 Swarm

建議的方式是在控制介面中前往 Settings → Labs → Swarm。此 切換開關會立即生效,並將 tools.swarm.enabled 寫入你的 設定。 你也可以直接在 openclaw.json 中啟用 Swarm:
布林值簡寫可啟用或停用此功能,所有其他值則使用其 預設值:
數值必須是正整數。OpenClaw 會將 maxConcurrent 限制在 11000、將 maxChildrenPerGroup 限制在 110000、 將 maxTotalPerGroup 限制在 1100000,並將 waitTimeoutSecondsMax 限制在 186400 你可以使用 agents.list[].tools.swarm,為單一已設定的代理程式覆寫 Swarm。 每個代理程式的物件會合併並覆蓋頂層 tools.swarm 物件。

需求

agents.runphaselog 客體全域變數同時需要 Swarm 和 OpenClaw 程式碼模式:
程式碼模式也必須具有對 sessions_spawn 的有效存取權。工具設定檔、 允許/拒絕原則、供應商規則和沙箱原則都可能移除此工具。 如果指令碼回報 sessions_spawn 無法使用,請參閱程式碼模式啟用方式子代理程式 defaultAgentId 和每次執行的 agentId 值,必須指定一個已設定且 發出請求者的 subagents.allowAgents 原則允許使用的目標。OpenClaw 會拒絕 未知或不允許的目標,而不會改用其他代理程式。

撰寫 Swarm 指令碼

啟用 Swarm 後,程式碼模式會公開此客體 API:
若未使用 schemaagents.run() 會解析為子項的最終文字。若提供 JSON Schema,則會解析為透過子項的 structured_output 工具提交的值。失敗、遭終止、逾時或結構描述無效的子項 會使用 SwarmAgentError 拒絕該 Promise。請在程式碼模式內從 API.read("agents.d.ts") 讀取確切產生的宣告和簡短的協調慣用法。 使用 label,可在儀表板和側邊欄中為子項提供易於辨識的名稱。在選項中使用 phase,可在該子項啟動前立即發布階段;若數個子項屬於同一階段, 則可呼叫 phase()log() 會發布簡短的進度附註。進度呼叫是即發即棄; 即使介面無法使用,也不會延遲指令碼。

以結構化結果並行分派

此範例會為每個主題啟動一個研究代理程式,等待所有代理程式完成,然後 要求最後一個子項綜合其結構化報告:
Promise.all 是分派與彙集的邊界。OpenClaw 會為該群組啟動最多 maxConcurrent 個子項,其餘子項則依提交 順序排入佇列。

在決策關卡中迴圈

當每次處理都會決定是否需要再執行一次時,請使用有界的 while 迴圈:
決策迴圈一律必須設定界限。maxTotalPerGroup 是最後的安全防線, 不能取代明確的停止條件。

處理第一個完成的子項

agents.run() 會傳回一般 Promise,因此 Promise.race 可對第一個完成的 程式碼模式子項做出反應。對於呼叫較低階工具的測試框架, agents_wait 提供相同的首次完成邊界:只要至少一個要求的執行完成, 或有界逾時到期,就會立即傳回。 完整的排空迴圈請參閱從其他測試框架使用 Swarm

收集器子項的行為方式

收集器子項是一般的隔離子代理程式工作階段,但具有不同的 完成路徑。它們會寫入可供父項等待的持久收集器結果, 而不是宣告回覆或將回覆導回父工作階段。 目標代理程式會依下列順序解析:
  1. agentId,位於產生或 agents.run() 呼叫上。
  2. tools.swarm.defaultAgentId
  3. 發出請求的代理程式。
當 Swarm 子項需要較精簡的工具介面、較便宜的模型或更嚴格的沙箱原則時, 專用且精簡的工作代理程式會很有用。OpenClaw 不隨附內建的 worker 代理程式 ID;將其指定為預設值前,請先設定一個代理程式。 在該工作代理程式的個別設定中使用 tools.swarm: false 加以強化,使其 可以被產生,但無法從自己的頂層工作階段啟動 Swarm:
收集器的核准採取故障關閉。子項絕不會開啟操作員核准 提示。任何需要核准的工具動作都會遭拒絕,而子項可以在其結果中 回報該拒絕,讓指令碼決定下一步。 對於結構化輸出,OpenClaw 會將合成的 structured_output 工具加入 子項,並根據提供的 JSON Schema 驗證其承載資料。無效或缺少的承載資料 會獲得一次修正提示。若重試後仍無法通過驗證,收集器完成項會保留子項的 原始文字、讓 structured 保持未設定,並包含 schemaError。 低階 agents_wait 結果會公開這些欄位,以供明確的復原邏輯使用。

子項是葉節點

Swarm 子項預設為葉節點。通用的 agents.defaults.subagents.maxSpawnDepth 防護機制會在預設深度 1 下,防止子項產生 自己的子項。一般的協調慣用法是將工作傳回父項,而不是從子項產生更多工作:
巢狀子代理程式是操作員透過 agents.defaults.subagents.maxSpawnDepth 啟用的選用功能,不建議用於 Swarm。 群組上限、預算和可觀測性皆以扁平的收集器群組為前提。 每個子項只有一個准入擁有者。宣告和互動式子項使用 agents.defaults.subagents.maxChildrenPerAgent(預設為 5),且不會計入 收集器子項。收集器子項僅使用 maxChildrenPerGroupmaxTotalPerGroup;它們不會占用每個工作階段的子項預算。產生 深度防護仍適用於這兩種模式。 准入後,超出 maxConcurrent 的子項會在其 Swarm 群組內依 FIFO 順序排入佇列,並巢狀位於全域子代理程式執行通道中。這些並行層會將 工作排入佇列,而不是拒絕工作。超過任一群組上限的收集器產生要求 會遭拒絕,錯誤中會包含相關的設定鍵。

觀察 Swarm

當 Swarm 處於作用中時,在控制介面中開啟父工作階段的儀表板。 Swarm 小工具會將每個作用中的收集器群組呈現為每個子項一個圓點,並顯示 已排入佇列、執行中、完成或失敗狀態。標籤會顯示在圓點工具提示中,因此簡短且 穩定的標籤可讓大型 Swarm 更容易閱讀。 工作階段側邊欄會保留一般的父/子樹狀結構。展開父項資料列, 即可檢查收集器子項或開啟其逐字記錄,而不會失去 Swarm 階層結構。 收集器結果在其群組封存前都可繼續等待。當每個 成員都達到其保留期限後,OpenClaw 會將該群組的子項批次封存, 使已完成的 Swarm 不會留在作用中的工作階段樹狀結構中。

從其他測試框架使用 Swarm

你可以在不使用 OpenClaw Code Mode 的情況下使用 Swarm。其核心工具不依賴執行框架:使用 sessions_spawn({ collect: true }) 啟動收集器子代理,並透過有界的 agents_wait 呼叫取得其結果。 Codex Code Mode 會自動在 tools.* 下公開符合資格的動態 OpenClaw 工具。它不使用 OpenClaw 的 QuickJS 客體 API,也不需要 tools.codeMode,但仍必須啟用 tools.swarm。Codex 執行框架的 agents_wait 呼叫支援完整的 600 秒逾時。請使用以下模式:
每次 agents_wait 呼叫可接受 1–1000 個執行識別碼。它會傳回:
若任何請求的子代理已完成、至少有一個待處理的子代理完成、不再有有效的待處理識別碼,或呼叫逾時,該呼叫會立即傳回。已完成的記錄具有冪等性,因此傳入已完成的執行識別碼時,會再次傳回其結果。只有啟動它的工作階段或其獲授權的父系鏈可以等待收集器。 這是有界長輪詢,而不是忙碌的狀態迴圈。持續僅傳入剩餘的執行識別碼,直到 pending 為空。收集器模式支援原生 OpenClaw 子代理;它不支援 ACP 執行階段、執行緒繫結、可見工作階段或持久工作階段模式。

限制與發展藍圖

Swarm v1 執行一次性的收集器子代理;規劃中的 agents.session() API 將加入具狀態的多輪工作代理。目前子代理在本機閘道的子代理通道上執行;雲端部署規劃為明確的啟動選項。已儲存的工作流程定義與圖形 DSL 並非 Swarm 目前的發展方向。

相關內容