Tutorial: Creación de puntos de conexión de modelo externos para consultar modelos de OpenAI

En esta página se proporcionan instrucciones paso a paso para configurar y consultar un punto de conexión de modelo externo que sirve a los modelos openAI para finalizaciones, chats e incrustaciones. Puede crear el punto de conexión con el SDK de implementaciones de MLflow y consultarlo con el cliente de OpenAI. Para obtener más información, consulte modelos externos.

Después de crear un punto de conexión, Databricks recomienda configurar Unity AI Gateway en él para agregar características de gobernanza como seguimiento de uso, registro de carga, límites de protección y límites de velocidad. Todos los modelos externos servidos a través de Model Serving se consultan mediante la API compatible con OpenAI, por lo que puede usar un solo cliente entre proveedores. Consulte Unity AI Gateway.

Si prefiere usar la interfaz de usuario de servicio para realizar esta tarea, consulte Creación de un modelo externo que atiende el punto de conexión.

Requisitos

  • Databricks Runtime 13.0 ML o superior.
  • MLflow 2.9 o superior.
  • Claves de API de OpenAI.
  • Instale la versión 0.205 o una posterior de la CLI de Databricks.

Paso 0 (opcional): Almacenamiento de la clave de API de OpenAI mediante la CLI de secretos de Databricks

Puede proporcionar las claves de API como cadenas de texto no cifrado en el paso 3 o mediante secretos de Azure Databricks.

Para almacenar la clave de API de OpenAI como secreto; puede usar la CLI de secretos de Databricks (versión 0.205 y posteriores). También puede usar la API de REST para secretos.

A continuación, se crea el ámbito de secreto denominado my_openai_secret_scope y, a continuación, se crea el secreto openai_api_key en ese ámbito.

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

Paso 1: Instalación de MLflow con compatibilidad con modelos externos

Use lo siguiente para instalar una versión de MLflow con compatibilidad con modelos externos:

%pip install mlflow[genai]>=2.9.0

Paso 2: Creación y administración de un punto de conexión de modelo externo

Importante

Los ejemplos de código de esta sección demuestran el uso del SDK CRUD de implementaciones de MLflow de la versión preliminar pública.

Para crear un punto de conexión de modelo externo para un modelo de lenguaje grande (LLM), use el método create_endpoint() desde el SDK de implementaciones de MLflow. También puede crear puntos de conexión de modelo externos en la interfaz de usuario del servicio.

El siguiente fragmento de código crea un endpoint de completions para OpenAI gpt-3.5-turbo-instruct, tal y como se especifica en la sección de configuración served_entities. Para el punto de conexión, asegúrese de rellenar name y openai_api_key con los valores únicos de cada 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}}"
                }
            }
        }]
    }
)

El siguiente fragmento de código muestra cómo puede proporcionar la clave de API de OpenAI como una cadena de texto no cifrado para una manera alternativa de crear el mismo punto de conexión de finalizaciones que antes.

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

Si usa Azure OpenAI, también puede especificar el nombre de implementación de Azure OpenAI, la dirección URL del punto de conexión y la versión de la API en la sección openai_config de la configuración.

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

Para configurar límites de frecuencia, seguimiento de uso, registro de carga o barreras de protección en el punto de conexión, use Unity AI Gateway. La configuración de límites de velocidad a través de Unity AI Gateway admite límites basados en consultas (QPM) y basados en tokens (TPM) y le permite establecer límites por usuario, por grupo y en todo el punto de conexión.

Consulte Configuración de Unity AI Gateway en los puntos de conexión de servicio de modelos para ver un ejemplo mediante programación que actualiza un punto de conexión para agregar límites de velocidad y otras características de Unity AI Gateway.

Note

El patrón documentado anteriormente con un campo rate_limits de nivel superior client.update_endpoint() ha quedado obsoleto. En su lugar, use la configuración de Unity AI Gateway en el punto de conexión.

Paso 3: Envío de solicitudes a un punto de conexión de modelo externo

Databricks recomienda consultar puntos de conexión de modelo externos mediante el cliente openAI. Model Serving expone una API unificada compatible con OpenAI entre proveedores, por lo que el mismo código de cliente funciona si el modelo subyacente procede de OpenAI, Anthropic, Cohere, Amazon Bedrock, Google Cloud Vertex AI o un proveedor personalizado.

Instale el cliente de OpenAI en su entorno de computación:

%pip install openai

A continuación se envía una solicitud de finalización de chat a un punto de conexión que sirve un modelo de chat de OpenAI. Reemplace el valor base_url por la dirección URL del área de trabajo de Azure Databricks y proporcione an Azure Databricks token de acceso personal para api_key. Configure el parámetro model con el nombre del punto de conexión de inferencia del modelo.

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)

Para enviar una solicitud de finalización a un punto de conexión configurado para la llm/v1/completions tarea, use 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)

Para enviar una solicitud de inserción a un punto de conexión configurado para la llm/v1/embeddings tarea, use client.embeddings.create():

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

Si ejecuta el cliente openAI desde un cuaderno de Azure Databricks, puede usar el asistente de databricks-openai, que configura automáticamente la autenticación y la dirección URL base del área de trabajo. Consulte Uso de modelos de base para obtener más información.

Paso 4: Comparación de modelos de un proveedor diferente

El servicio de modelos admite muchos proveedores de modelos externos, como Open AI, Anthropic, Cohere, Amazon Bedrock, Google Cloud Vertex AI, etc. Puede comparar las LLM entre proveedores, lo que le ayuda a optimizar la precisión, la velocidad y el costo de las aplicaciones mediante AI Playground.

En el ejemplo siguiente se crea un punto de conexión para Anthropic claude-2 y se compara su respuesta a una pregunta que usa OpenAI gpt-3.5-turbo-instruct. Ambas respuestas tienen el mismo formato estándar, lo que facilita la comparación.

Creación de un punto de conexión para 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}}"
                    },
                },
            }
        ],
    },
)

Comparación de las respuestas de cada punto de conexión

Dado que todos los puntos de conexión del modelo externo exponen una API compatible con OpenAI, puede consultar ambos puntos de conexión con el mismo cliente de OpenAI cambiando el model parámetro al nombre de punto de conexión correspondiente.

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)

Recursos adicionales