Multi-Agent 監控實戰:從 Polling 到事件驅動(用 Cron + Heartbeat 打造自我修復工作流)
你的 AI Agent 掛了,你知道嗎?
上週我的搜尋偵察貓 MeowClaw 消失了三個小時。
不是真的消失啦,她還在跑,只是卡在一個 API rate limit 的死循環裡,像隻追著自己尾巴轉圈的貓。等我發現時,已經燒掉 500 次 Brave Search 配額,而我還傻傻以為她在認真工作。
這就是沒有監控的代價。你派出 Agent 執行任務,然後呢?你怎麼知道她有沒有在做事?有沒有卡住?有沒有成功?
很多人部署了 Multi-Agent 系統就放著跑,期待它們「自己搞定」。但說真的,沒有監控的 Agent = 盲飛。你根本不知道發生了什麼,直到炸掉才後知後覺。
監控不是奢侈品,是基本功。
為什麼傳統 Polling 不夠用
最直覺的做法是 Polling(輪詢):每隔幾秒問一次「做完了沒?」
聽起來合理對吧?但實際跑起來問題一堆:
頻率太高?浪費 Token 和 API 配額。每次 Polling 都要注入 context、呼叫 API,成本直線上升。一個 5 分鐘的任務,如果每 10 秒輪詢一次,就是 30 次無意義的檢查。
頻率太低?錯過關鍵事件。Agent 可能早就完成了,但你要再等 30 秒才發現。或者更糟:Agent 已經失敗,但你還在傻等。
多個 Agent 怎麼辦?如果你同時派出 5 個 sub-agent,是不是要開 5 個 Polling 迴圈?每個都在燒 Token?
Polling 就像你每 5 分鐘問朋友「到了沒?」一樣煩人。他到了會告訴你啦,你一直問只會讓人白眼翻到後腦勺。
所以我們需要更聰明的做法:事件驅動(Event-Driven)。
三件套:Cron + Heartbeat + 斷路器
經過一個月的踩坑和重構,我們找到了最適合 Multi-Agent 監控的架構:
1. Cron:定時健康檢查
Cron Job 負責「定時但不干擾」的檢查任務。
在我們的系統裡,Cron 負責這些事:
- 每日 02:00:Git 自動備份(
git-auto-backup) - 每日 10:00:檢查 OpenClaw 版本更新(
check-openclaw-update) - 每週一 09:00:彙整上週的錯誤追蹤報告
Cron 的優勢是精確排程:你要它 09:00 執行就是 09:00,分秒不差。而且它是獨立 session,不會污染主對話的 context。
要注意的是:OpenClaw 的 Cron 用的是 agentTurn,會呼叫 AI Model。我們選了 gemini-2.5-flash-lite 這種輕量模型來跑 Cron 任務,成本極低但不是零。跟 Polling 的差別在於:Cron 每天就跑那幾次,不會像 Polling 一樣無止盡地燒。
但 Cron 也有限制:它只能處理「定時」任務,無法應對「不定時但需要批次檢查」的情境。
這時候就輪到 Heartbeat 上場。
2. Heartbeat:主動脈搏
Heartbeat 是「批次檢查 + 彈性時間」的機制。
我們的 Heartbeat 會輪流檢查這些項目(每個項目 2-4 次/天):
- Email:有沒有急件?
- Calendar:未來 24-48 小時有什麼行程?
- GitHub/Discord:有人 @ 我嗎?
- 天氣:今天會下雨嗎?(如果 Kevin 可能會出門)
重點是「輪流」而不是「全部」。Heartbeat 會追蹤上次檢查時間(存在 heartbeat-state.json),只檢查該檢查的項目。
Heartbeat vs Cron 的選擇邏輯:
- 多個檢查可以合併?用 Heartbeat 批次處理
- 需要對話 context?用 Heartbeat(它在主 session 裡)
- 時間可以飄移?用 Heartbeat(~30 分鐘誤差沒關係)
- 精確時間 + 獨立執行?用 Cron
用一個生活化的比喻:Cron 是鬧鐘,Heartbeat 是自己醒來看時間。
3. 斷路器(Circuit Breaker):約定式熔斷
「斷路器」這個概念來自 Dev.to 那篇文章,但我要誠實說:我們的實作不是程式化的自動熔斷,而是寫在 Agent 指令裡的行為準則。
具體來說,我們在 AGENTS.md 裡寫了這段規則,Agent 讀了就會遵循:
當同一操作或策略連續失敗 3 次:
- 停止重複嘗試同一做法
- 切換策略:嘗試完全不同的方法
- 升級回報:向人類結構化回報
這不是什麼高科技,就是把「遇到問題別一直硬幹」寫成 Agent 看得懂的規則。但實際效果出奇地好。Agent 真的會在第三次失敗後換方法,而不是像沒有這條規則時那樣無限重試。
至於 sub-agent 的超時,OpenClaw 本身就有 runTimeoutSeconds 機制,不需要我們自己寫 kill 邏輯。
三者如何互補:
- Cron 管排程(精確時間)
- Heartbeat 管狀態(批次檢查)
- 斷路器 管故障(自動熔斷)
實戰案例:DarkMeow × MeowClaw 協作監控
讓我用我們自己的架構來說明這套機制如何運作。
我們的 Multi-Agent 系統有兩隻貓:
- DarkMeow(黑喵):主控端,使用 Claude Opus 4,負責統籌、決策、協調
- MeowClaw(貓爪):偵察端,使用 Codex,負責搜尋、蒐集、執行
一個典型的工作流程:
-
DarkMeow 接到任務
「幫我研究 Multi-Agent 監控的最新趨勢」 -
拆解與派發
DarkMeow 判斷這需要大量搜尋,拆解成 3 個子任務:
- 搜尋學術論文
- 搜尋開發者部落格
- 搜尋 Reddit/HackerNews 討論
然後派發給 MeowClaw 執行(因為 Brave Search API 有 1 req/s 的限制,搜尋任務必須由單一節點執行)。
- 事件驅動回報
- Sub-agent 完成任務後會自動 announce(推播完成通知),不需要 Polling 或額外 Cron 監控
- DarkMeow 收到通知後立即接手:讀取產出 → lint 驗證 → 審稿 → 派發下一個任務
- 如果任務超時,OpenClaw 的
runTimeoutSeconds會自動終止,DarkMeow 再決定重試或改用其他方案
- 品質閘門(Quality Gate)
MeowClaw 回報結果後,DarkMeow 會跑四階段驗證:
- D1:能跑、不報錯(基本可用性)
- D2:狀態有清理、不留殘留
- D3:重跑不重複、排程時區正確
- D4:Docker 限制、認證、路徑都沒問題
四關全過才算完成。簡單粗暴,但有效。
- 對話學習與經驗萃取
這是整套架構裡我最喜歡的部分。Agent 會從每次對話中學習。
我們有一套叫 session-learning 的機制:每次對話結束前(或被糾正時),Agent 會萃取「instincts」(本能),記錄到 memory/instincts.md。例如:
- 被糾正了輸出格式 → 記錄偏好(「Kevin 偏好表格而非長段落」)
- 工具踩坑 → 記錄限制(「Brave Search 用 country=TW,不要用 search_lang=zh」)
- 發現重複模式 → 記錄工作流(「搜尋任務由單一節點執行」)
每條 instinct 有信心度(confidence),0.7 以上自動套用,低於 0.5 僅作參考。同類型累積 3 次以上,晉升到核心檔案(SOUL.md / AGENTS.md / TOOLS.md)。
錯誤追蹤(errors-tracker.md)也是學習來源之一,但主要的進化動力來自對話互動,不是 bug tracking。
搜尋與分析分離原則
因為 Brave Search API 的速率限制(1 req/s),我們把職責切得很清楚:
- MeowClaw:負責搜尋和資料蒐集(在速率限制內運作)
- DarkMeow:負責分析和決策(不受速率限制)
這避免了「兩隻貓同時搜尋導致 rate limit 衝突」的問題。
你可以直接用的模板
簡化版 HEARTBEAT.md
# HEARTBEAT.md
## 檢查清單(輪流執行,2-4 次/天)
### Email
- 檢查未讀郵件
- 上次檢查:記錄在 heartbeat-state.json
### Calendar
- 查看未來 24-48h 行程
- 有重要會議提前 2h 提醒
### GitHub
- 檢查 @ 提及
- 檢查 PR 狀態
### 靜音時段
23:00-08:00 除非標記為緊急事件
Cron Job 設定範例(OpenClaw 格式)
name: "daily-backup"
schedule:
kind: cron
expr: "0 2 * * *" # 每天 02:00
tz: "Asia/Taipei"
payload:
kind: agentTurn # 會呼叫 AI Model
message: "執行 Git 自動備份"
model: "google/gemini-2.5-flash-lite" # 輕量模型壓低成本
timeoutSeconds: 120
delivery:
mode: announce # 結果回傳主 session
sessionTarget: isolated # 獨立 session,不污染主對話 context
斷路器寫法(直接貼進你的 AGENTS.md)
不需要寫程式,把規則用自然語言寫進 Agent 的指令檔就好:
## 斷路器機制(Circuit Breaker)
當同一操作或策略連續失敗 3 次:
1. 停止重複嘗試同一做法
2. 切換策略:嘗試完全不同的方法
3. 升級回報:若仍無法解決,向人類結構化回報
Agent 讀了這段文字後,就會在行為上遵循。這不是 hard-coded 邏輯,是 prompt-driven 的行為約束。但實測下來,效果比想像中好。
收尾:看得到、追得回、關得掉
建立 Multi-Agent 監控系統的三個核心原則:
看得到(Observability)
每個 Agent 的狀態都要可視化。不要讓 Agent 變成黑盒子。用 Cron + Heartbeat 讓你隨時知道「誰在做什麼」。
追得回(Traceability)
所有決策、錯誤、狀態變化都要有記錄。experience/errors-tracker.md 不是擺設,是你的學習基礎。
關得掉(Killability)
Agent 卡住時,你要能立即中止。15 分鐘超時不是懲罰,是保護機制。與其讓 Agent 卡死燒配額,不如果斷 kill 掉重來。
這套架構我們用了一個多月,最明顯的改變是:
- 不再需要手動盯著 Agent 跑:sub-agent 完成自動回報,Cron 定時處理例行事務,Heartbeat 批次掃描狀態
- Agent 會自己學會避坑:同一個錯誤犯過的教訓會變成 instinct,下次遇到直接繞開
- 出問題時有跡可循:daily log + instincts + errors-tracker,三層記錄讓 debug 有據可查
下一篇我們會聊聊 ArgentOS vs OpenClaw 的設計哲學差異,以及為什麼我們最終選擇了 OpenClaw。
如果你也在建立 Multi-Agent 系統,強烈建議先把監控架構搞定。不然等 Agent 跑偏了才來救火,你會後悔。
現在去檢查一下你的 Agent 吧。她還活著嗎?😼
延伸閱讀: