AutoGen 讓多輪模型與工具迴圈變得直覺,卻也容易放大未受控的 HTTP無上限的平行函式呼叫,以及冗長的供應商錯誤外溢到使用者可見回合。請在回環上以 OpenClaw 前置主機:對外只暴露 閘道 Bearer 權杖、以 JSON Schema 校驗每筆工具 payload、在打到具副作用路由前掛上 併發預算熔斷,並把錯誤收斂成 GroupChat 可推理的精簡失敗摘要,避免提示詞或密鑰進入對話。

本頁導覽:最小權限白名單 · 對話路由 · 重試模板 · 日誌脫敏 · PR/CI 摘要示例 · 併發預算快速對照 · FAQ

本文假設你有一台專用遠端 Mac(Apple Silicon),可用 launchd 常駐閘道。與 CrewAI 編排與閘道路由篇Semantic Kernel 外掛閘道篇 不同,AutoGen 強調對話物件、GroupChat 選言與函式註冊迴圈,重試與併發的責任落在你自訂的工具包裝與選言策略,而非 Crew 任務或 Kernel 函式表。延伸閱讀:JSON Schema 與工具重試LiteLLM 與 OpenClaw 路由GenAI 可觀測性欄位IDE 沙箱與健康探測;多模型預算對齊 路由成本矩陣

最小權限白名單

在版控中維護單一真實來源,例如 config/tools_allowlist.json:列出工具 name、允許的 HTTP 動詞、相對 route,以及每個參數物件的 schema 片段。匯入時,AutoGen Assistant 應拒絕註冊任何不在檔案內的函式。OpenClaw 閘道權杖建議置於 ~/.openclaw/dashboard.token(權限 0400),並僅在 Worker 環境匯出為 OPENAI_API_KEY,切勿寫進 Agent 系統提示。

閘道側鏡像同一份允許清單,避免被竄改的客戶端捏造路由。模型產生工具呼叫後,先以與伺服器相同版本的 JSON Schema(2019-09 或 2020-12)驗證引數,做法可對齊 PydanticAI 閘道 Schema 篇Instructor 強校驗篇。驗證失敗時應在發 HTTP 前短路,回傳結構化 validation_error,讓下一個發言者修正路徑,以免燒毀供應商 TPM。

對話路由

將 AutoGen 模型客戶端base_url 指到 http://127.0.0.1:GATEWAY_PORT/v1,使補全、嵌入與其他 OpenAI 相容延伸共用同一鑑權面,細節可參 vLLM 式路由篇。針對 GroupChat,為每次執行產生穩定的 X-Conversation-Id,並在每次工具呼叫附 X-Correlation-Id,以便閘道日誌串接多 Agent span。

工具 HTTP 應與聊天流量分離:薄包裝僅能對 OpenClaw 公布的 /tools/… 端點送出允許清單內路由,不得信任模型幻覺出的任意 URL。若含人類或使用者代理,應限制哪些訊息可觸發工具,避免評測腳本誤升權。長研究流請將 max_round 與 LiteLLM RPM 上限對齊,降低與 路由成本矩陣 所述節流衝突的機率。

重試模板

所有工具共用同一個非同步 HTTP 輔助函式。對 429 與短暫連線重設採指數退避加完整抖動,嘗試次數上限建議三。請不要401/403/413 自動重試,以免在多 Agent 圖中放大政策或 payload 錯誤。當閘道回傳熔斷本文(例如 503 含 retry_after_ms)時,應遵守延遲後僅做一次手動重試,並把信封帶回對話,避免靜默迴圈。

# 示意:httpx 風格政策(Python) # MAX_ATTEMPTS = 3 # BACKOFF_BASE = 0.4 # 秒 # for attempt in range(MAX_ATTEMPTS): # try: # r = await client.post(url, json=payload, headers=headers, timeout=8.0) # except httpx.TransportError: # if attempt == MAX_ATTEMPTS - 1: raise # await asyncio.sleep(BACKOFF_BASE * (2 ** attempt) + random.random() * 0.25) # continue # if r.status_code == 429 and attempt < MAX_ATTEMPTS - 1: # await asyncio.sleep(float(r.headers.get("retry-after", "2"))) # continue # if r.status_code in (401, 403, 413): # break # 映射為失敗信封,勿盲目重試 # return r

日誌脫敏

Worker 行程輸出 JSON Lines,欄位建議含 tsconversation_idtoolroutelatency_msoutcome脫敏 Bearer 前綴、可能含提示詞的完整請求本文,以及使用者家目錄下的實際路徑。將 API Key 字面量改為穩定的 key_fingerprint 雜湊。除錯用的模型輸出超過約四 KB 應截斷,並移除類似 PEM 或 sk- 權杖樣式的區塊。

事故應對可另開安全保管分流,僅保留未脫敏的關聯識別,且不得併入分析桶。欄位命名建議對齊 GenAI 慣例,讓 AutoGen 端 trace 與閘道 span 在後端可聯集查詢。

PR/CI 摘要示例

當 Agent 驅動儲存庫自動化時,將閘道與測試失敗映射成CI 形狀的摘要,供使用者代理貼回聊天。GitHub Actions 可寫入 $GITHUB_STEP_SUMMARY,Markdown 控制在約三百 token 內:失敗路由、關聯 ID、一句假設、下一道建議指令。

## OpenClaw 工具熔斷 — job summary(示例) **狀態:** 降級(熔斷開路) **路由:** POST /tools/docs-index **關聯:** c9f2-1a8b-44d0 **摘要:** 30 秒內連續 6 次逾時;冷卻 60 秒。 **下一步:** 於主機執行 openclaw doctor --json;將併發工具上限降至 4。 **勿做:** 冷卻結束前勿重跑完整 Agent 圖。

PR 機器人留言建議僅含 routecodehintretry_after_ms 的 JSON,避免附加原始 HTML 錯誤頁。於 AutoGen 以專用回合讀取該檔,使模型看到結構化事實而非可能仍含密鑰的 CI 日誌全文。

併發預算熔斷(快速對照)

參數 建議起點 AutoGen 注意
進行中工具呼叫 每程序 4~8 同一 GroupChat 程序內以 asyncio 訊號量共享。
GroupChat max_round 12~20 與 LiteLLM RPM 減去安全餘量對齊,避免工具迴圈耗盡額度。
熔斷觸發 每路由 30 秒內錯誤率 ≥50% 在統一記憶體壓力扭曲 SLO 前先開路。
冷卻時間 45~90 秒 retry_after_ms 誠實告知下一輪模型退避。

七步驟總覽:(1)鎖定 Python 與 Node、權杖檔權限;(2)發布允許清單與 JSON Schema;(3)模型客戶端指向回環閘道;(4)工具包裝層驗證後取訊號量;(5)設定每路由熔斷;(6)失敗正規化為信封;(7)以 openclaw doctor 煙霧測試並與 pip freeze 一併封存基線。

FAQ

每個 AutoGen Agent 是否要用不同閘道權杖?建議單機單權杖,scope 涵蓋呼叫與健康檢查;以環境(預發布/正式)分密鑰,而非以 Agent 分身,以免密鑰爆炸。

如何避免單一工具餓死整張圖?結合程序訊號量、每路由熔斷與誠實失敗摘要,讓選言者在該輪略過噪音工具。

LangGraph 文章是否適用?維運模式可參考 LangGraph 工具節點篇 的健康檢查合併思路,但 AutoGen 接線不同,建議與本 runbook 並列於程式庫旁。

公開頁(免登入):可比較 定價購買 SKU、閱讀 說明中心,並從 技術部落格索引 瀏覽其他閘道主題。