函數調用在 Azure Databricks 上

本文說明函式呼叫,以及如何使用它作為您生成式 AI 應用程式工作流程的一部分。 Databricks 函式呼叫與 OpenAI 相容,只能在模型提供過程中作為 基金會模型 API 的一部分使用,並且在提供 外部模型的服務端點時可用。

什麼是函式呼叫?

函式呼叫可讓您控制 LLM 的輸出,使其更可靠地產生結構化回應。 當您使用函式呼叫時,您可以使用 JSON 架構來描述函式自變數,以描述 API 呼叫中的函式。 LLM 本身不會呼叫這些函式,而是會建立 JSON 物件,從而讓使用者可用來在其程式碼中呼叫函式。

針對 Databricks 上的函式呼叫,基本步驟順序如下:

  1. 使用提交的查詢和 tools 參數中定義的一組函式來呼叫模型。
  2. 模型會決定是否要呼叫已定義的函式。 呼叫 函式時,內容是遵守您自定義架構之字串的 JSON 物件。
  3. 將字串在你的程式碼中剖析成 JSON,然後若有提供的引數存在,則呼叫你的函式。
  4. 將結構化回應附加為新訊息,以再次呼叫模型。 回應的結構是由您先前在 tools 中提供的函式定義的。 在這裡,模型會摘要結果,並將該摘要傳送給使用者。

何時使用函數呼叫

以下即為函式呼叫的使用案例範例:

  • 建立可藉由呼叫其他 API 來回答問題的助理。 例如,您可以定義 send_email(to: string, body: string)current_weather(location: string, unit: 'celsius' | 'fahrenheit') 之類的函式。
  • 根據自然語言定義和使用 API 呼叫。 例如,提出這個問題:「誰是我的頂級客戶?」 將其轉換為名為 get_customers(min_revenue: int, created_before: string, limit: int) 的 API 調用,然後調用該 API。

針對批次推斷或數據處理工作,例如將非結構化數據轉換成結構化數據。 Databricks 建議使用 結構化輸出

支援的模型

下表列出支援的模型,以及每個模型透過哪些模型服務功能可用。 請參閱 相關模型的適用術語

重要

  • Meta-Llama-3.1-405B-Instruct 將退役,如下所述。 請參閱 淘汰模型 , 以取得建議的取代模型,以及如何在淘汰期間移轉的指引。

    • 從 2026 年 2 月 15 日起,此模型將不再支援按令牌計費的工作負載。
    • 從 2026 年 5 月 15 日起,此模型無法供應設定的吞吐量工作負載。
  • 從 2024 年 12 月 11 日開始,Meta-Llama-3.3-70B-指令將取代對 Meta-Llama-3.1-70B-指令於基礎模型 API 的按令牌付費端點的支援。

模型 使用模型服務功能使這項服務可用 備註
雙子座 3.1 Flash Lite 基礎模型 API 介面 支援按令牌付費的端點。
Claude-Sonnet-4.6 基礎模型 API 介面 支援按令牌付費的端點。
Claude-Sonnet-4.5 基礎模型 API 介面 支援按令牌付費的端點。
Claude-Haiku-4.5 基礎模型 API 介面 支援按令牌付費的端點。
Qwen3-Next 80B A3B 指令 基礎模型 API 介面 支援按令牌付費的端點。
GPT OSS 20B 基礎模型 API 介面 支援按令牌付費和預配置的吞吐量端點。
GPT OSS 120B 基礎模型 API 介面 支援按令牌付費和預配置的吞吐量端點。
Gemma-3-12B 基礎模型 API 介面 支援按令牌付費和預配置的吞吐量端點。
Claude-Sonnet-4 基礎模型 API 介面 支援按令牌付費的端點。
克勞德作品-4.7 基礎模型 API 介面 支援按令牌付費的端點。
克勞德作品-4.6 基礎模型 API 介面 支援按令牌付費的端點。
克勞德作品-4.5 基礎模型 API 介面 支援按令牌付費的端點。
克勞德-Opus-4.1 基礎模型 API 介面 支援按令牌付費的端點。
Meta-Llama-4-特立獨行 基礎模型 API 介面 支援按使用量付費和配置的吞吐量工作負載。
Meta-Llama-3.3-70B-指示 基礎模型 API 介面 支援按使用量付費和配置的吞吐量工作負載。
Meta-Llama-3.1-405B-Instruct 基礎模型 API 介面 支援按使用量付費和配置的吞吐量工作負載。
Meta-Llama-3.1-8B-Instruct 基礎模型 API 介面 支援按使用量付費和配置的吞吐量工作負載。
gpt-4o 外部模型
gpt-4o-2024-08-06 外部模型
gpt-4o-2024-05-13 外部模型
gpt-4o-mini 外部模型
claude-3-5-sonnet-latest 外部模型 人類模型提供者
claude-3-5-haiku-latest 外部模型 人類模型提供者
claude-3-5-opus-最新版本 外部模型 人類模型提供者
claude-3-5-sonnet-20241022 外部模型 人類模型提供者。 此模型支援使用 電腦操作(beta)進行工具呼叫。
claude-3-5-haiku-20241022 外部模型 人類模型提供者
claude-3-5-sonnet-20240620 外部模型 人類模型提供者
claude-3-haiku-20240307 外部模型 人類模型提供者
claude-3-opus-20240229 外部模型 人類模型提供者
claude-3-sonnet-20240229 外部模型 人類模型提供者
claude-3-5-sonnet-20241022-v2:0 外部模型 Bedrock Anthropic 模型提供者。 此模型支援使用 電腦操作(beta)進行工具呼叫。
claude-3-5-haiku-20241022-v1:0 外部模型 基岩人文模型供應商
claude-3-5-sonnet-20240620-v1:0 外部模型 基岩人文模型供應商
claude-3-sonnet-20240229-v1:0 外部模型 基岩人文模型供應商
claude-3-opus-20240229-v1:0 外部模型 基岩人文模型供應商

使用函數呼叫

若要在生成式 AI 應用程式中使用函式呼叫,您必須提供函式 parametersdescription

tool_choice 的預設行為是 "auto"。 這可讓模型決定要呼叫哪些函式,以及是否要呼叫。

您可以根據您的使用案例來自訂預設行為。 以下是您的選項:

  • 設定 tool_choice: "required"。 在此案例中,模型始終會呼叫一或多個函式。 模型會選取要呼叫的一個或多個函式。
  • 設定 tool_choice: {"type": "function", "function": {"name": "my_function"}}。 在此案例中,模型只會呼叫特定函式。
  • tool_choice: "none" 設定為停用函式呼叫,並讓模型只產生使用者面向的訊息。

以下是使用 OpenAI SDK 及其 tools 參數的單一回合範例。 更多語法細節請參見 聊天完成 API

重要

在公開預覽期間,Databricks 上的函式呼叫已針對單一回合函式呼叫進行最佳化。

import os
import json
from openai import OpenAI

DATABRICKS_TOKEN = os.environ.get('YOUR_DATABRICKS_TOKEN')
DATABRICKS_BASE_URL = os.environ.get('YOUR_DATABRICKS_BASE_URL')

client = OpenAI(
  api_key=DATABRICKS_TOKEN,
  base_url=DATABRICKS_BASE_URL
  )

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"
            ]
          }
        }
      }
    }
  }
]

messages = [{"role": "user", "content": "What is the current temperature of Chicago?"}]

response = client.chat.completions.create(
    model="databricks-meta-llama-3-3-70b-instruct",
    messages=messages,
    tools=tools,
    tool_choice="auto",
)

print(json.dumps(response.choices[0].message.model_dump()['tool_calls'], indent=2))

此參數也支援 Claude 模型的電腦使用(beta)

JSON 架構

基礎模型 API 廣泛支援 OpenAI 接受的函式定義。 不過,針對函數調用定義使用更簡單的 JSON 架構,會導致產生高品質的函式呼叫 JSON。 為了促進更高品質的生成,Foundation 模型 API 僅支援 JSON 架構規範的子集

不支援下列函式呼叫定義項:

  • 使用正規表示式 pattern
  • 使用 anyOfoneOfallOfprefixItems$ref進行複雜巢狀或架構組合及驗證。
  • 例外情況除外的類型表單,例如 [type, “null”],其中列表中的一種類型是有效的 JSON 類型,而另一種是 "null"

此外,適用下列限制:

  • JSON 架構中指定的索引鍵數目上限為 16
  • 基礎模型 API 不會強制執行物件和陣列的長度或大小條件約束。
    • 其中包括 maxPropertiesminPropertiesmaxLength 等關鍵字。
  • 大量巢狀 JSON 架構會導致品質降低。 可能的話,請嘗試扁平化 JSON 架構以取得更好的結果。

代幣使用

提示插入和其他技術可用來增強工具呼叫的品質。 這樣做會影響模型取用的輸入和輸出權杖的數目,進而產生計費影響。 您使用的工具越多,您的輸入令牌就越多。

限制

以下是在公開預覽期間函式呼叫的限制:

  • Databricks 建議在多回合函式呼叫中使用 支援的 Claude 模型
  • 如果使用 Llama 4 Maverick,則目前的函式呼叫解決方案會針對單一回合函數調用進行優化。 雖然預覽期間支援多回合函式呼叫,但此功能仍在開發中。
  • 不支援平行功能呼叫。
  • tools 中可定義的函式數目上限為 32 個函式。
  • 針對配置的吞吐量支援,只有在新的端點上才支援函式調用。 您無法將函式呼叫新增至之前建立的端點。

筆記本範例

如需詳細的函式呼叫範例,請參閱下列筆記本

函数呼叫範例筆記本

取得筆記本