在 AI 應用開發中,單純的文字對答已經無法滿足複雜的業務需求。為了讓大型語言模型(LLM)能夠與外部世界互動(例如:查詢資料庫、執行終端機指令、發送電子郵件),「Function Calling」機制應運而生。
目前,由 OpenAI 提出的 Function Calling 規範已經成為 AI 業界的「事實標準」。本文將為您完整介紹這套標準的運作原理、格式範例,以及開發時必須注意的關鍵規範。
什麼是 Function Calling?
Function Calling 是一個讓 LLM 能主動決定何時、以及如何呼叫外部工具的機制。
它的核心流程如下:
- 開發者定義工具:開發者將所有可用的工具(Functions)以 JSON Schema 的格式連同使用者的 Prompt 一起發送給 LLM。
- LLM 判斷與決策:LLM 分析使用者的意圖。如果發現需要使用某個工具才能回答,它不會直接給出答案,而是回傳一段結構化的 JSON,告訴開發者:「請幫我呼叫這個工具,並帶入這些參數」。
- 開發者執行工具:應用程式收到這個 JSON 後,在本地端執行對應的程式碼。
- 回傳結果給 LLM:開發者將工具執行的結果傳回給 LLM,LLM 最終根據這個結果生成人類可讀的回覆。
核心格式範例
OpenAI Function Calling 主要透過 JSON Schema 來描述工具。以下是一個簡單的「天氣查詢」工具定義範例:
1. Request (定義工具)
當我們向 LLM 發送請求時,可以在 tools 陣列中宣告工具:
{
"model": "gpt-4o",
"messages": [
{ "role": "user", "content": "台北今天天氣如何?" }
],
"tools": [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "取得指定城市的目前天氣",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "城市名稱,例如:台北、高雄"
},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"]
}
},
"required": ["location"]
}
}
}
],
"tool_choice": "auto"
}
2. Response (LLM 決定呼叫)
LLM 收到上述請求後,會回傳類似以下的結構(tool_calls):
{
"message": {
"role": "assistant",
"content": null,
"tool_calls": [
{
"id": "call_abc123",
"type": "function",
"function": {
"name": "get_weather",
"arguments": "{\"location\":\"台北\",\"unit\":\"celsius\"}"
}
}
]
}
}
開發時需注意的關鍵規範
為了確保 Agent 運作穩定且不易出錯,實作 Function Calling 時請務必留意以下幾點:
1. 精確的 description
LLM 完全依賴 description 來決定是否使用該工具。
- 好示範:「取得指定城市的目前天氣,適用於即時氣象查詢。」
- 壞示範:「查詢天氣。」(過於簡略,LLM 可能無法在多個工具中做出正確選擇)
2. 定義明確的 JSON Schema
- 盡量使用
enum限制選項,減少模型亂猜參數的機率。 - 明確標示
required屬性。 - 如果參數格式很複雜,可以在
description中提供簡短範例(例如:"日期格式需為 YYYY-MM-DD")。
3. 處理「字串化的 JSON」
LLM 回傳的 arguments 是一個字串(String),而不是一個 JSON 物件。開發者在程式端必須自行執行 JSON.parse()。強烈建議包裝一層 try-catch 或防錯機制,以防 LLM 偶爾生成不合法的 JSON 格式。
4. 避免過多工具造成 Token 浪費
每次請求發送的 tools 定義都會佔用 Token 數量,並且可能拉長推論時間。如果您的 Agent 有 100 個技能,建議先透過一個路由模型(Router LLM)或向量檢索找出與當前任務相關的工具,再動態將其傳入。
結語
OpenAI 的 Function Calling 規範徹底改變了我們開發 AI 應用的方式,將語言模型從單純的「對話機器人」升級為具備行動力的「智慧代理(Agent)」。只要掌握好 JSON Schema 的定義細節與錯誤處理機制,您就能輕鬆讓 AI 與各種第三方 API、內部系統無縫接軌!