Condividi tramite


Esercitazione: Creare endpoint del modello esterno per eseguire query sui modelli OpenAI

Questo articolo fornisce istruzioni dettagliate per la configurazione e l'esecuzione di query su un endpoint del modello esterno che fornisce modelli OpenAI per completamenti, chat e incorporamenti tramite MLflow Deployments SDK. Altre informazioni sui modelli esterni.

Se si preferisce usare l'interfaccia utente di gestione per eseguire questa attività, vedere Creare un endpoint di gestione di un modello esterno.

Requisiti

  • Databricks Runtime 13.0 ML o versione successiva.
  • MLflow 2.9 o versione successiva.
  • Chiavi API OpenAI.
  • Installare l'interfaccia della riga di comando di Databricks versione 0.205 o successiva.

(Facoltativo) Passaggio 0: Archiviare la chiave API OpenAI usando l'interfaccia della riga di comando dei segreti di Databricks

È possibile specificare le chiavi API come stringhe di testo non crittografato nel passaggio 3 o usando i segreti di Azure Databricks.

Per archiviare la chiave API OpenAI come segreto, è possibile usare l'interfaccia della riga di comando dei segreti di Databricks (versione 0.205 e successive). È anche possibile usare l'API REST per i segreti.

Di seguito viene creato l'ambito del segreto denominato , my_openai_secret_scopee quindi viene creato il segreto openai_api_key in tale ambito.

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

Passaggio 1: Installare MLflow con il supporto di modelli esterni

Usare quanto segue per installare una versione MLflow con il supporto dei modelli esterni:

%pip install mlflow[genai]>=2.9.0

Passaggio 2: Creare e gestire un endpoint del modello esterno

Importante

Gli esempi di codice in questa sezione illustrano l'uso di MLflow Deployments CRUD SDK di anteprima pubblica.

Per creare un endpoint modello esterno per un modello linguistico di grandi dimensioni, usare il create_endpoint() metodo di MLflow Deployments SDK. È anche possibile creare endpoint del modello esterno nell'interfaccia utente di gestione.

Il frammento di codice seguente crea un endpoint di completamento per OpenAI gpt-3.5-turbo-instruct, come specificato nella served_entities sezione della configurazione. Per l'endpoint name , assicurarsi di popolare e openai_api_key con i valori univoci per ogni campo.

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

Il frammento di codice seguente illustra come specificare la chiave API OpenAI come stringa di testo non crittografato per creare lo stesso endpoint di completamenti riportato in precedenza.

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

Se si usa Azure OpenAI, è anche possibile specificare il nome della distribuzione, l'URL dell'endpoint e la openai_config versione dell'API di Azure OpenAI nella sezione della configurazione.

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

Per aggiornare un endpoint, usare update_endpoint(). Il frammento di codice seguente illustra come aggiornare i limiti di frequenza di un endpoint a 20 chiamate al minuto per utente.

client.update_endpoint(
    endpoint="openai-completions-endpoint",
    config={
        "rate_limits": [
            {
                "key": "user",
                "renewal_period": "minute",
                "calls": 20
            }
        ],
    },
)

Passaggio 3: Inviare richieste a un endpoint del modello esterno

Importante

Gli esempi di codice in questa sezione illustrano l'utilizzo del metodo di predict() MLflow Deployments SDK.

È possibile inviare richieste di chat, completamento e incorporamento a un endpoint del modello esterno usando il metodo di predict() MLflow Deployments SDK.

Di seguito viene inviata una richiesta a gpt-3.5-turbo-instruct ospitata da OpenAI.

completions_response = client.predict(
    endpoint="openai-completions-endpoint",
    inputs={
        "prompt": "What is the capital of France?",
        "temperature": 0.1,
        "max_tokens": 10,
        "n": 2
    }
)
completions_response == {
    "id": "cmpl-8QW0hdtUesKmhB3a1Vel6X25j2MDJ",
    "object": "text_completion",
    "created": 1701330267,
    "model": "gpt-3.5-turbo-instruct",
    "choices": [
        {
            "text": "The capital of France is Paris.",
            "index": 0,
            "finish_reason": "stop",
            "logprobs": None
        },
        {
            "text": "Paris is the capital of France",
            "index": 1,
            "finish_reason": "stop",
            "logprobs": None
        },
    ],
    "usage": {
        "prompt_tokens": 7,
        "completion_tokens": 16,
        "total_tokens": 23
    }
}

Passaggio 4: Confrontare i modelli da un provider diverso

La gestione dei modelli supporta molti provider di modelli esterni, tra cui Open AI, Anthropic, Cohere, Amazon Bedrock, Google Cloud Vertex AI e altro ancora. È possibile confrontare IMS tra provider, consentendo di ottimizzare l'accuratezza, la velocità e i costi delle applicazioni usando AI Playground.

Nell'esempio seguente viene creato un endpoint per Anthropic claude-2 e viene confrontata la risposta a una domanda che usa OpenAI gpt-3.5-turbo-instruct. Entrambe le risposte hanno lo stesso formato standard, che li rende facili da confrontare.

Creare un endpoint per 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}}"
                    },
                },
            }
        ],
    },
)

Confrontare le risposte da ogni endpoint


openai_response = client.predict(
    endpoint="openai-completions-endpoint",
    inputs={
        "prompt": "How is Pi calculated? Be very concise."
    }
)
anthropic_response = client.predict(
    endpoint="anthropic-completions-endpoint",
    inputs={
        "prompt": "How is Pi calculated? Be very concise."
    }
)
openai_response["choices"] == [
    {
        "text": "Pi is calculated by dividing the circumference of a circle by its diameter."
                " This constant ratio of 3.14159... is then used to represent the relationship"
                " between a circle's circumference and its diameter, regardless of the size of the"
                " circle.",
        "index": 0,
        "finish_reason": "stop",
        "logprobs": None
    }
]
anthropic_response["choices"] == [
    {
        "text": "Pi is calculated by approximating the ratio of a circle's circumference to"
                " its diameter. Common approximation methods include infinite series, infinite"
                " products, and computing the perimeters of polygons with more and more sides"
                " inscribed in or around a circle.",
        "index": 0,
        "finish_reason": "stop",
        "logprobs": None
    }
]

Risorse aggiuntive

Modelli esterni in Mosaic AI Model Serving.