共用方式為


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 建議使用 結構化輸出

支援的模型

下表列出支援的模型,以及每個模型透過哪些模型服務功能可用。 請參閱 這些模型的適用模型開發人員授權和條款

重要

從 2024 年 12 月 11 日開始,Meta-Llama-3.3-70B-指令將取代對 Meta-Llama-3.1-70B-指令於基礎模型 API 的按令牌付費端點的支援。

模型 使用模型服務功能使這項服務可用 備註
Claude-3.7-Sonnet 基礎模型 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 參數的單一回合範例。 如需有關其他語法的詳細資料,請參閱聊天工作

重要

在公開預覽期間,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 架構以取得更好的結果。

代幣使用

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

限制

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

  • 目前的函式呼叫解決方案已針對單一回合函式呼叫執行最佳化。 雖然預覽期間支援多回合函式呼叫,但此功能仍在開發中。
  • 不支援平行功能呼叫。
  • tools 中可定義的函式數目上限為 32 個函式。
  • 針對配置的吞吐量支援,只有在新的端點上才支援函式調用。 您無法將函式呼叫新增至之前建立的端點。

筆記本範例

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

函数呼叫範例筆記本

取得筆記本