Tutorial: Erstellen externer Modellendpunkte zum Abfragen von OpenAI-Modellen

Diese Seite enthält schrittweise Anleitungen zum Konfigurieren und Abfragen eines externen Modellendpunkts, der OpenAI-Modelle für Abschlusse, Chats und Einbettungen bereitstellt. Sie erstellen den Endpunkt mit dem MLflow Deployments SDK und fragen ihn mit dem OpenAI-Client ab. Weitere Informationen finden Sie unter externen Modellen.

Nachdem Sie einen Endpunkt erstellt haben, empfiehlt Databricks, Unity AI Gateway dafür zu konfigurieren, um Governance-Funktionen wie Nutzungsverfolgung, Nutzlastprotokollierung, Leitplanken und Ratenbegrenzungen hinzuzufügen. Alle externen Modelle, die über die Modellbereitstellung bereitgestellt werden, werden mit der OpenAI-kompatiblen API abgefragt, sodass Sie einen einzelnen Client über Anbieter hinweg verwenden können. Siehe Unity AI Gateway.

Wenn Sie es vorziehen, diese Aufgabe mithilfe der Serving-Benutzeroberfläche zu erledigen, lesen Sie Erstellen eines Bereitstellungsendpunkts für ein externes Modell.

Anforderungen

  • Mindestens Databricks Runtime 13.0 ML oder höher.
  • MLflow 2.9 oder höher
  • OpenAI-API-Schlüssel.
  • Installieren Sie die Databricks-CLI (Version 0.205 oder höher).

(Optional) Schritt 0: Speichern des OpenAI-API-Schlüssels mithilfe der CLI für Databricks-Geheimnisse

Sie können Ihre API-Schlüssel entweder als Klartext-Strings in Schritt 3 oder unter Verwendung von Azure Databricks Secrets bereitstellen.

Um den OpenAI-API-Schlüssel mithilfe der CLI als Geheimnis zu speichern, können Sie Databricks-Geheimnisse (Version 0.205 oder höher) verwenden. Sie können auch die REST-API für Geheimnisse verwenden.

Im Folgenden wird der geheime Bereich mit dem Namen „my_openai_secret_scope“ erstellt, und anschließend wird der geheime Schlüssel „openai_api_key“ in diesem Bereich erstellt.

databricks secrets create-scope my_openai_secret_scope
databricks secrets put-secret my_openai_secret_scope openai_api_key

Schritt 1: Installieren von MLflow mit Unterstützung externer Modelle

Verwenden Sie Folgendes, um eine MLflow-Version mit Unterstützung für externe Modelle zu installieren:

%pip install mlflow[genai]>=2.9.0

Schritt 2: Erstellen und Verwalten eines externen Modellendpunkts

Wichtig

Die Codebeispiele in diesem Abschnitt veranschaulichen die Verwendung der Public Preview des MLflow Deployments CRUD SDK.

Verwenden Sie zum Erstellen eines externen Modellendpunkts für ein großes Sprachmodell (LLM) die create_endpoint()-Methode aus dem MLflow Deployments SDK. Sie können auch externe Modellendpunkte auf der Serving-Benutzeroberfläche erstellen.

Der folgende Codeschnipsel erstellt einen Vervollständigungsendpunkt für OpenAI gpt-3.5-turbo-instruct, wie im Abschnitt „served_entities“ der Konfiguration angegeben. Stellen Sie sicher, dass Sie für Ihren Endpunkt und mit Ihren eindeutigen Werten für jedes Feld ausfüllen.

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}}"
                }
            }
        }]
    }
)

Der folgende Codeschnipsel zeigt, wie Sie Ihren OpenAI-API-Schlüssel als Klartext-Zeichenfolge bereitstellen können, um denselben Endpunkt für die Vervollständigung wie oben zu erstellen.

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"
                }
            }
        }]
    }
)

Wenn Sie Azure OpenAI verwenden, können Sie auch den Azure OpenAI-Bereitstellungsnamen, die Endpunkt-URL und die API-Version im Abschnitt openai_config der Konfiguration angeben.

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"
                },
            },
          }
        ],
    },
)

Verwenden Sie Unity AI Gateway, um auf dem Endpunkt Ratenbegrenzungen, Nutzungsverfolgung, die Protokollierung von Payloads oder Leitplanken zu konfigurieren. Das Konfigurieren von Geschwindigkeitsbeschränkungen über Unity AI Gateway unterstützt sowohl abfragebasierte (QPM)- als auch tokenbasierte (TPM)-Grenzwerte und ermöglicht es Ihnen, benutzerspezifische, gruppen- und endpunktweite Grenzwerte festzulegen.

Unter Konfigurieren von Unity AI Gateway für Modellbereitstellungsendpunkte finden Sie ein programmgesteuertes Beispiel, das einen Endpunkt aktualisiert, um Ratenbegrenzungen und andere Funktionen von Unity AI Gateway hinzuzufügen.

Note

Das zuvor dokumentierte client.update_endpoint() Muster mit einem Feld auf oberster Ebene rate_limits ist veraltet. Verwenden Sie stattdessen die Unity AI Gateway-Konfiguration auf dem Endpunkt.

Schritt 3: Senden von Anforderungen an einen externen Modellendpunkt

Databricks empfiehlt das Abfragen externer Modellendpunkte mithilfe des OpenAI-Clients. Model Serving macht eine einheitliche, openAI-kompatible API für Anbieter verfügbar, sodass derselbe Clientcode funktioniert, ob das zugrunde liegende Modell aus OpenAI, Anthropic, Cohere, Amazon Bedrock, Google Cloud Vertex AI oder einem benutzerdefinierten Anbieter stammt.

Installieren Sie den OpenAI-Client auf Ihrer Compute:

%pip install openai

Im Folgenden wird eine Chatabschlussanforderung an einen Endpunkt gesendet, der einem OpenAI-Chatmodell dient. Ersetzen Sie den Wert base_url durch Ihre URL des Azure Databricks Arbeitsbereichs, und stellen Sie an Azure Databricks persönlichen Zugriffstoken für api_key bereit. Legen Sie den model Parameter auf den Namen ihres Modellbereitstellungsendpunkts fest.

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)

Um eine Anfrage für Vervollständigungen an einen Endpunkt zu senden, der für die llm/v1/completions-Aufgabe konfiguriert ist, verwenden Sie 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)

Um eine Embedding-Anforderung an einen für die llm/v1/embeddings-Aufgabe konfigurierten Endpunkt zu senden, verwenden Sie client.embeddings.create():

response = client.embeddings.create(
    model="openai-embeddings-endpoint",
    input="Databricks is a unified analytics platform.",
)
print(response.data[0].embedding)

Wenn Sie den OpenAI-Client in einem Azure Databricks-Notebook ausführen, können Sie den Helfer databricks-openai verwenden, der die Authentifizierung und die Basis-URL des Arbeitsbereichs automatisch konfiguriert. Weitere Informationen finden Sie unter Verwenden von Foundation-Modellen .

Schritt 4: Vergleichen von Modellen von einem anderen Anbieter

Die Modellbereitstellung unterstützt viele externe Modellanbieter, darunter OpenAI, Anthropic, Cohere, Amazon Bedrock, Google Cloud Vertex AI u. v. m. Sie können LLMs anbieterübergreifend vergleichen und dabei helfen, die Genauigkeit, Geschwindigkeit und Kosten Ihrer Anwendungen mithilfe des KI-Playgroundzu optimieren.

Das folgende Beispiel erstellt einen Endpunkt für Anthropic claude-2 und vergleicht die Antwort auf eine Frage, die OpenAI gpt-3.5-turbo-instruct verwendet. Beide Antworten haben das gleiche Standardformat, wodurch sie einfach verglichen werden können.

Erstellen eines Endpoints für 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}}"
                    },
                },
            }
        ],
    },
)

Vergleichen der Antworten von den einzelnen Endpunkten

Da alle externen Modellendpunkte eine openAI-kompatible API verfügbar machen, können Sie beide Endpunkte mit demselben OpenAI-Client abfragen, indem Sie den model Parameter in den entsprechenden Endpunktnamen wechseln.

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)

Zusätzliche Ressourcen