函數呼叫在大型語言模型的應用
前言
隨著大型語言模型(LLM)逐步擴展其應用能力,函數呼叫(Function Calling) 成為連接模型與外部世界的關鍵技術。透過這項功能,開發者可以讓模型主動呼叫自定義的函數,並與資料庫、API 或工具鏈進行互動,實現「思考→執行→回應」的智能流程。本文將帶你系統性了解函數呼叫的實作方式、應用範例與技術細節,讓你掌握如何打造具備行動能力的 AI 助手。
本篇目標
開始使用函式呼叫
影片內容整理3點:
-
Function Calling是一種讓 GPT 模型返回可讓程式執行的 JSON 函示呼叫回應,方便整合外部功能(如查天氣、查資料庫等)
-
從簡單函式呼叫開始,請求範例、定義與解析 JSON 結構,展示對話中如何交互使用這個功能
-
模型回傳 (call) 回應後,你的程式解析與執行函式再回送結果給模型
函式呼叫是將LLM可靠地連線到外部工具的能力,以實現有效使用工具和與外部API的互動。
GPT-4和GPT-3.5等LLM經過微調,以檢測何時需要呼叫函式,然後輸出包含呼叫函式的引數的JSON。函式呼叫呼叫的函式將作為您的人工智慧應用程式中的工具,您可以在單個請求中定義多個。
函式呼叫是構建LLM驅動的聊天機器人或代理的重要能力,這些聊天機器人或代理需要檢索LLM的上下文或透過將自然語言轉換為API呼叫與外部工具進行互動。
功能呼叫使開發人員能夠建立:
- 能夠有效地使用外部工具來回答問題的對話代理。例如,查詢「貝里斯的天氣怎麼樣?」將會轉換成函式呼叫,例如
get_current_weather(location: string, unit: ‘celsius’ | ‘fahrenheit’) - 用於提取和標記資料的LLM驅動解決方案(例如,從維基百科文章中提取人名)
- 可以幫助將自然語言轉換為API呼叫或有效資料庫查詢的應用程式
- 與知識庫互動的對話式知識檢索引擎
在本指南中,我們演示瞭如何提示GPT-4和開源模型等模型為不同的用例執行函式呼叫。
使用GPT-4進行函式呼叫
舉個基本例子,假設我們要求模型檢查給定位置的天氣。
單獨的 LLM 將無法回應此請求,因為它已在具有截止點的數據集上進行了訓練。解決這個問題的方法是將 LLM 與外部工具結合使用。您可以利用模型的函數調用功能來確定要調用的外部函數及其參數,然後讓它返回最終回應。以下是如何使用 OpenAI API 實現此目的的簡單示例。
假設使用者向模型提出以下問題:
What is the weather like in London?
中文意思是倫敦天氣如何?
要使用函式呼叫處理此請求,第一步是定義一個或一組天氣函數,您將作為 OpenAI API 請求的一部分傳遞:
tools = [
{
"type": "function",
"function": {
"name": "get_current_weather",
"description": "Get the current weather in a given location",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g. San Francisco, CA"
},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"]
}
},
"required": ["location"]
}
}
}
]
該函數返回給定位置的當前天氣。當您將此函數定義作為請求的一部分傳遞時,它實際上並不執行函數,它只返回一個 JSON 物件,其中包含調用函數所需的參數。以下是如何實現此目的的一些程式碼片段:get_current_weather
您可以定義完成函數,如下所示:
def get_completion(messages, model="gpt-3.5-turbo-1106", temperature=0, max_tokens=300, tools=None):
response = openai.chat.completions.create(
model=model,
messages=messages,
temperature=temperature,
max_tokens=max_tokens,
tools=tools
)
return response.choices[0].message
以下是編寫使用者問題的方法:
messages = [
{
"role": "user",
"content": "What is the weather like in London?"
}
]
最後,您可以調用上述並傳遞和 : get_completion,messages,tools
response = get_completion(messages, tools=tools)
物件包含下列項目:response
ChatCompletionMessage(content=None, role='assistant', function_call=None, tool_calls=[ChatCompletionMessageToolCall(id='...', function=Function(arguments='{"location":"London","unit":"celsius"}', name='get_current_weather'), type='function')])
特別是,物件包含模型擷取的重要引數,且是完成要求所必需的重要引數。arguments
然後,您可以選擇針對實際天氣呼叫外部天氣 API。獲得可用的天氣資訊後,您可以將其傳回模型,以總結給原始使用者問題的最終回應。
函數呼叫使用案例
以下是可以從 LLM 的函數調用功能中受益的使用案例清單:
- 對話代理:函數調用可用於創建複雜的對話代理或聊天機器人,通過調用外部 API 或外部知識庫並提供更相關和有用的回應來回答複雜的問題
- 自然語言理解:它可以將自然語言轉換為結構化的 JSON 數據,從文本中提取結構化數據,並執行命名實體識別、情感分析和關鍵字提取等任務。
- 數學問題解決:函數調用可用於定義自定義函數,以解決需要多個步驟和不同類型的高級計算的複雜數學問題。
- API 集成: 它可用於有效地將 LLM 與外部 API 集成,以根據輸入獲取資料或執行作。這可能有助於構建 QA 系統或創意助手。通常,函數調用可以將自然語言轉換為有效的 API 調用。
- 資訊提取:函數調用可以有效地用於從給定輸入中提取特定資訊,例如從文章中檢索相關的新聞故事或參考資料。
引用
- Fireworks 透過函數呼叫模型和API發布提高品質標準
- 基本測試代理工程工具使用和函數呼叫
- 函數呼叫
- 與API互動
- OpenAI 的函數應用
- 如何使用聊天模型呼叫函數
- 將 ChatGPT 的結構化資料支援推向極限
- 使用函數呼叫解決數學問題
References
目錄 : Applications - 大型語言模型應用和指南
上一篇 : Applications - 微調GPT-4o
下一篇 : Applications - 大型語言模型的上下文快取
