如何生成Function Calling微調(diào)數(shù)據(jù)?
本文將深入探討如何為function calling任務(wù)生成高質(zhì)量的微調(diào)數(shù)據(jù),并通過具體例子和實戰(zhàn)步驟帶領(lǐng)讀者逐步理解這一技術(shù)核心。
大型語言模型在函數(shù)調(diào)用中的關(guān)鍵能力
在function calling微調(diào)過程中,模型需要掌握以下關(guān)鍵能力:
- 準(zhǔn)確的API選擇:識別并選擇最合適的API執(zhí)行用戶的查詢。這要求模型具備強大的理解能力,能夠分析用戶的自然語言意圖,并從多個可選的API中匹配到最相關(guān)的一個或多個。
- 精確的參數(shù)映射:將用戶的自然語言輸入映射到所選API的參數(shù)中。這一過程要求模型能夠處理復(fù)雜的嵌套結(jié)構(gòu)、依賴關(guān)系等復(fù)雜的API調(diào)用場景。
- 遵循API格式:生成的函數(shù)調(diào)用必須嚴(yán)格遵循API的預(yù)定義格式和語法要求,確保函數(shù)調(diào)用可以被正確執(zhí)行。
- 推理和一致性:在復(fù)雜的決策過程中,模型需要能夠推理,評估用戶的意圖和工具的要求,并確保參數(shù)選擇的準(zhǔn)確性和一致性。
接下來,我們將分步驟講解如何通過數(shù)據(jù)生成和微調(diào)來提升模型在這些方面的表現(xiàn)。
如何提升API選擇的準(zhǔn)確度?
分析用戶意圖
模型必須具備準(zhǔn)確解析用戶自然語言的能力,并從中提煉出操作意圖。例如,用戶可能會說:“幫我查找附近的餐館。”模型需要知道這與某個地理位置查詢API相關(guān),并可能需要調(diào)用一個提供附近餐館的API。
示例: 用戶輸入:
用戶:我想訂一個離我最近的意大利餐廳。
模型解析意圖,確定需要調(diào)用一個“餐廳搜索API”,其中包含餐廳類型、位置等參數(shù)。
提供合適的API選項
一旦意圖被解析出來,模型需要從多樣的API列表中選擇最合適的。比如,如果有多個API可以執(zhí)行相似的任務(wù)(如Google Maps API、Yelp API等),模型需要能夠根據(jù)用戶的特定要求選擇合適的API。
示例:
API1: Google Maps API - 提供餐廳、位置服務(wù)
API2: Yelp API - 提供餐廳推薦和評價
此時模型需要判斷用戶是否需要餐廳的推薦(評價)還是僅需位置信息,進(jìn)而選擇合適的API。
使用合成數(shù)據(jù)提升API選擇
為了提升模型對API選擇的敏感度,可以通過生成合成數(shù)據(jù)集。合成數(shù)據(jù)集通過創(chuàng)建不同的用戶場景來訓(xùn)練模型選擇合適的API。比如,生成一些不同問題場景的模擬數(shù)據(jù),并讓模型通過微調(diào)來學(xué)會正確的API選擇。
例子:
- 場景1:用戶詢問天氣 → 調(diào)用天氣API
- 場景2:用戶詢問路線 → 調(diào)用地圖API
通過這些合成場景,模型逐漸學(xué)習(xí)并優(yōu)化API選擇的策略。
如何實現(xiàn)精確的參數(shù)映射?
簡單參數(shù)映射
在簡單場景下,用戶的輸入會直接映射到API的參數(shù)。例如,用戶想搜索一家餐廳,輸入中包含餐廳類型和位置信息。模型需要將這些信息直接映射到API的參數(shù)中。
示例:
用戶:搜索一下北京的咖啡館。
映射后的API調(diào)用:searchRestaurants(locatinotallow="北京", type="咖啡館")
復(fù)雜嵌套結(jié)構(gòu)的處理
有時,API調(diào)用需要處理嵌套參數(shù)或復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。例如,用戶可能會在查詢中包含多個條件,如餐廳類型、價格范圍、評價等。模型需要能夠?qū)⑦@些復(fù)雜條件映射到API的嵌套參數(shù)中。
示例:
用戶:找一家北京的意大利餐館,評分至少4星,價格適中。
映射后的API調(diào)用:searchRestaurants(locatinotallow="北京", type="意大利餐館", rating>=4, price_range="適中")
使用合成API提升參數(shù)映射能力
通過創(chuàng)建一些復(fù)雜的合成API,并使用合成數(shù)據(jù)進(jìn)行訓(xùn)練,可以幫助模型更好地處理嵌套結(jié)構(gòu)和復(fù)雜參數(shù)。
示例:
- 合成API:search(location, type, rating, price_range) 合成數(shù)據(jù):場景1:用戶查詢餐廳并提供價格范圍和評價 場景2:用戶查詢電影,并提供導(dǎo)演和上映年份
通過多種合成場景,模型能夠?qū)W習(xí)如何處理不同類型的參數(shù)映射。
如何保證生成數(shù)據(jù)與Schema的一致性?
定義嚴(yán)格的Schema
img
為了確保生成的函數(shù)調(diào)用符合API的預(yù)定義格式,需要定義一個嚴(yán)格的Schema。Schema規(guī)定了每個API的參數(shù)類型、結(jié)構(gòu)以及可能的取值范圍。微調(diào)過程中,模型需要學(xué)會在調(diào)用API時嚴(yán)格遵循這些Schema。
示例: Schema:
{
"location": "string",
"type": "string",
"rating": "float",
"price_range": "string"
}
生成的數(shù)據(jù)必須符合這個Schema,例如:
searchRestaurants(locatinotallow="北京", type="意大利餐館", rating=4.5, price_range="適中")
使用Schema驗證生成數(shù)據(jù)
img
在訓(xùn)練過程中,所有生成的API調(diào)用都需要經(jīng)過Schema驗證,以確保格式的一致性。如果生成的數(shù)據(jù)不符合Schema要求,則進(jìn)行修正并反饋給模型。這種反饋機制可以幫助模型逐漸學(xué)習(xí)如何生成符合格式的數(shù)據(jù)。
如何確保用戶對話與函數(shù)調(diào)用的一致性?
用戶意圖和API調(diào)用的匹配
模型在生成函數(shù)調(diào)用時,必須確保API調(diào)用準(zhǔn)確反映用戶的意圖。為此,可以在訓(xùn)練過程中引入對話數(shù)據(jù),并要求模型不僅生成API調(diào)用,還要確保API調(diào)用能夠正確響應(yīng)用戶的需求。
示例:
用戶:我想查找最近的電影院。
映射后的API調(diào)用:searchTheaters(locatinotallow="當(dāng)前", distance="最近")
使用對話數(shù)據(jù)進(jìn)行微調(diào)
對話數(shù)據(jù)是訓(xùn)練function calling模型的重要資源。通過真實的用戶對話場景進(jìn)行訓(xùn)練,可以幫助模型更好地理解用戶意圖,并生成與之匹配的API調(diào)用。
合成API生成與場景設(shè)計的幾點啟發(fā)
- 合成API的優(yōu)勢
Function calling微調(diào)的目標(biāo)是提升模型的function calling能力,而不是去擬合現(xiàn)有的API。因此,使用合成API進(jìn)行訓(xùn)練是一種有效的方法。合成API允許開發(fā)者根據(jù)特定的應(yīng)用場景設(shè)計各種API接口,并在這些接口上進(jìn)行模型訓(xùn)練。
- 如何設(shè)計合成API?
合成API的設(shè)計可以基于特定領(lǐng)域的文本文檔,提取不同類型的問題場景。然后,基于這些場景,模型可以思考應(yīng)對這些場景的API調(diào)用形式。
- 提升API復(fù)雜度
通過調(diào)整API的屬性字段類型、嵌套關(guān)系等,可以進(jìn)一步提升合成API的復(fù)雜度。這能夠幫助模型更好地處理復(fù)雜的API調(diào)用場景。
- 生成對話數(shù)據(jù)
在function calling微調(diào)過程中,生成多樣化的對話數(shù)據(jù)至關(guān)重要。一個有效的方法是讓模型在給定場景下扮演提出問題的用戶,然后通過交互生成多樣化的對話數(shù)據(jù)。這可以最大程度保證對話數(shù)據(jù)的多樣性,并幫助模型在更多的場景下進(jìn)行function calling的訓(xùn)練。
結(jié)論
通過以上思路,開發(fā)者可以通過合成API和復(fù)雜場景的設(shè)計,逐步提升大型語言模型的API選擇、參數(shù)映射、格式一致性和對話匹配能力。這些微調(diào)方法能夠幫助模型在實際應(yīng)用場景中表現(xiàn)得更加智能和高效。
本文轉(zhuǎn)載自 ??AI小智??,作者: AI小智
