共用方式為


Azure Databricks 上的函式呼叫

重要

這項功能目前處於 公開預覽 階段,並支援以下平台:

  • 基礎模型 API 按字元計費
  • 基礎模型 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。著作權所有,並保留一切權利。 客戶應負責確保遵循適用的模型授權。

模型 使用模型服務功能提供 備註
Meta-Llama-3.3-70B-Instruct 基礎模型 API 介面 支援按使用量付費和配置的吞吐量工作負載。
Meta-Llama-3.1-405B-Instruct Foundation Model 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 外部模型 基岩人類模型提供者。 此模型支援使用 電腦操作(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))

此參數還支援 計算機使用 (beta),適用於由 Anthropic 和 Amazon 為 Anthropic 提供的 Bedrock 模型。 針對人類特定工具,包括計算機使用,請使用下列語法來呼叫您的工具:


"tools": [
  {
    "type": # Specify tool type here,
    "function": {
      # Required parameters for the tool type
    }
  }
]

JSON 架構

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

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

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

此外,適用下列限制:

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

代幣使用

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

限制

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

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

筆記本範例

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

函数呼叫範例筆記本

取得筆記本