共用方式為


Azure Databricks 上的函式呼叫

重要

這項功能處於公開預覽狀態,而且支持基礎模型 API 按令牌付費或布建的輸送量端點。

本文說明函式呼叫,以及如何使用它作為您生成式 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 的按令牌付費端點的支援。

重要

Meta Llama 3.3 已根據 LLAMA 3.3 社群授權,著作權 © Meta Platforms, Inc. 保留所有權利。 客戶須負責確保其遵守此授權的條款,以及 Llama 3.3 可接受的使用原則

Meta Llama 3.1 根據 LLAMA 3.1 Community License 獲得授權,Copyright © Meta Platforms, Inc。著作權所有,並保留一切權利。 客戶應負責確保遵循適用的模型授權。

Model 使用模型服務功能提供 備註
Meta-Llama-3.3-70B-指示 Foundation Model API 支援按令牌付費和布建的輸送量工作負載。
Meta-Llama-3.1-405B-Instruct Foundation Model API 支援按令牌付費和布建的輸送量工作負載。
Meta-Llama-3.1-8B-Instruct Foundation Model API 僅支援布建的輸送量工作負載。
gpt-4o 外部模型
gpt-4o-2024-08-06 外部模型
gpt-4o-2024-05-13 外部模型
gpt-4o-mini 外部模型

使用函式呼叫

若要搭配使用您的生成式 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))

JSON 結構描述

基礎模型 API 廣泛支援 OpenAI 接受的函式定義。 不過,針對函式呼叫定義使用更簡單的 JSON 結構描述,會產生高品質的函式呼叫 JSON。 為提高品質,基礎模型 API 僅支援 JSON 結構描述規格的子集。

不支援下列函式呼叫定義索引鍵:

  • 使用 pattern 的規則運算式。
  • 複雜的巢狀或結構描述組合與驗證會使用:anyOfoneOfallOfprefixItems$ref
  • 類型清單,特殊案例 [type, “null”] 除外,其中清單中的一種類型是有效的 JSON 類型,另一種是 "null"

此外,適用下列限制:

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

權杖使用

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

限制

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

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

筆記本範例

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

函式呼叫範例筆記本

取得筆記本