Share via


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.

Requisitos

  • Databricks Runtime 13.0 ML o superior.
  • MLflow 2.9 o superior.
  • Claves de API de OpenAI.
  • Versión 0.205 o superior de la CLI de Databricks.

Paso 1: Almacenamiento de la clave de API de OpenAI mediante la CLI de secretos de Databricks

Puede almacenar la clave de API de OpenAI mediante 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 2: 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 3: 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.

Puede crear un punto de conexión de modelo externo para cada modelo de lenguaje de gran tamaño (LLM) que quiera usar con el método create_endpoint() del SDK de implementaciones de MLflow. 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.

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

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 4: 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 5: 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 de Databricks Model Serving.