重點摘要
功能說明:函式呼叫 (Function Calling) 讓 AI 模型能與外部工具和 API 互動、執行特定工作,並存取即時資料,以進行系統操作與自動化流程。
支援模型:DeepSeek V3 系列、GPT 系列、Gemma 2 與 Mistral Nemo。
如何實作? 您可以透過 Novita AI 安裝 API,並從** 文件**中學習。
函式呼叫增強了大型語言模型 (LLM) 的能力,使其能與外部世界互動。除了產生文字之外,LLM 還能執行任務、存取即時資料,並進行複雜運算。函式呼叫扮演著 AI 知識與可執行任務之間的橋樑,讓 AI 代理或聊天機器人能夠與外部工具和服務互動。DeepSeek V3 是一款強大的開源模型,以其卓越的效能與效率脫穎而出。
什麼是函式呼叫 (Function Calling)
函式呼叫增強了大型語言模型 (LLM) 的能力,使其能與外部世界互動。除了產生文字之外,LLM 還能執行任務、存取即時資料,並進行複雜運算。函式呼叫扮演著 AI 知識與可執行任務之間的橋樑,讓 AI 代理或聊天機器人能夠與外部工具和服務互動。DeepSeek V3 是一款強大的開源模型,以其卓越的效能與效率脫穎而出。
函式呼叫的運作方式

取自 Google Cloud
- 宣告函式:定義可重複使用的程式碼區塊(函式),並清楚說明其功能、輸入與輸出。
- 提交提示:向 LLM 提供一則提示以及一組函式宣告,告知它有哪些可用工具。
- 模型分析:LLM 評估提示,判斷是否需要呼叫其中任何函式來滿足要求。
- 結構化輸出:如果需要呼叫函式,LLM 會產生 JSON 格式的結構化輸出,指定函式名稱與參數值。
- 呼叫函式:應用程式或系統使用結構化輸出呼叫指定的函式,並傳入所需參數。
- 執行函式:外部服務或 API 根據提供的參數執行該函式。
- 輸出回應:外部服務將結果或確認訊息回傳給 AI。
- 模型回應:LLM 使用收到的輸出為使用者產生自然語言回應,或供後續處理。
函式呼叫能解決哪些問題
即時資訊存取
- 股價更新
- 目前天氣資料取得
- 最新新聞存取
系統互動
- 寄送電子郵件
- 社群媒體發文
- 資料庫查詢與寫入
工作流程自動化
- 資料擷取與處理
- 多步驟任務執行
- 複雜分析自動化
資料準確性
- 確保資訊即時性
- 提供精確查詢結果
- 減少過時資料錯誤
增強 AI 能力
- 動態 API 整合
- 情境式任務執行
- 執行實際行動
改善使用者體驗
- 個人化回應
- 無需離開對話即可完成任務
- 無縫整合外部服務
如何透過 Novita AI 使用 DeepSeek V3 函式呼叫
本指南示範如何使用函式呼叫來取得使用者指定位置的目前天氣資訊。我們將逐步走完完整的 Python 程式碼範例。關於函式呼叫的具體 API 格式,請參考 API 參考文件 建立聊天完成。

- 初始化客戶端
首先,您需要使用您的 Novita API 金鑰初始化客戶端。
from openai import OpenAI
import json
client = OpenAI(
base_url="https://api.novita.ai/v3/openai",
# 從以下網址取得 Novita AI API 金鑰:https://novita.ai/settings/key-management。
api_key="<YOUR Novita AI API Key>",
)
model = "deepseek/deepseek_v3"
- 定義要被呼叫的函式
接著,定義模型可以呼叫的 Python 函式。在這個範例中,是一個用來取得天氣資訊的函式。
# 模擬取得天氣資料的範例函式。
def get_weather(location):
"""取得指定位置的目前天氣。"""
print("Calling get_weather function with location: ", location)
# 在實際應用中,您會在此呼叫外部天氣 API。
# 這是簡化範例,回傳硬編碼資料。
return json.dumps({"location": location, "temperature": "60 degrees Fahrenheit"})
- 建構包含工具 (tools) 與使用者訊息的 API 請求
現在,建立對 Novita 端點的 API 請求。此請求包含 tools 參數,定義了模型可以使用的函式,以及使用者的訊息。
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get weather of an location, the user shoud supply a location first",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g. San Francisco, CA",
}
},
"required": ["location"]
},
}
},
]
messages = [
{
"role": "user",
"content": "What is the weather in San Francisco?"
}
]
# 我們來送出請求並列印回應。
response = client.chat.completions.create(
model=model,
messages=messages,
tools=tools,
)
# 若在正式環境中,請檢查回應是否包含 tool_calls。
tool_call = response.choices[0].message.tool_calls[0]
print(tool_call.model_dump())
- 輸出
{'id': '0', 'function': {'arguments': '{"location": "San Francisco, CA"}', 'name': 'get_weather'}, 'type': 'function'}
- 用函式呼叫結果回應,並取得最終答案
下一步是處理函式呼叫,執行 get_weather 函式,然後將結果送回模型,以產生給使用者的最終回應。
# 確定 tool_call 已從上一步驟定義
if tool_call:
# 將助手的 tool_call 訊息加入對話歷史
messages.append(response.choices[0].message)
function_name = tool_call.function.name
if function_name == "get_weather":
function_args = json.loads(tool_call.function.arguments)
# 執行函式並取得回應
function_response = get_weather(
location=function_args.get("location"))
# 將函式回應附加到訊息中
messages.append(
{
"tool_call_id": tool_call.id,
"role": "tool",
"content": function_response,
}
)
# 取得模型的最終回應,此時已包含函式結果
answer_response = client.chat.completions.create(
model=model,
messages=messages,
# 注意:此處不應包含 tools 參數。
)
print(answer_response.choices[0].message)
- 輸出
{'id': '0', 'function': {'arguments': '{"location": "San Francisco, CA"}', 'name': 'get_weather'}, 'type': 'function'}
函式呼叫的常見問題與最佳實踐
AI 模型中的函式呼叫既帶來挑戰也提供機會。以下比較常見問題與對應的最佳實踐:
- 不準確的解讀 vs. 清晰的提示
問題:模型可能不準確地解讀使用者意圖,導致不必要或錯誤的函式呼叫。
最佳實踐:提供清晰簡潔的系統提示,描述聊天機器人的目的與可用函式。使用多輪範例來展示直接回應與適當的函式呼叫。
- 複雜工作流程管理
問題:管理包含多個互相依賴步驟的複雜工作流程時有困難。
最佳實踐:在採用更複雜的方法之前,先從提示工程開始。微調時重質不重量,從少量高品質範例著手。
- 細微決策判斷
問題:解讀函式輸出與外部資料以進行細微決策時面臨挑戰。
最佳實踐:必要時使用檢索增強生成 (RAG) 來注入上下文。結合微調與 RAG 等技術,平衡各自的優缺點。
- 資料結構複雜度
問題:在處理不斷演變的複雜資料結構(如圖形與巢狀物件)時有所限制。
最佳實踐:選擇適當的抽象層次,在簡潔程式碼與效能之間取得平衡。保持函式精簡且聚焦,以提升效率與可讀性。
- 舊系統整合
問題:與雜亂、模糊的舊系統整合時遇到困難。
最佳實踐:針對透過分析發現最常被呼叫的函式或熱點進行最佳化。處理舊系統時,考慮批次操作以減少開銷。
- 安全考量
問題:在執行特權函式時,若缺乏精密的判斷機制,會產生安全疑慮。
最佳實踐:實作穩健的錯誤處理機制,以管理非預期的 API 回應。確保強大的資料保護措施並符合法規,以維護使用者信任與敏感資訊的安全。
- 可擴展性與效能
問題:對於關鍵任務系統,在嚴格的可擴展性、可用性與效能需求上,可靠性尚未被證實。
最佳實踐:利用編譯器最佳化,並使用較低的溫度設定以獲得更聚焦且確定性的輸出。對熱點進行剖析與最佳化,可獲得最顯著的效能提升。
- 過度依賴函式呼叫
問題:模型可能在不需要時不必要或不當呼叫函式。
最佳實踐:仔細管理函式呼叫的實作方式。確保適當的錯誤處理與後備機制,即使在外部服務無法使用時,也能維持系統可靠性。
- 隱私與透明性問題
問題:當 LLM 代表使用者做出決策或採取行動時,會產生關於透明性與使用者同意的倫理疑慮。
最佳實踐:實作明確的文件說明與使用者同意機制。確保資料處理負責任且符合隱私法規(如 GDPR 或 HIPAA)。
總而言之,函式呼叫標誌著 LLM 的一項重大進展,使其能與企業資料及系統無縫互動,並賦予開發者建立更動態、更具功能性的應用程式。藉由輕鬆整合外部應用程式、系統與 API,LLM 變得高度多才多藝,能夠有效率地處理廣泛的任務。DeepSeek V3 等模型正引領這股潮流,提供簡化的途徑來使用這項變革性技術,為 AI 創新開啟無限可能。
常見問題
在 LLM 的背景下,什麼是函式呼叫?
函式呼叫是一種技術,讓大型語言模型能夠辨識何時需要透過外部函式或工具來執行特定任務,並產生結構化資料以呼叫該函式。
使用函式呼叫的主要優點有哪些?
主要優點包括:提高任務處理效率、讓開發者更容易更新函式以增強靈活性、可擴展性(無需大規模修改即可新增功能),以及個人化的使用者互動。
Novita AI 是一個全方位雲端平台,助您實現 AI 抱負。整合 API、無伺服器架構、GPU 實例 — 提供您所需的高成本效益工具。無需管基礎設施,免費開始,讓您的 AI 願景成真。
