當系統愈來愈龐大,真實學生開始上線測試時,一個現實且殘酷的工程考驗迎面而來:我們的 AI 虛擬助教,到底該選擇哪一個 Gemini 模型?更致命的是,當大量請求湧入導致伺服器頻繁出現 503 Service Unavailable / Model is overloaded 時,系統該如何自救?
今天我們不只評測模型,更要直面真實開發中最常遇到的伺服器過載惡夢,為 AI 助教打造一套「動態模型備援機制」。
在開發階段,我們原本習慣在後端寫死呼叫單一模型(例如 gemini-3.6-flash)。雖然系統內建了簡單的 Retry 機制,但當該模型伺服器大塞車時,原本的「指數退避重試(等待 2 秒、4 秒後再試)」只是在死磕同一個已經掛掉的節點。
最終重試耗盡,學生畫面跳出紅字錯誤,整個學習體驗直接碎裂。
在開發「AI 助教系統 (AI Tutor System)」的過程中,我們遇到了一個嚴重影響學生體驗的問題:API 伺服器過載 (503 Service Unavailable)。 原本的系統架構中,我們寫死了呼叫單一模型(例如 gemini-3.6-flash)。雖然系統內建了重試機制 (Retry),但當該模型伺服器大塞車時,原本的「指數退避重試 (等待 2 秒、4 秒後再試)」只是在死磕同一個已經掛掉的節點。最終重試耗盡,學生依然得不到任何解答,造成極差的學習體驗。
為了解決這個問題,我們決定引入微服務架構中常見的 「優雅降級 (Graceful Degradation)」 與 「動態模型備援 (Dynamic Model Fallback)」 概念。 與其讓系統在一棵樹上吊死,不如準備一個「模型階梯清單」。當首選的最快模型無法服務時,系統應該要能具備自我修復的能力,自動切換到其他沒有當機的同級或次級模型來代打。
我們針對核心的 API 服務 (geminiService.js) 進行了以下重構:
定義備援梯隊 (Fallback Array): 我們不再 Hardcode 單一模型,而是宣告了一個陣列,定義了模型的優先順序:
javascript
constFALLBACK_MODELS=[
'gemini-3.6-flash',// 首選:速度最快、成本最低
'gemini-3.6-pro',// 備援一:如果 flash 滿載,換同代高階版
'gemini-1.5-flash',// 備援二:如果 3.6 節點全掛,退回上一代穩定版
'gemini-1.5-pro'// 備援三:最後的底線
];
動態注入模型 (Dynamic Routing): 將最大嘗試次數 (maxAttempts) 綁定為備援清單的長度。在每一次迴圈嘗試發送請求時,動態取出對應順位的模型 const currentModel = FALLBACK_MODELS[attempt]; 來執行。
無縫切換,減少等待 (Fast Failover): 修改了原本遇到 503 錯誤的 Catch 邏輯。當捕捉到伺服器過載時,不再進行無意義的長時間等待 (Sleep),而是僅做極短暫的緩衝 (500ms),並印出警告日誌:⚠️ 偵測到 503 模型 (gemini-3.6-flash) 忙碌,切換至備援模型進行第 2 次重試...,隨即立刻進入下一迴圈,用下一個備援模型發起請求。
flash 模型處理 99% 的流量,只有在極端狀況下才會呼叫備援模型,兼顧了營運成本與穩定性。在解決了 503 危機後,我們也針對不同任務來檢視模型表現:
| 評測項目 | Flash 系列 (如 gemini-3.6-flash) |
Pro 系列 (如 gemini-3.6-pro) |
|---|---|---|
| 平均回應延遲 | 極快(通常在 0.5 - 1.2 秒內) | 中等(約 1.8 - 3.0 秒) |
| 蘇格拉底引導穩定度 | 偶爾會因過度熱心而鬆口給提示 | 極高,能非常死守 System Instruction |
| 複雜程式碼與盲點推理 | 具備水準,但在面對巢狀邏輯時較易跳過細節 | 頂尖,能精準抓出程式碼深層的邏輯盲點 |
| 適用任務 | 日常對話、即時互動、高頻次問答 | 錯題深層診斷、複雜邏輯拆解、核心架構把關 |
透過「平時以 Flash 支撐 99% 流量,遇 503 自動往 Pro 或舊版降級」的策略,我們兼顧了營運成本與系統可用性。
在做這個專案以前,我以為只要把 Prompt 寫好、模型挑對,AI 助教就大功告成了。 但經過這天的洗禮我深刻體會到:對教育產品而言,「穩定在線」永遠比「回答多聰明」更重要。
如果學生在深夜振筆疾書準備考試、正想跟 AI 討論盲點時,系統卻因為 503 癱瘓,學習熱忱會瞬間被澆熄。透過動態模型備援機制,我們的 AI 助教終於在「教學靈魂」與「工程穩定度」上跨出了關鍵的一大步。
搞定模型選型與 503 容錯機制後,接下來我們要跨越國界!第 22 天:「教育平權——同一個 AI Tutor,可以用不同語言教學生嗎?」,來測試多語系教學下的邏輯維持能力。