Multi-Model ArchitectureLLM RoutingAPI Fallback

如何在一個 App 裡使用多個 AI 模型:架構與程式碼

閱讀 1 分鐘

在單一應用程式裡運行多個 AI 模型不是奢侈——是 2026 年的基本盤。沒有一款 AI 模型在所有面向都領先。複雜除錯用 Claude Opus。Agent 可靠度用 GPT-5.5。多模態用 Gemini。成本用 DeepSeek。單一模型的 App 不是把能力晾在一邊——就是為那些便宜模型就能一樣處理的任務多付錢。

但把多個模型接在一起——備援鏈、路由邏輯、統一的監控——正是沒人教的部分。教學教你怎麼呼叫一個 API。生產需要四個。這篇文章展示的架構,把「我會呼叫 GPT-5.5」變成「我的 App 對每個請求自動用最好的模型,而且比全旗艦便宜 70%」。

為什麼單一模型架構是個負債

供應商會掛點。 OpenAI 在 2026 上半年有三次大規模故障。直接 API 使用者看到錯誤。帶備援的多模型 App 默默把請求路由到 Claude 或 DeepSeek。使用者沒注意到。你的 SLA 要撐過供應商故障,前提是有別的地方可以送請求。除了故障,速率限制——特別是生產裡的 429 錯誤——是另一個單一供應商風險,多模型路由用跨供應商分散負載來消除它。

模型淘汰是每季的事。 OpenAI 過去一年淘汰了三款模型。Anthropic 一款。遷移要花幾週重新調整提示詞、驗證輸出——除非你已經整合並測試好備援模型。多模型架構代表淘汰只是路由變更,不是遷移專案。

沒有單一價格帶對所有任務都最佳。 分類與抽取不需要輸出 $30/M 的 GPT-5.5。DeepSeek V4 Flash 用 $0.28/M 就做出一樣好的結果。

一天 100,000 次分類請求的差別:$900/天 對 $8.40/天。多模型路由器自動抓住這個差距。單一模型 App 在每個請求上都付溢價。

一個不該發生的真實事故。 2026 年第一季我合作的電商團隊,用一款沒有備援的單一模型跑 AI 詐欺偵測。某個星期二下午,供應商的內部負載平衡器掛了,47 分鐘回傳 503 錯誤。那段時間的每一筆交易都被標記成手動審查:312 筆訂單、$47,000 的營收卡在半空中。

客服工單翻了三倍。工程團隊花了那 47 分鐘部署緊急 hotfix 切換供應商——如果一開始就為多模型架構設計,這只是一次設定切換。他們在下一個 sprint 出貨了備援鏈:30 行 Python 加一個早上的測試。

這次故障的總成本:退刷、手動審查人力、還有棄購客戶流失的回購營收,約 $12,000。

統一用戶端模式

多模型架構的地基是「任何供應商都通用」的單一介面。你的應用程式碼呼叫 client.chat()。用戶端處理路由、轉換與備援。

Python——UnifiedClient 類別:

from openai import OpenAI
import logging

class UnifiedLLMClient:
    def __init__(self, base_url: str, api_key: str):
        self.client = OpenAI(base_url=base_url, api_key=api_key)

    def chat(self, model: str, messages: list, **kwargs):
        """One method. Any model. Same parameters."""
        return self.client.chat.completions.create(
            model=model,
            messages=messages,
            **kwargs
        )

model 參數是供應商之間唯一會變的。其他一切——訊息格式、串流、temperature、max_tokens——都不變。這就是 OpenAI 相容標準重要的原因:它把多模型架構變成設定問題,而不是整合問題。LiteLLM 的路由器這類工具把這篇文章的 5 種策略全部實作成設定選項。

聚合平台更進一步:base_url 指向一個已經路由到所有供應商的端點。你的統一用戶端變成一次 API 呼叫,model 參數可以是 "gpt-5.5""claude-opus-4-8""gemini-3.1-pro""deepseek-v4-pro"——不需要供應商特定的程式。

備援鏈:一個請求都不能掉

最簡單的多模型模式——也是防止最多事故的那個。

import logging
from openai import OpenAI

client = OpenAI(
    base_url="https://api.tokspan.com/v1",
    api_key="ts-your-key-here"
)

FALLBACK_CHAIN = [
    "claude-opus-4-8",      # Primary
    "gpt-5.5",               # First fallback
    "deepseek-v4-pro"        # Last resort
]

def chat_with_fallback(messages, model_chain=FALLBACK_CHAIN, timeout=30):
    """Try models in order. First success wins. All fail = raise."""
    last_error = None

    for model in model_chain:
        try:
            response = client.chat.completions.create(
                model=model,
                messages=messages,
                timeout=timeout
            )
            return response.choices[0].message.content
        except Exception as e:
            last_error = e
            logging.warning(f"Model {model} failed: {type(e).__name__}. Trying next in chain.")
            continue

    raise RuntimeError(f"All {len(model_chain)} models failed. Last error: {last_error}")

生產考量。 對持續失敗的供應商做斷路器。一個連續 30 秒回 5xx 的供應商,接下來 60 秒應該被跳過——而不是每個請求都重試。用簡單的時間旗標追蹤每家供應商的冷卻。冷卻結束後用一個請求探測。成功就解除冷卻;失敗就重設計時器。

這實際省下什麼。 OpenAI 在 2026 上半年經歷三次大規模故障。跑 GPT-5.5 的單一模型 App 分別掛了 47 分鐘、23 分鐘、12 分鐘——超過 80 分鐘的面對使用者錯誤。跑上面三模型備援鏈的團隊,三次事故全部零停機。OpenAI 復原期間,請求默默路由到 Claude 和 DeepSeek。實作成本:十行的 try/except 鏈。不實作的成本:80 分鐘停機對你的事業值多少。

5 種路由策略:從成本導向到品質導向

備援鏈處理故障。路由策略處理剩下 99.9% 的請求——當一切都正常、你想讓每個任務都用最適合的模型時。

策略 1:成本導向路由。 把每個請求送到能妥適處理它的最便宜模型。

def cost_based_route(user_message: str) -> str:
    """Classify task complexity, route to cheapest capable model."""
    complexity = classify_complexity(user_message)  # Use a cheap model to classify
    if complexity == "simple":
        return "deepseek-v4-flash"     # $0.14/$0.28
    elif complexity == "medium":
        return "deepseek-v4-pro"       # $0.44/$0.87
    else:
        return "claude-sonnet-4-6"     # $3/$15

省下:比全旗艦省 70–95%。 分類器每個請求約花 $0.000004。省的是以美元計。路由之外的成本削減策略深入探討,請見成本削減策略指南

策略 2:延遲導向路由。 路由到符合最低品質門檻的最快模型。為每個端點設一個延遲預算——比方說 p95 500ms。如果主模型超標,流量切到更快的替代。生產裡,DeepSeek V4 Flash 短任務平均 180ms,Claude Opus 是 420ms——聊天介面裡使用者感覺得出來的 240ms 差距。取捨:如果你的快模型在內部評估基準分數較低,延遲路由可能默默讓回應品質退化。配上品質閘道:抽樣 5% 被路由的請求,把輸出跟你的基準比對。

策略 3:品質導向路由。 分類任務複雜度(簡單/中等/複雜)。導到對應的能力層。簡單——DeepSeek Flash。中等——Claude Sonnet。複雜——Claude Opus。

策略 4:帶加權分配的輪詢。 跨供應商分散負載,保持在各自的速率限制之內。除了速率限制管理,加權分配還解鎖成本混合:用固定比例混旗艦與低價模型(60% GPT-5.5 / 40% DeepSeek V4 Pro),得到可預測的每請求混合成本。每天 100,000 次請求、60/40 分割,你的輸出 Token 平均 $4.80/M——對比純旗艦的 $15/M——一行應用邏輯都不用改就省 68%。加權路由也平滑掉區域延遲尖峰:如果供應商 B 的 us-east-1 叢集劣化,在確認復原前把它的權重重新分配給 A 和 C。

策略 5:帶備援的優先順序。 固定偏好:「永遠用 Claude Opus,備援 GPT-5.5,再備援 DeepSeek。」最簡單實作。對多數團隊夠好。

策略比較:

策略最適合用於複雜度成本影響可靠性增益
成本導向高流量、成本敏感型 App節省 70–95%
延遲導向即時聊天、語音無影響
品質導向混合工作負載節省 50–90%
輪詢速率限制管理無影響
優先順序簡單的備援非常低無影響

多數團隊從優先順序開始(10 行、防故障)。API 帳單超過每月 $500 時加成本導向路由。其他策略是需要的時候再加的最佳化。帶故障轉移、快取與成本歸屬的完整路由實作,請見自訂路由文件

統一的可觀測性

多模型+多供應商=可觀測性不是選配。

統一的日誌 schema: 每個 API 呼叫都用相同的欄位記錄,不管供應商——OpenTelemetry 的 GenAI 語意慣例提供了多數可觀測性平台採用的標準 schema。

import time, json

def log_request(model: str, messages: list, response, latency_ms: float):
    log_entry = {
        "timestamp": time.time(),
        "model": model,
        "provider": get_provider_for_model(model),
        "prompt_tokens": response.usage.prompt_tokens,
        "completion_tokens": response.usage.completion_tokens,
        "cost": calculate_cost(model, response.usage),
        "latency_ms": latency_ms,
        "status": "success"
    }
    # Write to your logging system —CloudWatch, Datadog, custom
    logging.info(json.dumps(log_entry))

你真正需要的三個儀表板。 (1) 每模型每日成本——在「$500 的驚喜」發生前抓住它。(2) 每供應商 p50/p95 延遲——在使用者抱怨前偵測劣化。(3) 每供應商錯誤率——自動觸發斷路器與備援。

聚合平台這些儀表板開箱即用。如果你要自己建多模型系統,為可觀測性設定編列 2–3 天——它是「有東西不對勁」和「Claude Opus p95 延遲過去一小時多了 300ms、正把 30% 流量路由到 GPT-5.5」的差別。

什麼時候不該用多個 AI 模型

多模型架構有成本下限。對每天少於 1,000 次請求的 App,額外的複雜度很少划得來。

單一模型是正確選擇的時機:(1) 你的月 API 帳單低於 $100——路由省下的錢抵不過跨供應商管理備援鏈與可觀測性的整合開銷。(2) 你獨家使用一家供應商、且談好了讓切換變不經濟的企業量價——鎖住 GPT-5.5 的輸出 $8/M,好過按標準費率把量分散到三家供應商。(3) 你的應用只做單一狹窄的任務型態(例如只做固定知識庫的 RAG 問答),某一類模型一貫表現最好、供應商之間的價差可以忽略。(4) 你的團隊小——不到三個工程師——頻寬花在產品功能上比花在基礎設施抽象層好。

多模型成為淨贏的門檻:大約每月 10,000 次請求。低於它,把工程時間花在功能上,不是基礎設施。高於它,這篇文章的架構光是靠省錢,第一個月的成本就賺回來。

跨越那個門檻的團隊,從優先順序備援模式開始——10 行程式、不需要完整的路由層就能防住最大宗的故障模式。

常見問題

生產應該用幾款模型?

從 3 款開始:一款便宜主力(DeepSeek V4 Flash)、一款中階(Claude Sonnet 或 GPT-5.4 Mini)、一款旗艦(Claude Opus 或 GPT-5.5)。需求成長時再添專門化模型。超過 5 款通常就是過度最佳化——路由複雜度超過省下的邊際成本。

多模型路由會加很多延遲嗎?

路由邏輯本身:不到 10ms。成本導向與品質導向路由多一個分類步驟(用便宜模型約 200ms)。分類成本每請求約 $0.000004。當它把簡單任務送去便宜模型、每個請求省 $0.01–0.05 時,就值得。

我能從哪個最簡單的多模型模式開始?

主模型+一個備援。今天就加進你的程式:try: primary_model(); except: fallback_model()。十行。防住 LLM 相關停機最常見的原因。月 API 帳單到三位數時升級成完整路由。

不同的模型上下文視窗怎麼處理?

在用戶端設定裡為每個模型設 max_tokens。備援到上下文視窗較小的模型時,把對話紀錄截斷到放得下。記錄截斷事件——它會告訴你何時該升級備援模型的上下文上限。

不用聚合平台做得到嗎?

可以。你要管理 3–5 個供應商 SDK、3–5 套帳務系統、3–5 個速率限制儀表板,還要自己建路由、備援與可觀測性層。編列 1–2 週做初始設定、每月 4–8 小時維護。聚合平台把這一切收進帶內建路由、備援與監控的單一端點。問題是:你團隊的時間花在建基礎設施好,還是建功能好。

多模型架構不是為了複雜而複雜。它是對「沒有任何單一供應商能同時最佳化成本、品質、延遲與能力」的認知。這篇文章的架構對單一模型 App 只加約 50 行 Python——作為回報,它把供應商故障從故障模式裡刪掉,還把你的 API 帳單砍 70%。

輪到你了:打開你現有的 API 整合,加一款備援模型——try/except 裡一行,接住主模型的失敗、導到備援。那是 10 行程式。要花 15 分鐘。防住 LLM 相關停機最常見的原因。備援就位後,加上策略 1 的成本導向分類器,然後看你的帳單往下掉。你不需要重建 App——只需要加兩個決定點。

這篇文章開頭的備援鏈是十行 Python。成本導向路由器再四十行。如果你寧可把那小時花在產品功能上,聚合平台把兩者都當基礎設施出貨——你的 OpenAI 用戶端已經指著的那個端點,就能跨供應商路由、處理故障轉移、記錄每模型成本。不管你自己建路由層還是用現成的,架構決定都一樣:一款模型是負債。兩款是保險。三款是生產的標準。