現代 AI 模型已超越單純的文字生成。透過 函式呼叫 與 結構化輸出,開發者能打造更智能、更可靠的應用程式。在 Novita AI,您現在可以在 Console 內 ** 快速確認**模型是否支援這些功能,讓整合更快速、更有效率。
什麼是函式呼叫?
函式呼叫是 AI 的一項能力,尤其常見於大型語言模型,它讓模型能與外部函式、工具或 API 互動,以執行特定任務,而不只是生成文字回應。模型會根據使用者的提示,判斷何時該呼叫某個函式、決定要叫用哪個正確的函式,並指定該函式所需的參數。函式的實際執行是由外部系統或應用程式處理,而非由模型本身執行。
https://www.youtube.com/watch?v=aqdWSYWC\_LI
函式呼叫如何運作?
函式呼叫讓 AI 模型能在對話過程中與外部工具、API 或內部函式互動。模型不僅能生成文字,還能 判斷何時需要函式、** 產生含有結構化引數的正確函式呼叫 ,並 執行它以取得結果**。這在自然語言理解與真實世界行動之間搭起橋樑,使模型能自動執行擷取即時資料、管理工作流程或觸發系統動作等任務。
函式呼叫的優點
- 真實世界互動:模型不僅能提供資訊,還能觸發行動。
- 自動化:簡化資料擷取、預約、表單提交等流程。
- 結構化理解:模型不再只依賴文字生成,而是將輸出組織成預先定義的格式,減少錯誤。
- 強化使用案例:打造更可靠、更高效的動態應用程式、助手和系統。
- 開發者效率:預先知道模型支援函式呼叫,能更快規劃整合,避免大量改動。
什麼是結構化輸出?
結構化輸出是指大型語言模型能產生符合預先定義特定格式的回應,而非自由形式的文字。這些輸出通常採用機器可讀的格式,例如 JSON、XML、已填寫的模板或表格資料,讓解析、驗證和整合至軟體系統或工作流程變得更容易。
結構化輸出如何產生
- 提示技巧:透過精心設計的提示引導模型產生所需格式的輸出。
- 函式呼叫 API:更穩健的方式是使用函式呼叫介面,讓模型回傳嚴格符合函式 schema 的引數,通常透過設定
strict: true等參數來強制執行。 - 有限狀態機 (FSM) 引導:在內部,生成過程會受到約束,使每個產生的 token 都符合輸出格式的規則,減少結構錯誤。
使用案例與優點
- 從非結構化文字中提取結構化資料,例如事件詳情、使用者資訊或查詢參數。
- 以模型產生的精確參數觸發外部 API 或函式。
- 建立依賴一致且經過驗證的資料交換的複雜多步驟工作流程。
- 在聊天機器人、資料提取和自動化系統等應用程式中,透過減少模型輸出的歧義來提升可靠性。
函式呼叫與結構化輸出
| 面向 | 🛠️ 函式呼叫 | 🗂️ 結構化輸出 |
|---|---|---|
| 目的 | 觸發外部函式 | 回傳結構化資訊 |
| 導向 | 行動導向 | 資訊導向 |
| 輸出 | 函式名稱 + 引數 | 預定義的結構化資料 (例如 JSON) |
| 範例 | 呼叫天氣 API 取得預報 | 以 JSON 格式回傳天氣報告 |
| 使用情境 | 需要模型採取行動時 | 需要乾淨、可解析的資料但無需行動時 |
如何在 Novita AI 上檢查函式呼叫與結構化輸出?
1:登入 Novita AI
進入 Novita AI 首頁後,點選右上角的 「Log In」 或 「Get Started」 按鈕。您可以使用 Google、GitHub、Hugging Face 或直接使用 Email 輕鬆登入——任您選擇!


在 Console 中點選「Model API」!
登入後,您會進入 Novita Console 儀表板。從上方點選 「Model API」。此區塊可讓您存取所有可用模型的完整清單,以及其功能的詳細資訊——包括是否支援 ** 函式呼叫和 ** 結構化輸出。

選擇您的模型並進行檢查!
找到您感興趣的模型,點選它,右側會彈出一個面板。在 「Supported Capabilities」 下方,您會立即看到是否支援 ** 函式呼叫和 ** 結構化輸出。


如何在 Novita AI 上使用函式呼叫?
1. 初始化客戶端
首先,您需要使用 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 = "meta-llama/llama-4-maverick-17b-128e-instruct-fp8"
- 定義要呼叫的函式
接下來,定義模型可以呼叫的 Python 函式。在此範例中,這是一個取得天氣資訊的函式。
# 示範用函式,模擬擷取天氣資料。
def get_weather(location):
"""擷取指定地點的目前天氣。"""
print("正在呼叫 get_weather 函式,地點:", location)
# 在實際應用中,您會在此處呼叫外部天氣 API。
# 此為簡化範例,回傳硬編碼資料。
return json.dumps({"location": location, "temperature": "60 degrees Fahrenheit"})
2. 建構包含工具與使用者訊息的 API 請求
現在,建立對 Novita 端點的 API 請求。此請求包含 tools 參數,定義模型可以使用的函式,以及使用者的訊息。
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "取得某個地點的天氣,使用者應先提供地點",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "城市和州,例如 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())
3. 輸出
{'id': '0', 'function': {'arguments': '{"location": "San Francisco, CA"}', 'name': 'get_weather'}, 'type': 'function'}
4. 以函式呼叫結果回應,並取得最終答案
下一步是處理函式呼叫,執行 get_weather 函式,並將結果送回模型,以產生給使用者的最終回應。
# 確保 tool_call 由上一步驟定義
if 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)
5. 輸出
{'id': '0', 'function': {'arguments': '{"location": "San Francisco, CA"}', 'name': 'get_weather'}, 'type': 'function'}
如何在 Novita AI 上使用結構化輸出?
1. 初始化客戶端
首先,您需要使用 Novita API 金鑰初始化客戶端。
from openai import OpenAI
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>",
)
# 前往 [Models](https://novita.ai/models) 頁面查看支援 `Structured Outputs` 的模型。
model = "mistralai/mistral-7b-instruct"
2. 定義 JSON schema
此範例建立一個 schema,用於從使用者輸入中提取支出資訊。
# 定義用於支出追蹤的系統提示。
system_prompt = """You are an expense tracking assistant.
Extract expense information from the user's input and format it according to the provided schema."""
# 定義結構化回應的 JSON schema。
response_format = {
"type": "json_schema",
"json_schema": {
"name": "expense_tracking_schema",
"schema": {
"type": "object",
"properties": {
"expenses": {
"type": "array",
"items": {
"type": "object",
"properties": {
"description": {
"type": "string",
"description": "支出的描述"
},
"amount": {
"type": "number",
"description": "花費的金額(美元)"
},
"date": {
"type": "string",
"description": "支出發生的時間"
},
"category": {
"type": "string",
"description": "支出類別(例如食物、辦公用品、旅行)"
}
},
"required": [
"description",
"amount"
]
}
},
"total": {
"type": "number",
"description": "所有支出的總金額"
}
},
"required": [
"expenses",
"total"
],
},
},
}
3. 請求聊天補全 API
現在,對 Novita 端點發出聊天補全請求。
此請求包含 response_format 參數,定義我們在上一步設定的 JSON schema。
chat_completion = client.chat.completions.create(
model=model,
messages=[
{
"role": "system",
"content": system_prompt,
},
{
"role": "user",
"content": """I spent $120 on dinner at an Italian restaurant last Friday with my colleagues.
Also bought office supplies for $45 on Monday.""",
},
],
max_tokens=1024,
temperature=0.8,
stream=False,
response_format=response_format,
)
response_content = chat_completion.choices[0].message.content
# 解析並美化 JSON
try:
json_response = json.loads(response_content)
prettified_json = json.dumps(json_response, indent=2)
print(prettified_json)
except json.JSONDecodeError:
print("無法將回應解析為 JSON。原始回應:")
print(response_content)
4. 輸出:
{
"expenses": [
{
"date": "2023-03-17",
"description": "Dinner at Italian restaurant",
"amount": 120,
"category": "Food & Dining"
},
{
"date": "2023-03-13",
"description": "Office supplies",
"amount": 45,
"category": "Office Supplies"
}
],
"total": 165
}
函式呼叫與結構化輸出大幅擴展了 AI 模型的能力。無論您需要自動化工作流程、擷取即時資料,或是提取結構化資訊,Novita AI 都能讓您輕鬆找到符合需求的模型。立即前往 Novita Console 探索模型,開始打造更智能的應用程式!
常見問題
AI 模型中的函式呼叫是什麼?
它讓模型能根據使用者提示,產生結構化的函式呼叫,從而觸發外部工具或 API。
什麼是結構化輸出?
結構化輸出是指模型以嚴謹、機器可讀的格式(例如 JSON)回傳回應,非常適合輕鬆整合。
函式呼叫和結構化輸出有什麼不同?
函式呼叫是行動驅動的(例如擷取天氣),而結構化輸出則專注於回傳乾淨、格式化的資料。
Novita AI 是一個一站式雲端平台,助您實現 AI 雄心。整合 API、無伺服器、GPU 實例——您所需要的成本效益工具。免除基礎設施,免費開始,讓您的 AI 願景成真。
