Agent Workflow Retry Policy 是什麼?為什麼需要它?
Agent workflow 由多個步驟組成:呼叫 LLM、執行工具、讀寫記憶體、與外部 API 互動。每一步都可能因為網路抖動、API 限流、逾時或中間狀態不一致而失敗。 Retry policy 決定了當某一步失敗時,系統應該如何重新嘗試——重試多少次、間隔多久、哪些錯誤值得重試、重試時的冪等性怎麼保證。
沒有重試策略,一次瞬態故障就會導致整個 workflow 徹底失敗;而重試策略設定不當,又可能浪費算力、放大系統負載,甚至掩蓋真正的 bug。
核心機制:重試條件、退避策略與逾時
1. 哪些錯誤值得重試?
不是所有錯誤都該重試。區分兩類錯誤:
- 可重試 (retriable):網路逾時、HTTP 503、API 限流 (429)、臨時性服務無法使用。這些錯誤有較高機率在重試後恢復。
- 不可重試 (non-retriable):HTTP 400 參數錯誤、401 認證失敗、403 權限不足、404 資源不存在。重試這些錯誤只會白費流量,應該直接失敗並觸發警報。

// 伪代码示例
if (error.IsRetriable()) {
executeWithRetry(step, retryPolicy);
} else {
failImmediately(step, error);
}
2. 退避策略:指數退避 + 抖動
連續重試只會加重系統擁塞。標準做法是指數退避 (Exponential Backoff):每次重試間隔翻倍,並加入隨機抖動 (jitter) 避免所有客戶端同時重試。
| 重試次數 | 基礎間隔(固定) | 指數退避(2^n) | 指數退避+抖動 |
|---|---|---|---|
| 1 | 1s | 1s | 0.5-1.5s |
| 2 | 1s | 2s | 1.0-3.0s |
| 3 | 1s | 4s | 2.0-6.0s |
| 4 | 1s | 8s | 4.0-12.0s |
建議配置:初始間隔 1s,最大間隔 30s,總超時上限 60s,重試次數 3-5 次。
3. 超時與熔斷
不能無限等待。每步驟應設獨立逾時 (timeout),整個 workflow 設全域逾時。當某步驟連續失敗達到閾值(例如 3 次內失敗率 > 50%),應觸發熔斷 (circuit breaker),暫停對該服務或步驟的重試一段時間,避免資源耗盡。
真實場景:呼叫外部天氣 API 時重試失敗
假設 agent 工作流程中有一個步驟透過外部 API 取得天氣資料。某次請求遇到 DNS 解析逾時,觸發重試。重試策略設為固定間隔 2s、最多 3 次。結果:接下來 2 次重試全部超時,第三次回傳 500。最終 workflow 報錯失敗。
問題分析:
- 錯誤類型判斷正確:網路逾時屬於可重試。
- 退避策略不合理:固定間隔 2s 太快,DNS 問題通常需要 10s 以上恢復。採用指數退避後,第一次 2s,第二次 4s,第三次 8s,可能第三次就成功了。
- 缺少熔斷:連續 3 次失敗後沒有暫停,後續再觸發該 agent 的請求會繼續重試,造成資源浪費。
改進後:指數退避 + 熔斷開關,當 1 分鐘內失敗率 > 30% 時,熔斷器開啟 30s,期間直接失敗並降級返回快取資料。

容易踩踏的坑:冪等性缺失與狀態殘留
重試最隱蔽的風險是非冪等操作被多次執行。例如 agent 呼叫付款介面、傳送通知、寫入資料庫-這些操作如果重試時不保證冪等,就會產生重複扣款、重複通知、資料髒寫。
解決方法:
- 每個請求附加唯一請求 ID (idempotency key),服務端會依照 key 去重。
- 或設計操作本身為冪等:例如"把庫存設為 100"是冪等的,"庫存減 1"不是。
另一個常見坑是狀態殘留:重試前某個中間狀態已經寫入資料庫 (如"處理中"),重試時沒有清理或跳過,導致邏輯重複花費或鎖定超時。最佳實踐是在重試步驟內保持事務性,失敗回滾或標記為可容忍重複。
失敗時的備用方案
即使設定了重試,仍有機率失敗。必須準備備選路徑:
- 降級 (Degradation):跳過失敗步驟,使用預設值或快取資料繼續 workflow。例如天氣 API 失敗,使用前一天預報資料。
- 人工介入:將失敗訊息寫入死信佇列或警告頻道,人工排查後重新執行。
- 補償交易 (Saga):對於跨步驟的工作流程,如果某步驟重試後仍失敗,觸發補償操作回退之前已成功的步驟。例如先建立訂單,後扣款;扣款失敗則補償關閉訂單。
- 重試佇列:將失敗步驟非同步推入重試佇列,延遲再試,不阻塞主流程。
總結:一份可操作的 checklist
配置 Agent workflow retry policy 時,請對照以下檢查點:
- 區分可重試與不可重試錯誤,為不可重試錯誤直接失敗。
- 採用指數退避策略,初始間隔 1s,最大 30s,加入 25% 隨機抖動。
- 設定總超時上限(如 60s)和每步逾時(如 10s)。
- 實現熔斷器,連續失敗率達到閾值時暫停重試。
- 檢查每一步是否為冪等運算;若非冪等,請用 idempotency key。
- 失敗時提供降級或補償方案,避免 workflow 完全崩潰。
- 記錄重試次數、間隔和最終結果到日誌,以便事後分析。
下一步:成為真正的 Agent 工程師
重試策略只是 Agent workflow 設計中的一環。如果你想從一般開發者轉型為 Agent 工程師,系統掌握 context 管理、workflow 編排、權限控制、記憶體機制等內容,我們的高品質原創付費文章和 AI 程式設計進階課程能幫你建立完整知識體系。

暫無評論,快來發表你的看法吧