このページでは、完了、チャット、埋め込みの OpenAI モデルを提供する外部モデル エンドポイントを構成してクエリを実行する手順について説明します。 MLflow Deployments SDK を使用してエンドポイントを作成し、OpenAI クライアントでクエリを実行します。 詳細については、 外部モデルを参照してください。
エンドポイントを作成した後、Databricks では、使用状況の追跡、ペイロード ログ、ガードレール、レート制限などのガバナンス機能を追加するように、そのエンドポイントに Unity AI Gateway を構成することをお勧めします。 モデル サービスを通じて提供されるすべての外部モデルは、OpenAI と互換性のある API を使用して照会されるため、プロバイダー間で 1 つのクライアントを使用できます。 Unity AI ゲートウェイを参照してください。
Serving UI を使用してこのタスクを実行したい場合は、「外部モデル提供エンドポイントの作成」を参照してください。
要件
- Databricks Runtime 13.0 ML 以降。
- MLflow 2.9 以上。
- OpenAI API キー。
- Databricks CLI バージョン 0.205 以降をインストールします。
(省略可能) 手順 0: Databricks シークレット CLI を使って OpenAI API キーを格納する
API キーは、手順 3 でプレーンテキスト文字列として、または Azure Databricks シークレットを使用して指定できます。
OpenAI API キーをシークレットとして格納するために、Databricks シークレット CLI (バージョン 0.205 以降) を使用できます。 また、シークレット用の REST API を使用することもできます。
次の例では、my_openai_secret_scope というシークレット スコープを作成し、そのスコープ内にシークレット openai_api_key を作成します。
databricks secrets create-scope my_openai_secret_scope
databricks secrets put-secret my_openai_secret_scope openai_api_key
手順 1: 外部モデルがサポートされている MLflow をインストールする
次のコマンドを使用して、外部モデルがサポートされている MLflow をインストールします。
%pip install mlflow[genai]>=2.9.0
手順 2: 外部モデル エンドポイントを作成して管理する
重要
このセクションのコード例では、パブリック プレビューの MLflow Deployments CRUD SDK の使用方法を示しています。
大規模言語モデル (LLM) の外部モデル エンドポイントを作成するには、MLflow Deployments SDK の create_endpoint() メソッドを使用します。 また、Serving UI 内で外部モデル エンドポイントを作成することもできます。
次に示すコードスニペットでは、構成の中の gpt-3.5-turbo-instruct セクションで指定されているように、OpenAI served_entities の補完エンドポイントを作成します。 エンドポイントに関しては、name と openai_api_key に各フィールドで一意な値を設定するようにしてください。
import mlflow.deployments
client = mlflow.deployments.get_deploy_client("databricks")
client.create_endpoint(
name="openai-completions-endpoint",
config={
"served_entities": [{
"name": "openai-completions",
"external_model": {
"name": "gpt-3.5-turbo-instruct",
"provider": "openai",
"task": "llm/v1/completions",
"openai_config": {
"openai_api_key": "{{secrets/my_openai_secret_scope/openai_api_key}}"
}
}
}]
}
)
次のコード スニペットは、OpenAI API キーをプレーンテキスト文字列として指定し、上記と同じ入力候補エンドポイントを作成する別の方法を示しています。
import mlflow.deployments
client = mlflow.deployments.get_deploy_client("databricks")
client.create_endpoint(
name="openai-completions-endpoint",
config={
"served_entities": [{
"name": "openai-completions",
"external_model": {
"name": "gpt-3.5-turbo-instruct",
"provider": "openai",
"task": "llm/v1/completions",
"openai_config": {
"openai_api_key_plaintext": "sk-yourApiKey"
}
}
}]
}
)
Azure OpenAI を使用している場合は、構成の openai_config セクションで Azure OpenAI デプロイ名、エンドポイント URL、API バージョンを指定することもできます。
client.create_endpoint(
name="openai-completions-endpoint",
config={
"served_entities": [
{
"name": "openai-completions",
"external_model": {
"name": "gpt-3.5-turbo-instruct",
"provider": "openai",
"task": "llm/v1/completions",
"openai_config": {
"openai_api_type": "azure",
"openai_api_key": "{{secrets/my_openai_secret_scope/openai_api_key}}",
"openai_api_base": "https://my-azure-openai-endpoint.openai.azure.com",
"openai_deployment_name": "my-gpt-35-turbo-deployment",
"openai_api_version": "2023-05-15"
},
},
}
],
},
)
エンドポイントでレート制限、使用状況追跡、ペイロード ログ、またはガードレールを構成するには、Unity AI Gateway を使用します。 Unity AI Gateway を使用してレート制限を構成すると、クエリベース (QPM) とトークンベース (TPM) の両方の制限がサポートされ、ユーザーごと、グループごと、エンドポイント全体の制限を設定できます。
レート制限やその他の Unity AI Gateway 機能を追加するようにエンドポイントを更新するプログラムの例については、「 モデル サービス エンドポイントで Unity AI Gateway を構成する」を参照してください。
Note
最上位レベルのclient.update_endpoint() フィールドを含む、前述のrate_limits パターンは非推奨となりました。 代わりに、エンドポイントで Unity AI Gateway の構成を使用してください。
手順 3: 外部モデル エンドポイントに要求を送信する
Databricks では、OpenAI クライアントを使用して外部モデル エンドポイントのクエリを実行することをお勧めします。 Model Serving では、プロバイダー間で統一された OpenAI 互換 API が公開されるため、基になるモデルが OpenAI、Anthropic、Cohere、Amazon Bedrock、Google Cloud Vertex AI、またはカスタム プロバイダーのいずれからのものであっても、同じクライアント コードが機能します。
コンピューティングに OpenAI クライアントをインストールします。
%pip install openai
次の例では、OpenAI チャット モデルを提供するエンドポイントにチャット完了要求を送信します。
base_url の値を Azure Databricks ワークスペースの URL に置き換え、api_key には Azure Databricks の個人用アクセストークン を指定します。
model パラメーターを、モデル サービス エンドポイントの名前に設定します。
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ.get("DATABRICKS_TOKEN"),
base_url="https://<workspace-name>.cloud.databricks.com/serving-endpoints"
)
response = client.chat.completions.create(
model="openai-chat-endpoint",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "What is the capital of France?"}
],
max_tokens=128,
temperature=0.1,
)
print(response.choices[0].message.content)
llm/v1/completions タスク用に構成されたエンドポイントに完了要求を送信するには、次のclient.completions.create()を使用します。
response = client.completions.create(
model="openai-completions-endpoint",
prompt="What is the capital of France?",
max_tokens=10,
temperature=0.1,
n=2,
)
print(response)
llm/v1/embeddings タスク用に構成されたエンドポイントに埋め込み要求を送信するには、次のclient.embeddings.create()を使用します。
response = client.embeddings.create(
model="openai-embeddings-endpoint",
input="Databricks is a unified analytics platform.",
)
print(response.data[0].embedding)
Azure Databricks ノートブック内から OpenAI クライアントを実行する場合は、認証とワークスペースのベース URL を自動的に構成する databricks-openai ヘルパーを使用できます。 詳細については、「 基礎モデルを使用 する」を参照してください。
手順 4: 別のプロバイダーのモデルを比較する
モデル サービングは、Open AI、Anthropic、Cohere、Amazon Bedrock、Google Cloud Vertex AI など、多くの外部モデル プロバイダーをサポートします。 プロバイダー間で LLM を比較すると、AI プレイグラウンドを使用して、アプリケーションの正確性、速度、コストを最適化するのに役立ちます。
次の例では、Anthropic claude-2 のエンドポイントを作成し、OpenAI gpt-3.5-turbo-instruct を使用した質問に対する回答を比較します。 どちらの回答も同じ標準形式であるため、簡単に比較できます。
Anthropic claude-2 のエンドポイントを作成する
import mlflow.deployments
client = mlflow.deployments.get_deploy_client("databricks")
client.create_endpoint(
name="anthropic-completions-endpoint",
config={
"served_entities": [
{
"name": "claude-completions",
"external_model": {
"name": "claude-2",
"provider": "anthropic",
"task": "llm/v1/completions",
"anthropic_config": {
"anthropic_api_key": "{{secrets/my_anthropic_secret_scope/anthropic_api_key}}"
},
},
}
],
},
)
各エンドポイントからの回答を比較する
すべての外部モデル エンドポイントは OpenAI 互換 API を公開しているため、 model パラメーターを対応するエンドポイント名に切り替えることで、同じ OpenAI クライアントを使用して両方のエンドポイントにクエリを実行できます。
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ.get("DATABRICKS_TOKEN"),
base_url="https://<workspace-name>.cloud.databricks.com/serving-endpoints"
)
prompt = "How is Pi calculated? Be very concise."
openai_response = client.completions.create(
model="openai-completions-endpoint",
prompt=prompt,
)
anthropic_response = client.completions.create(
model="anthropic-completions-endpoint",
prompt=prompt,
)
print("OpenAI:", openai_response.choices[0].text)
print("Anthropic:", anthropic_response.choices[0].text)