故障回退不是“逃生艙”,而是工作流程的正常路徑
很多開發者把 MCP(Model Context Protocol)工作流程中的 failure fallback 當作最後一道保險,但實際開發時卻常踩坑。最常見的誤解是:fallback 只在主流程完全崩潰時才觸發。真實情況是,fallback 應該主動管理不確定的中間狀態,而不是等錯誤堆疊溢位再被動接手。
舉個例子:一個多步驟 Agent 工作流程,第一步呼叫天氣 API 成功,第二步根據天氣資料產生推薦列表,第三步驟透過 MCP 工具寫入資料庫。如果第二步驟的 LLM 呼叫逾時(例如上下文視窗滿了),傳統錯誤處理會直接拋異常,整個 workflow 重新開始。但合理的 failure fallback 應該能識別出“第二步失敗但第一步的結果仍然有效”,然後嘗試用簡化提示詞重試第二步,或者跳到一個本地規則引擎根據第一步結果生成推薦——這比全局重試快一個數量級。
這引出核心原則:fallback 不是單一行為,而是一個帶有狀態感知的決策樹。
設定檢查清單:7 個關鍵動作
以下檢查清單對應一個典型的 MCP Agent 工作流程。每個動作都附帶「為什麼重要」和「最容易做錯的地方」。
1. 為每個 MCP 工具呼叫定義明確的失敗訊號
- 逾時、HTTP 錯誤、空回傳、格式異常 —— 每種訊號應該對應到不同的 fallback 策略。
- 容易做錯:把所有錯誤都歸類為「重試 3 次後放棄」。例如
null傳回可能代表“查詢無結果”,而不是“服務不可用”。
2. 在 context 中傳遞“操作歷史”
- 將已完成的步驟、中間結果、目前重試次數寫入一個可序列化的歷史對象,隨每次 MCP 呼叫傳遞。
- 容易做錯:用記憶體變數儲存歷史,導致分散式元件無法共享狀態。必須用 Redis 或資料庫持久化。
3. 為每個步驟設定獨立逾時和降級路徑
- 例如:步驟 A(呼叫 MCP 工具 X)逾時時間 5 秒,降級路徑是呼叫工具 Y;步驟 B(LLM 產生)逾時時間 10 秒,降級路徑是使用本機範本。
- 容易做錯:整個工作流程共用一個逾時。一個慢步驟拖死全域。
4. 實作冪等性保證
- 如果 fallback 重試一個已成功的步驟,不能造成重複。例如資料庫寫入應該用 upsert 而不是 insert。
- 容易做錯:認為 MCP 工具天然冪等。實際上很多第三方 API 的「創建」操作不是冪等的。
5. 設定 fallback 觸發優先權與互斥鎖
- 當多個步驟同時失敗,應該先處理最依賴的步驟。用互斥鎖防止兩個 fallback 同時修改同一個資源。
- 容易做錯:同時啟動兩個 fallback 路徑,都嘗試回滾資料庫,造成死鎖。
6. 預先定義“安全終止狀態”
- 當所有 fallback 都失敗,工作流程應該進入一個已知的終止狀態(例如
aborted或partial_completed_with_warning),並記錄哪些步驟成功、哪些跳過。 - 容易做錯:讓工作流程進入未定義狀態,後續人工檢查時無法確定哪些資料可靠。
7. 用健康檢查端點驗證 fallback 有效性
- 每次啟動 Agent 時,像單元測試一樣執行一次模擬的失敗流程,確認 fallback 能正確觸發。
- 容易做錯:以為 fallback 只在線上出問題時生效,從未在測試環境演練過。

一個真實的失敗場景
某電商 Agent 需要:①搜尋商品 → ②取得使用者偏好 → ③產生建議文案 → ④推播通知。步驟②依賴一個即時使用者畫像 API,偶爾回傳 503。最初開發者在步驟②失敗時直接跳步驟④,推播了無上下文的通知。用戶收到「你可能會喜歡」但沒有任何商品推薦,轉換率瞬間下降 40%。
根本原因:fallback 路徑沒有區分「API 不可用」和「使用者畫像資料缺失」。修正後,步驟②失敗時 fallback 使用快取的歷史資料(即使不是最新),步驟③仍能產生個人化文案。這個差別在於:快取資料可能不夠準確,但總比隨機推送好。

最容易踩的 3 個坑
-
fallback 路徑太複雜。一個 5 步驟工作流程,每步配 3 種 fallback,最終 fallback 嵌套 15 種組合。維護成本急劇上升,且容易出現路徑衝突。建議:每個步驟最多 2 種 fallback(一種重試、一種降級),超出者直接終止。
-
忽略日誌和可觀測性。 fallback 發生後,開發者因為日誌不全,無法重現觸發條件。必須記錄每個 fallback 觸發的上下文、歷史狀態和最終決定。
-
認為 fallback 只是程式碼問題。不少團隊只寫 fallback 邏輯,不更新文件和警告。線上 fallback 頻繁觸發,卻沒人知道閾值是否合理。應該像效能監控一樣常態追蹤 fallback 率。
備用方案:當檢查清單本身失效時
如果按照上述清單設定後,fallback 仍然無法讓工作流程恢復正常(例如主 MCP 工具所在服務完全癱瘓),你需要更高層級的架構級備用方案:
- 切換 MCP Provider:預先配置第二套 MCP 工具端點,使用不同的 API 提供者(例如從 OpenAI 切換到 Anthropic)。需要確保兩套工具的回傳 schema 一致。
- 人工審核佇列:當所有自動 fallback 耗盡,將失敗的任務寫入一個佇列,並透過 Webhook 通知維運人員手動處理。
- 工作流程版本回退:如果目前版本 workflow 的 fallback 率超過閾值(例如 20%),自動切換到上一個穩定版本的工作流程定義。
這些方案不在每日檢查清單內,但應該在首次部署時就規劃好。
下一步
現在你了解 MCP workflow failure fallback 的實作原理和常見迷思,接下來可以有系統地學習 Agent 工作流程的整體設計。以下推薦的資源和課程能幫你從「能工作」進化到「可靠生產」。

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