Ian Chou's Blog

優化 LLM 模型分派策略:Reasoning vs. Fast

優化 LLM 模型分派策略:Reasoning vs. Fast

隨著新一代模型(如 Grok 4.1, Gemini 3, GPT-5)的推出,我們擁有更多元化的選擇。這些模型不再是單一維度的「強 vs. 弱」,而是分化為 「深度推理 (Reasoning)」「極速反應 (Fast/Extraction)」 兩種特化型態。

為了在 履歷生成品質系統響應速度/成本 之間取得最佳平衡,我們對 Career Knowledge Base 的模型分派策略進行了全面優化。

核心策略:適材適所

我們將系統中的 LLM 任務分為兩大類:

1. 推理密集型 (Reasoning Heavy)

這類任務需要模型具備邏輯判斷、多步思考、或是生成高品質自然語言的能力。錯誤的判斷或平庸的寫作會直接影響最終產出的品質。

2. 提取與速度導向 (Extraction & Speed)

這類任務通常定義明確,主要是資訊提取、格式轉換或簡單總結。這這類場景中,低延遲與高吞吐量比深層推理更重要。

實作調整

我們更新了各個模組的 get_model()get_chat_model() 函式,將預設值指向最新的 Grok 4.1 系列(同時兼容 Gemini 3 與 GPT-5):

模組 任務類型 舊配置 新配置 原因
reflection.py Reasoning grok-3-mini grok-4-1-fast-reasoning 提升履歷寫作與反思品質
nli.py Reasoning grok-3-mini grok-4-1-fast-reasoning 減少 NLI 誤判 (Hallucination/Miss)
global_retrieval.py Extraction grok-3-mini grok-4-1-fast-non-reasoning 保持 Map-Reduce 的低成本與高併發
entity_extractor.py Extraction grok-3-mini grok-4-1-fast-non-reasoning 實體抽取不需要深度推理
coaching.py Extraction grok-3-mini grok-4-1-fast-non-reasoning 保持互動響應速度

不足之處與未來展望

雖然這次調整優化了模型選擇,但目前的實作仍有改進空間:

1. 硬編碼的預設值 (Hardcoded Defaults)

目前的模型選擇邏輯(如 if XAI: use grok-4-1...)是寫死在程式碼中的。雖然可以透過環境變數覆蓋(例如 XAI_MODEL),但使用者必須手動在 .env 中為每個模組設定不同的環境變數才能實現精細控制(這很麻煩)。

改善方向:建立統一的 ModelConfigLLMFactory,支援設定檔配置,例如:

models:
  reasoning: "grok-4-1-fast-reasoning"
  fast: "grok-4-1-fast-non-reasoning"
tasks:
  nli: "reasoning"
  extraction: "fast"

2. 缺乏動態路由 (Dynamic Routing)

目前的選擇是靜態的。有時候簡單的 NLI 任務其實不需要 Reasoning 模型,或者複雜的實體抽取可能需要更強的模型。

改善方向:引入「路由模型 (Router Model)」。使用一個極小模型(如 0.5B - 1B 參數,或甚至是簡單的分類器)先分析 Prompt 的複雜度,再動態決定要呼叫 Reasoning 模型還是 Fast 模型。

3. 可用性與 Fallback

如果 Reasoning API 暫時不可用或達到 Rate Limit,目前的程式碼可能會崩潰或需要依賴全面 fallback。

改善方向:實作更強健的 Fallback 機制。例如當 grok-4-1-fast-reasoning 失敗時,自動降級使用 grok-4-1-fast-non-reasoning 甚至其他供應商的模型。

4. 成本監控粒度

目前我們只有全域的 token 估算。將模型分化後,Reasoning 模型的 token 單價通常較高。

改善方向:在 db-info 或 logs 中區分 reasoning_tokensfast_tokens,讓使用者能更精確地掌握成本分佈。


Career Knowledge Base 持續演進,致力於用最有效率的方式幫助您構建完美的職涯履歷。