立即體驗函式呼叫與結構化輸出

立即體驗函式呼叫與結構化輸出

現代 AI 模型已超越單純的文字生成。透過 函式呼叫結構化輸出,開發者能打造更智能、更可靠的應用程式。在 Novita AI,您現在可以在 Console 內 ** 快速確認**模型是否支援這些功能,讓整合更快速、更有效率。

什麼是函式呼叫?

函式呼叫是 AI 的一項能力,尤其常見於大型語言模型,它讓模型能與外部函式、工具或 API 互動,以執行特定任務,而不只是生成文字回應。模型會根據使用者的提示,判斷何時該呼叫某個函式、決定要叫用哪個正確的函式,並指定該函式所需的參數。函式的實際執行是由外部系統或應用程式處理,而非由模型本身執行。

https://www.youtube.com/watch?v=aqdWSYWC\_LI

函式呼叫如何運作?

函式呼叫讓 AI 模型能在對話過程中與外部工具、API 或內部函式互動。模型不僅能生成文字,還能 判斷何時需要函式、** 產生含有結構化引數的正確函式呼叫 ,並 執行它以取得結果**。這在自然語言理解與真實世界行動之間搭起橋樑,使模型能自動執行擷取即時資料、管理工作流程或觸發系統動作等任務。

函式呼叫的優點

  • 真實世界互動:模型不僅能提供資訊,還能觸發行動。
  • 自動化:簡化資料擷取、預約、表單提交等流程。
  • 結構化理解:模型不再只依賴文字生成,而是將輸出組織成預先定義的格式,減少錯誤。
  • 強化使用案例:打造更可靠、更高效的動態應用程式、助手和系統。
  • 開發者效率:預先知道模型支援函式呼叫,能更快規劃整合,避免大量改動。

什麼是結構化輸出?

結構化輸出是指大型語言模型能產生符合預先定義特定格式的回應,而非自由形式的文字。這些輸出通常採用機器可讀的格式,例如 JSON、XML、已填寫的模板或表格資料,讓解析、驗證和整合至軟體系統或工作流程變得更容易。

https://youtu.be/NGEZsqEUpC0

結構化輸出如何產生

  • 提示技巧:透過精心設計的提示引導模型產生所需格式的輸出。
  • 函式呼叫 API:更穩健的方式是使用函式呼叫介面,讓模型回傳嚴格符合函式 schema 的引數,通常透過設定 strict: true 等參數來強制執行。
  • 有限狀態機 (FSM) 引導:在內部,生成過程會受到約束,使每個產生的 token 都符合輸出格式的規則,減少結構錯誤。

使用案例與優點

  • 從非結構化文字中提取結構化資料,例如事件詳情、使用者資訊或查詢參數。
  • 以模型產生的精確參數觸發外部 API 或函式。
  • 建立依賴一致且經過驗證的資料交換的複雜多步驟工作流程。
  • 在聊天機器人、資料提取和自動化系統等應用程式中,透過減少模型輸出的歧義來提升可靠性。

函式呼叫與結構化輸出

面向 🛠️ 函式呼叫 🗂️ 結構化輸出
目的 觸發外部函式 回傳結構化資訊
導向 行動導向 資訊導向
輸出 函式名稱 + 引數 預定義的結構化資料 (例如 JSON)
範例 呼叫天氣 API 取得預報 以 JSON 格式回傳天氣報告
使用情境 需要模型採取行動時 需要乾淨、可解析的資料但無需行動時

如何在 Novita AI 上檢查函式呼叫與結構化輸出?

1:登入 Novita AI

進入 Novita AI 首頁後,點選右上角的 「Log In」「Get Started」 按鈕。您可以使用 GoogleGitHubHugging Face 或直接使用 Email 輕鬆登入——任您選擇!

log in

NOVITA AI LOG IN

立即試用 Novita AI!

在 Console 中點選「Model API」!

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

Step2: Click "Model API" in Console

選擇您的模型並進行檢查!

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

Step3: Choose your Model and Check it!

function calling on novita ai

如何在 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 願景成真。

推薦閱讀