Databricks での関数呼び出し
プレビュー
この機能は パブリック プレビュー 段階であり、us-east1
と us-central1
の両方で、基盤モデル APIs トークン単位の従量課金エンドポイントとプロビジョニング スループット エンドポイントの両方でサポートされています。
この記事では、関数呼び出しと、それを生成AI アプリケーションのワークフローの一部として使用する方法について説明します。 Databricks Function Calling は OpenAI と互換性があり、モデルサービング中に 基盤モデル APIs の一部としてのみ使用でき、 外部モデルを提供するエンドポイントを提供します。
関数呼び出しとは?
関数呼び出しは、LLM の出力を制御する方法を提供し、構造化された応答をより確実に生成します。 関数呼び出しを使用する場合は、JSON スキーマを使用して関数の引数を記述することにより、API 呼び出しで関数を記述します。 LLM 自体はこれらの関数を呼び出すのではなく、ユーザーがコード内で関数を呼び出すために使用できる JSON オブジェクトを作成します。
Databricksでの関数呼び出しの場合、ステップの基本的なシーケンスは次のとおりです。
送信されたクエリと
tools
引数で定義された一連の関数を使用してモデルを呼び出します。モデルは、定義された関数を呼び出すかどうかを決定します。 関数が呼び出されると、そのコンテンツはカスタム スキーマに準拠した文字列の JSON オブジェクトになります。
コード内で文字列を JSON に解析し、指定された引数が存在する場合はその引数を使用して関数を呼び出します。
構造化された応答を新しいメッセージとして追加して、モデルを再度呼び出します。 応答の構造は、以前に
tools
で指定した関数によって定義されます。 ここから、モデルは結果を集計し、その概要をユーザーに送信します。
関数呼び出しを使用する場合
以下は、関数呼び出しのユースケースの例です。
他のAPIsを呼び出して質問に答えることができるアシスタントを作成します。 たとえば、
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 では、構造化された出力を使用することをお勧めします。
サポートされるモデル
次の表に、サポートされているモデルと、各モデルを使用可能にするモデルサービング機能を示します。
基盤モデル APIsによって利用可能になったモデルについては、地域の可用性に関する 基盤モデルの APIs 制限 を参照してください。
外部モデルによって利用可能になるモデルについては、利用可能な リージョン のリージョンを参照してください。
重要
Meta Llama 3.3 は、 LLAMA 3.3 コミュニティ ライセンス、Copyright © Meta Platforms, Inc. の下でライセンスされています。 全著作権所有。 お客様は、このライセンスおよび Llama 3.3 Acceptable Use ポリシーの条件に対するコンプライアンスを確保する責任があります。
Meta Llama 3.1 は、LLAMA 3.1 コミュニティ ライセンス、著作権 © Meta Platforms, Inc. に基づいてライセンスされています。 全著作権所有。 顧客は、該当するモデル ライセンスによるコンプライアンスを確保する責任があります。
モデル |
モデルサービング機能を使用して利用可能 |
注 |
---|---|---|
基盤モデル API |
トークン単位の従量課金とプロビジョニング スループットのワークロードでサポートされます。 |
|
基盤モデル API |
プロビジョニングされたスループットワークロードでのみサポートされます。 |
|
GPT-4O(英語) |
外部モデル |
|
GPT-4O-2024-08-06 |
外部モデル |
|
GPT-4O-2024-05-13 |
外部モデル |
|
GPT-4O-ミニ |
外部モデル |
関数呼び出しを使用する
生成AIアプリケーションで関数呼び出しを使用するには、関数 parameters
と description
を指定する必要があります。
tool_choice
のデフォルトの動作は"auto"
です。 これにより、モデルはどの関数を呼び出すか、およびそれらを呼び出すかどうかを決定できます。
使用ケースに応じてデフォルトの動作をカスタマイズできます。 オプションは次のとおりです。
tool_choice: "required"
を設定します。このシナリオでは、モデルは常に 1 つ以上の関数を呼び出します。 モデルは、呼び出す関数を選択します。tool_choice: {"type": "function", "function": {"name": "my_function"}}
を設定します。このシナリオでは、モデルは特定の関数のみを呼び出します。tool_choice: "none"
を設定して、関数呼び出しを無効にし、モデルがユーザー向けのメッセージのみを生成するようにします。
以下は、OpenAI SDK とその tools
パラメーターを使用した 1 ターンの例です。 構文の詳細については、 チャットタスク を参照してください。
重要
パブリック プレビュー中、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))
このパラメーターは、 が提供するモデルの コンピュータ Use (beta) AnthropicとAmazon Bedrock の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型であり、
[type, “null”]
1つが"null"
さらに、次の制限が適用されます。
JSON スキーマで指定されるキーの最大数は
16
です。基盤モデルAPIオブジェクトと配列の長さやサイズの制約を強制しません。
これには、
maxProperties
、minProperties
、maxLength
などのキーワードが含まれます。
ネストされた JSON スキーマが多いと、生成の品質が低下します。 可能であれば、より良い結果を得るために JSON スキーマをフラット化してみてください。
トークンの使用
プロンプトインジェクションやその他の手法を使用して、ツール呼び出しの品質を向上させます。 これを行うと、モデルによって消費される入力トークンと出力トークンの数に影響し、結果として課金に影響が生じます。 使用するツールが増えるほど、入力トークンが増加します。