Azure Databricks での関数呼び出し
重要
この機能は パブリック プレビュー にあり、次の機能でサポートされています。
- Foundation Model API のトークンごとの支払い
- Foundation Model API のプロビジョニングされたスループット
- 外部モデルを提供するエンドポイントの提供
この記事では、関数呼び出しと、それを生成 AI アプリケーション ワークフローの一部として使用する方法について説明します。 Databricks 関数呼び出しは OpenAI 互換であり、Foundation Model 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 では、 構造化出力を使用することをお勧めします。
サポートされているモデル
次の表に、サポートされているモデルと、各モデルを使用できるようにするモデル サービス機能を示します。
- Foundation Model API で使用できるモデルについては、リージョンの可用性に関する Foundation Model API の制限 を参照してください。
- 外部モデルで使用可能なモデルについては、リージョンの可用性については、「 リージョンの可用性 」を参照してください。
重要
2024 年 12 月 11 日より、Meta-Llama-3.3-70B-Instruct は、Foundation Model API のトークンごとの支払いエンドポイントでの Meta-Llama-3.1-70B-Instruct のサポートを置き換えます。
重要
Meta Llama 3.3 は LLAMA 3.3 Community License に基づいてライセンスされています (Copyright © Meta Platforms, Inc. All Rights Reserved.) お客様は、本ライセンスの条項および Llama 3.3 受け入れ可能な使用ポリシーに準拠していることを確認する責任を負います。
Meta Llama 3.1 は LLAMA 3.1 Community License の下でライセンスされています (Copyright © Meta Platforms, Inc. All Rights Reserved.)。 お客様は、該当するモデル ライセンスへのコンプライアンスを遵守する責任を負います。
モデル | モデル サービス機能を使用して使用可能にしました | メモ |
---|---|---|
Meta-Llama-3.3-70B-Instruct | 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 | 外部モデル | |
claude-3-5-sonnet-latest | 外部モデル | Anthropic モデル プロバイダー |
claude-3-5-haiku-latest | 外部モデル | アンスロピックモデル提供者 |
claude-3-5-opus-latest | 外部モデル | Anthropic モデル プロバイダー |
claude-3-5-sonnet-20241022 | 外部モデル | Anthropic モデル プロバイダー。 このモデルでは、Computer Use (beta)を使用したツール呼び出しがサポートされています。 |
claude-3-5-haiku-20241022 | 外部モデル | 人間モデルの提供者 |
claude-3-5-sonnet-20240620 | 外部モデル | 人間工学モデル提供者 |
claude-3-haiku-20240307 | 外部モデル | Anthropic モデル プロバイダー |
claude-3-opus-20240229 | 外部モデル | Anthropic モデル プロバイダー |
claude-3-sonnet-20240229 | 外部モデル | Anthropic モデル プロバイダー |
claude-3-5-sonnet-20241022-v2:0 | 外部モデル | Bedrock Anthropic モデルの提供者。 このモデルでは、Computer Use (beta)を使用したツール呼び出しがサポートされています。 |
claude-3-5-haiku-20241022-v1:0 | 外部モデル | ベッドロック アンスロピック モデル提供者 |
claude-3-5-sonnet-20240620-v1:0 | 外部モデル | ベッドロックアンソロピック モデルプロバイダー |
claude-3-sonnet-20240229-v1:0 | 外部モデル | Bedrock Anthropic モデル プロバイダー |
claude-3-opus-20240229-v1:0 | 外部モデル | Bedrock Anthropic モデル プロバイダー |
関数呼び出しを使用する
生成 AI アプリケーションで関数呼び出しを使用するには、関数 parameters
と description
を指定する必要があります。
tool_choice
のデフォルトの動作は ""auto"
" です。 これにより、モデルは、どの関数を呼び出すか、およびそれらを呼び出すかどうかを決定できます。
ユース ケースに応じてデフォルトの動作をカスタマイズできます。 オプションは次のとおりです。
tool_choice: "required"
を設定します。 このシナリオでは、モデルは常に 1 つ以上の関数を呼び出します。 モデルは、呼び出す関数を選択します。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))
このパラメーターは、Anthropic および Amazon Bedrock for Anthropic によって提供されるモデルの コンピューター使用 (ベータ) もサポートしています。 コンピューターの使用など、Anthropic 固有のツールの場合は、次の構文を使用してツールを呼び出します。
"tools": [
{
"type": # Specify tool type here,
"function": {
# Required parameters for the tool type
}
}
]
JSON スキーマ
基盤モデル API は、OpenAI で受け入れられる関数定義を幅広くサポートします。 ただし、関数呼び出し定義に単純な JSON スキーマを使用すると、より高品質の関数呼び出し JSON が生成されます。 より高品質な生成を促進するために、基盤モデル API では JSON スキーマ仕様のサブセットのみがサポートされています。
次の関数呼び出し定義キーはサポートされていません。
pattern
を使用した正規表現。- 次を使用した複雑な入れ子になった構成、またはスキーマの構成と検証:
anyOf
、oneOf
、allOf
、prefixItems
、または$ref
。 - リスト内の1つのタイプが有効な JSON タイプで、もう1つのタイプが
[type, “null”]
である"null"
という特殊なケースを除いたタイプのリスト。
さらに、次の制限が適用されます。
- JSON スキーマで指定されたキーの最大数が
16
。 - 基盤モデル API では、オブジェクトと配列の長さやサイズの制約は適用されません。
- これには、
maxProperties
、minProperties
、maxLength
などのキーワードが含まれます。
- これには、
- 入れ子になった JSON スキーマが多く、結果として品質が低下します。 可能であれば、より良い結果を得るために、JSON スキーマをフラット化してみてください。
トークンの使用法
プロンプト インジェクションやその他の手法を使用して、ツール呼び出しの品質を向上させます。 これを行うと、モデルによって消費される入力トークンと出力トークンの数に影響し、結果として課金に影響が生じます。 使用するツールが多いほど、入力トークンが増加します。
制限事項
以下は、パブリック プレビュー中の関数呼び出しに関する制限事項です。
- 現在の関数呼び出しソリューションは、単一ターン関数呼び出し用に最適化されています。 複数ターンの関数呼び出しはプレビュー中に使用できますが、開発中です。
- 並列関数呼び出しはサポートされていません。
tools
で定義できる関数の最大数は 32 個です。- プロビジョニング済みスループットのサポートでは、関数呼び出しは新しいエンドポイントでのみサポートされます。 以前に作成したエンドポイントに関数呼び出しを追加することはできません。
ノートブックの例
関数呼び出しの詳細な例については、次のノートブックを参照してください