這是一個非常關鍵的進階需求。要讓模型成為能調用 Calendar API 或 數據庫 的「行動派助理」,這已經超出了單純的說話風格微調,進入了 Function Calling(函數調用) 或 Agent(智能體) 的範疇。
在兩張 RTX 5090 上,這需要特殊的數據格式與訓練策略。以下是您的配置優先級與實作建議:
1. 核心技術優先級 (Priority Ranking)
第一優先:特定格式的 SFT (數據格式化)
- 理由: 模型必須學會「在什麼時候停止說話,並輸出一串代碼」。這通常需要特定的符號(如
<|call|>或json塊)。 - 建議: 數據集必須包含:
User Query->Thought (思考過程)->Call (調用函數)->Response (API 回傳結果)->Final Answer。
第二優先:LoRA ($R=32 \sim 64$)
- 理由: 函數調用需要極高的精確度(括號不能錯、參數名稱要對)。R=8 太小,容易出錯;R=32 或 64 能讓模型更精準地記住 API 的參數結構。
第三優先:Flash Attention 3 (必開)
- 理由: 函數調用通常涉及很長的「系統提示詞(System Prompt)」,因為你需要把 API 的定義(如
add_event(date, title))塞進 Prompt 裡。這會佔用大量 Context,5090 的 Flash Attention 能確保推論不卡頓。
2. 數據集的結構化設計
對於「工具調用型」助理,數據必須包含以下三種場景:- 直接調用: 「幫我訂明天下午兩點的會議。」 -> 輸出
call_calendar_api(...)。 - 澄清需求: 「幫我訂會議。」 -> 輸出 「請問是哪一天的會議?」 (不要瞎猜)。
- 多步驟處理: 「查一下我明天的空檔,然後訂一個午餐會議。」 -> 先
query_db,再add_event。
3. 2x 5090 專用的訓練設定
為了讓助理在調用 API 時「不手抖」(不寫錯字),請調整以下參數:
- Weight Decay (權重衰減): 設為 0.1。這能防止模型對特定的日期過擬合,讓它學會通用的 API 語法。
- Temperature (溫度): 訓練時不變,但推論時建議設為 0.1 或 0。對於 API 調用,我們需要確定性,不需要創意。
- Batch Size: 推薦全局 Batch Size 設為
64。
4. 實作代碼範例:Data Collator 處理 Function Calling
您需要將 API 的定義定義在 System Prompt 中,例如:
</>Python
SYSTEM_PROMPT = """你是一位專業助理。你可以使用以下工具:
1. query_database(query_str): 查詢數據庫。
2. add_calendar_event(title, start_time): 新增行事曆。
如果需要使用工具,請輸出 JSON 格式:{"tool": "...", "params": {...}}"""
# 訓練數據範例
training_example = {
"instruction": "幫我查一下預算表,並在明天下午三點排個審核會。",
"output": '{"tool": "query_database", "params": {"query": "budget_2026"}}\n'
'{"tool": "add_calendar_event", "params": {"title": "預算審核", "start_time": "2026-03-04T15:00"}}'
}
✔️以上實作代碼範例,後續使用 RTX 4090 訓練時,會再詳論
5. 5090 雙卡環境的優勢:並行測試 (Auto-Evaluation)
既然有兩張 5090,你可以啟動一個自動化測試流程:
- 卡 1 (Training): 繼續微調模型。
- 卡 2 (Validation): 每隔 100 個 Step 就抓出最新的 Checkpoint,嘗試調用一個模擬的 Calendar API。
- 監控指標: 統計 JSON 格式錯誤率 與 參數正確率。一旦這兩個指標達到 95% 以上,即可停止訓練。
最後的關鍵提醒
處理外部工具時,模型最容易犯的錯是 「幻覺調用」(調用一個不存在的函數)。
























