Compartir vía


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

En este artículo se proporcionan instrucciones paso a paso para configurar y consultar un punto de conexión de modelo externo que sirve modelos de OpenAI para finalizaciones, chats e incrustaciones mediante el SDK de implementaciones de MLflow. Obtenga más información sobre modelos externos.

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 de servicio.

El siguiente fragmento de código crea un punto de conexión de compleciones para OpenAI gpt-3.5-turbo-instruct, tal y como se especifica en la sección served_entities de la configuración. 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 actualizar un punto de conexión, use update_endpoint(). En el fragmento de código siguiente se muestra cómo actualizar los límites de velocidad de un punto de conexión a 20 llamadas por minuto por usuario.

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

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

Importante

Los ejemplos de código de esta sección muestran el uso del método predict() del SDK de implementaciones de MLflow.

Puede enviar solicitudes de chat, finalizaciones e inserciones a un punto de conexión de modelo externo mediante el método predict() del SDK de implementaciones de MLflow.

A continuación se envía una solicitud a gpt-3.5-turbo-instruct, hospedada por 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
    }
}

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


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

Recursos adicionales

Modelos externos en servicio de modelos de Mosaic AI.