今天介紹 LiteLLM 時,我們提到一個很好用的功能:
主要模型失敗,可以切到備援模型。
這叫做 Fallback。
但真正開始設定時,最容易犯的錯就是:
只寫一條規則。
模型 A 出錯,就換模型 B。
看起來很有備援。
實際上卻把完全不同的錯誤混在一起。
因為:
伺服器暫時過載,是一種錯。
文件太長,是另一種錯。
資料根本不完整,又是另一種錯。
今天只學一個動作:
設定 Fallback 前,先把錯誤分成「可切換、不可切換、轉人工」三類。
第一類:可切換
這一類通常是:
工作本身沒有問題,只是目前這個模型或 Provider 暫時無法完成。
例如:
- Rate Limit。
- 暫時服務錯誤。
- 某個模型部署無法連線。
- Timeout。
假設客服工作已經確認:
模型 A 和模型 B 都能完成。
而且兩個模型都通過同一組真實案例測試。
這時:
模型 A 暫時過載。
切模型 B。
就很合理。
這才是最典型的:
可自動切換。
LiteLLM 本身就支援這種 Fallback
LiteLLM 的 Router 可以先 Retry。
如果主要模型經過設定的重試後仍然失敗,再依照事先安排的 Fallback 順序切到其他模型群組。
所以系統可以是:
主要模型。
失敗。
先重試。
還是不行。
再切備援模型。
這是工具幫你處理的技術部分。
但真正重要的商業規則仍然是:
什麼錯誤才有資格進入這條備援路線?
第二類:不可切換
有些問題不是模型 A 壞掉。
而是:
這個工作本身現在就沒有足夠條件完成。
例如:
- 客戶沒有提供訂單編號。
- 重要文件缺了一頁。
- 價格資料有兩個互相矛盾的版本。
- 需要使用圖片,但備援模型不支援圖片。
- 需要特定 Tool Calling,但備援模型沒有通過測試。
這時如果只是把問題換給另一個模型:
缺少的資料還是缺少。
矛盾還是矛盾。
能力缺口也沒有消失。
所以這一類應標成:
不可自動切換。
例如:資料不足不是 Provider 故障
假設客戶問:
「幫我確認這筆退款。」
但系統裡根本沒有訂單編號。
模型 A 回答:
無法確認。
這時如果 Gateway 自動切到模型 B。
模型 B 還是沒有訂單編號。
如果它反而猜了一個答案,事情只會更糟。
所以:
資料不足時,正確下一步不是換模型,而是補資料。
Context 太長則是另一種情況
LiteLLM 本身可以針對 Context Window 過長設定專門的 Fallback。
例如主要模型無法容納這份長文件。
可以切到一個已經確認具有更大 Context Window,而且能完成同樣工作的模型。
這和「資料本身缺少」完全不同。
前者是:
資料有,只是模型裝不下。
後者是:
資料根本不存在。
所以不要都叫做:
模型失敗。
第三類:直接轉人工
還有一些工作,就算第二個模型也能做:
仍然不代表應該讓它自動接手。
例如:
- 正式退款。
- 付款。
- 修改合約條件。
- 正式報價。
- 對客戶做重要承諾。
- 刪除重要資料。
假設主要 AI 執行到這裡失敗。
最安全的備援不一定是:
模型 B。
而可能是:
停下來,交給人。
為什麼人工也算一種 Fallback?
因為備援的真正目的不是:
確保 AI 永遠一定要完成。
而是:
主要路徑出問題後,工作仍然有一條正確的下一步。
這條下一步可能是:
- 另一個模型。
- 另一個部署。
- 要求補資料。
- 停止。
- 人工處理。
只要能安全把工作接下去,它就是備援設計的一部分。
最簡單的三格表
設定 LiteLLM 前,可以先不要碰程式。
先拿出你現在真正的 AI 工作。
畫三格。
第一格:可自動切換。
- Provider 暫時故障。
- Rate Limit。
- Timeout。
- 已驗證的部署不可用。
第二格:不可自動切換。
- 資料不足。
- 輸入格式不符。
- 備援模型缺少必要能力。
- 結果本身互相矛盾。
第三格:直接轉人工。
- 正式付款。
- 退款核准。
- 不可逆修改。
- 重要對外承諾。
先完成這一張表。
再設定 Fallback。
不要把「內容被拒絕」自動理解成模型壞了
LiteLLM 也提供 Content Policy Fallback。
也就是某一個 Provider 因內容政策拒絕後,可以設定另一個模型作為備援。
技術上可以做到。
但企業使用時要特別小心。
因為模型拒絕的原因可能是:
- 不同 Provider 的內容政策不同。
- 你的工作碰到敏感內容。
- 原本流程本來就應該人工確認。
如果規則只是:
「誰拒絕,就一直換到有人肯回答。」
這其實不是備援。
而是在繞過原本應該檢查的邊界。
所以 Content Policy Error 要不要切換,應該另外制定規則。
例如一般客服和高風險客服要分開
一般客服:
「營業時間是幾點?」
模型 A 因暫時服務故障無法回答。
可以切模型 B。
高風險客服:
「幫我直接把這筆退款退掉。」
模型 A 無法完成。
這時不要因為 B 能操作工具,就自動切過去。
正確下一步可能是:
人工核准。
另一個常見錯誤:模型 B 有回答,就算備援成功
不是。
Fallback 成功至少有兩層。
第一層:技術成功。
模型 B 收到 Request,也正常產生 Response。
第二層:工作成功。
模型 B 的結果符合原本工作需要。
例如:
- 答案正確。
- 格式正確。
- 工具正確。
- 重要資料沒有遺漏。
第一層成功,不代表第二層成功。
所以正式設定前,要先測備援模型
最簡單的方法就是沿用我們之前做過的測試。
從真實工作挑一組代表案例。
讓主要模型和備援模型使用:
- 同樣資料。
- 同樣 Prompt。
- 同樣輸出要求。
比較:
- 正確率。
- 人工修改時間。
- 工具呼叫。
- 輸出格式。
- 成本。
通過之後,才進入:
可自動切換名單。
最重要的是測「真正故障時會不會切」
設定檔寫好還不算完成。
LiteLLM 官方現在建議,Proxy 的 Fallback 驗證應該在非正式環境裡,真的讓主要部署不可用,再送正常請求測試。
也就是不要只看:
設定看起來正確。
而是實際確認:
- 主要路徑真的失敗。
- Retry 有照規則發生。
- Fallback 有切到正確模型。
- 最後結果仍然符合要求。
測試時不要只測「模型掛掉」
至少可以準備四種情境。
情境一:Provider 暫時故障。
預期:
自動切換。
情境二:輸入太長。
預期:
只有已設定的大 Context 模型可以接手。
情境三:資料不足。
預期:
不要切模型,要求補資料。
情境四:正式付款。
預期:
不再嘗試其他模型,直接停在人類確認點。
這樣才是在測:
工作流程。
不是只測 API。
可以直接使用的 Fallback 分類 Prompt
你是我的 AI 備援流程設計助手。 我要建立 LiteLLM Fallback。 目前 AI 工作是: [描述工作] 主要模型: [模型] 候選備援模型: [模型] 請先不要產生 LiteLLM 設定檔。 先把可能失敗情況分成三類。 第一類:可以自動切換 只有在: 工作資料本身完整, 備援模型已通過相同工作測試, 而且問題主要來自 Provider、Rate Limit、Timeout 或暫時服務錯誤時, 才放進這一類。 第二類:不可自動切換 包含: 資料不足、 資料互相矛盾、 輸入格式錯誤、 備援模型缺少必要能力、 工作條件本身無法完成。 請寫清楚下一步應該補什麼,而不是換模型。 第三類:直接轉人工 包含任何: 付款、 退款核准、 正式報價、 合約修改、 刪除重要資料、 重要對外承諾、 其他不可逆或高風險操作。 最後替我產生一張清單: 錯誤情境。 分類。 是否 Retry。 是否 Fallback。 Fallback 到哪個已驗證模型。 是否必須人工確認。 如果某個錯誤無法判斷,標成「先停止」,不要預設系統一定要給出結果。
如果現在還沒有 LiteLLM,也可以先做這一步
今天這個方法並不一定要等工程師裝完 LiteLLM。
只要公司已經同時使用兩個 AI,就可以先問:
主要工具不能用時,我現在怎麼辦?
例如:
寫文章:
ChatGPT 暫時不能用,可以改 Claude。
公司正式付款:
原本流程出錯,不要換另一個 AI 自己決定。
資料缺少:
不是換 Gemini。
而是先找到缺的資料。
這就是同一個觀念。
今天最容易犯的錯
很多人以為備援就是:
A 不行。
換 B。
B 不行。
換 C。
直到有一個 AI 願意回答。
真正成熟的備援不是這樣。
因為有些錯誤:
換模型能解決。
有些錯誤:
所有模型都不該解決。
所以 Fallback 設定真正第一步不是:
選第二個模型。
而是:
先決定哪些失敗有資格換模型。
今天只需要記住一句話
LiteLLM 可以替你自動切換模型。
但它不能替你的公司決定:
這一次到底該不該切。
所以設定備援以前,先分清楚:
暫時故障,可以換。
資料或能力有問題,不要換。
高風險操作,直接交回人。
這三條線畫清楚之後,Fallback 才是在提高可靠性。
否則只是讓錯誤更有機會繼續往下跑。
今天,和 AI 一起進步一點。
每天學會一個 AI 技巧。
每天節省一點時間。
每天提升一點能力。
SasaDaily,陪你一起成長。