Azure Databricks 上的函式呼叫
本文說明函式呼叫,以及如何使用它作為您生成式 AI 應用程式工作流程的一部分。 Databricks 函式呼叫與 OpenAI 相容,只能在模型提供過程中作為 基金會模型 API 的一部分使用,並且在提供 外部模型的服務端點時可用。
什麼是函式呼叫?
函式呼叫可讓您控制 LLM 的輸出,使其更可靠地產生結構化回應。 當您使用函式呼叫時,您可以使用 JSON 架構來描述函式自變數,以描述 API 呼叫中的函式。 LLM 本身不會呼叫這些函式,而是會建立 JSON 物件,從而讓使用者可用來在其程式碼中呼叫函式。
針對 Databricks 上的函式呼叫,基本步驟順序如下:
- 使用提交的查詢和
tools
參數中定義的一組函式來呼叫模型。 - 模型會決定是否要呼叫已定義的函式。 呼叫 函式時,內容是遵守您自定義架構之字串的 JSON 物件。
- 將字串在你的程式碼中剖析成 JSON,然後若有提供的引數存在,則呼叫你的函式。
- 將結構化回應附加為新訊息,以再次呼叫模型。 回應的結構是由您先前在
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 建議使用 結構化輸出。
支援的模型
下表列出支援的模型,以及每個模型透過哪些模型服務功能可用。
- 如需基礎模型 API 所提供的模型,請參閱 區域可用性的基礎模型 API 限制 。
- 如需由外部模型提供的模型,請參閱 區域可用性 以了解地區的可用性。
重要
從 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 應用程式中使用函式呼叫,您必須提供函式 parameters
和 description
。
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
的規則運算式。 - 使用
anyOf
、oneOf
、allOf
、prefixItems
或$ref
進行複雜巢狀或架構組合及驗證。 - 例外情況除外的類型表單,例如
[type, “null”]
,其中列表中的一種類型是有效的 JSON 類型,而另一種是"null"
。
此外,適用下列限制:
- JSON 架構中指定的索引鍵數目上限為
16
。 - 基礎模型 API 不會強制執行物件和陣列的長度或大小條件約束。
- 其中包括
maxProperties
、minProperties
和maxLength
等關鍵字。
- 其中包括
- 大量巢狀 JSON 架構會導致品質降低。 可能的話,請嘗試扁平化 JSON 架構以取得更好的結果。
代幣使用
提示插入和其他技術可用來增強工具呼叫的品質。 這樣做會影響模型取用的輸入和輸出權杖的數目,進而產生計費影響。 您使用的工具越多,您的輸入令牌就越多。
限制
以下是在公開預覽期間函式呼叫的限制:
- 目前的函式呼叫解決方案已針對單一回合函式呼叫執行最佳化。 雖然預覽期間支援多回合函式呼叫,但此功能仍在開發中。
- 不支援平行函式呼叫。
-
tools
中可定義的函式數目上限為 32 個函式。 - 針對配置的吞吐量支援,只有在新的端點上才支援函式調用。 您無法將函式呼叫新增至之前建立的端點。
筆記本範例
如需詳細的函式呼叫範例,請參閱下列筆記本