面試題:大模型的FunctionCalling如何訓練得到?
主要來說,Function Calling 的訓練主要涉及數據構造、模型架構適配、多階段微調等關鍵環節。
主要開源方案可以參考Llama3.1或者Qwen-Agent,基本上在Llama3的技術報告( https://arxiv.org/pdf/2407.21783) 中就可以知道FunctionCalling的實現路徑。
以下是Llama3的技術報告里面如何用二階段訓練來提升Function Calling的準確性。
一、數據預處理
Llama3設計了一套多階段數據篩選策略,通過質量評估與內容優化提升訓練數據價值:
1. 主題分級體系
- 構建基于Llama 3 8B的層級分類系統,首先將數據劃分為"數學推理"等宏觀類別;
- 在頂層分類下建立細粒度子類別(如"幾何與三角學"),形成樹狀知識結構。
2. 多維質量評估
- 混合評估模型:結合獎勵模型(RM)與Llama質量判別器
通用文本:準確性、指令合規性、表達規范(三級評分)
編程數據:錯誤識別度、需求匹配度(二級評分)
- RM篩選:保留評分前25%的高質量樣本
- 智能質量檢測:通過Llama 3進行多維度評估
- 采用聯合篩選機制,保留至少一個評估體系認證的高質量樣本
3. 難度量化建模
- 復雜性雙因素評估:
意圖密度分析(Instag):通過Llama 3 70B標記對話意圖數量
難度分級系統:基于三階難度評分框架(簡易/中等/復雜)
- 生成綜合難度指標:意圖數量 × 人工難度分級
4. 語義優化處理
- 特征聚類:采用RoBERTa構建對話語義向量空間
- 分級去重策略:
按質量×難度綜合得分降序排列
動態相似度閾值過濾(余弦相似度<0.85)
貪婪選擇算法保留最具代表性的樣本
該方案通過質量-難度聯合建模與語義空間優化,在保證數據多樣性的前提下,顯著提升訓練數據的有效信息密度。
實證研究表明,該方法可使模型在復雜推理任務上的準確率提升17%,同時減少28%的訓練收斂時間。
二、訓練流程
構建數據集
主要是將函數名、參數類型、功能說明等以結構化文本輸入模型(如JSON格式)。
[
{"role": "user", "content": "查詢北京明天天氣"},
{"role": "assistant", "tool_calls": [{"name": "get_weather", "arguments": {"location": "北京"}}]},
{"role": "tool", "name": "get_weather", "content": "{\"temperature\": 22}"},
{"role": "assistant", "content": "北京明天氣溫22℃"}
]
其中,tool這一層就是給大模型當做參數判斷邏輯輸入,模擬調度??獲取天氣接口?
?后返回最終結果。
二階段訓練
- 預訓練階段:模型在通用語料庫上進行基礎語言建模訓練,未涉及工具調用能力;
- 后訓練微調(Post-Training):
合成數據生成:通過預訓練模型生成包含函數調用的對話數據,例如模擬用戶提問和對應的工具調用參數;
人工標注迭代:標注員逐步標注復雜場景,例如從單輪工具調用過渡到多輪交互,并加入異常參數處理樣本(如無效參數、多工具選擇等)。
三、訓練方法
- 監督微調(SFT)
- 使用標注數據對模型進行指令微調,強化其對工具調用的格式理解和參數生成能力。(示例:模型輸入包含工具定義的Prompt,輸出需嚴格匹配函數名及參數格式。)
- 強化學習(RLHF/DPO)
- 對工具調用的準確性和結果整合能力進行偏好排序,例如標注員對模型的工具調用決策打分,優化模型生成質量。
- 多任務學習
同時訓練模型完成常規對話和工具調用任務,避免單一任務過擬合。 在報告中,Llama發現 PPO 沒有 DPO 好,所以只用了 DPO,在preference data 中,有5.89%是和reasoning以及tool相關的。
本文轉載自???沐白AI筆記???,作者:楊沐白
