本頁導覽:最小權限白名單 · 對話路由 · 重試模板 · 日誌脫敏 · 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,欄位建議含 ts、conversation_id、tool、route、latency_ms、outcome。脫敏 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 機器人留言建議僅含 route、code、hint、retry_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 並列於程式庫旁。