Руководство: Создание конечных точек внешней модели для запроса моделей OpenAI

На этой странице приведены пошаговые инструкции по настройке и выполнению запросов к внешней конечной точке модели, через которую предоставляется доступ к моделям OpenAI для генерации завершений, чата и эмбеддингов. Вы создаете конечную точку с помощью пакета SDK для развертываний MLflow и запрашиваете ее с помощью клиента OpenAI. Дополнительные сведения см. во внешних моделях.

После создания эндпоинта Databricks рекомендует настроить для него Unity AI Gateway, чтобы добавить функции управления и контроля, такие как отслеживание использования, журналирование полезной нагрузки, защитные ограничения и ограничение частоты запросов. Все внешние модели, обслуживаемые с помощью службы моделей, запрашиваются с помощью API, совместимого с OpenAI, поэтому вы можете использовать один клиент между поставщиками. См. сведения об управлении ИИ с помощью шлюза ИИ Unity.

Tip

Попросите Genie Code (режим агента) выполнить это для вас.

Create a new notebook that uses the MLflow Deployments SDK to create an external model endpoint named openai-completions-endpoint that serves OpenAI's gpt-3.5-turbo-instruct model for completions, reading my OpenAI API key from a Databricks secret scope. Then send a test completion request to the endpoint and display the response.

Если вы предпочитаете использовать пользовательский интерфейс обслуживания для выполнения этой задачи, см. статью "Создание внешней конечной точки обслуживания модели".

Requirements

  • Databricks Runtime 13.0 ML или более поздней версии.
  • MLflow 2.9 или более поздней версии.
  • Ключи API OpenAI.
  • Установите Databricks CLI версии 0.205 или более поздней.

(Необязательно) Шаг 0: Сохраните ключ API OpenAI, используя интерфейс командной строки Databricks Secrets CLI

Ключи API можно предоставить в виде строк обычного текста на шаге 3 или с помощью секретов Azure Databricks.

Чтобы сохранить ключ API OpenAI в качестве секрета, можно использовать интерфейс командной строки секретов Databricks (версия 0.205 и выше). Для секретов также можно использовать REST API.

Сначала создается область секрета с именем my_openai_secret_scope, а затем в этой области создается секрет openai_api_key.

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

Шаг 1. Установка MLflow с поддержкой внешних моделей

Используйте следующую команду, чтобы установить версию MLflow с поддержкой внешних моделей:

%pip install mlflow[genai]>=2.9.0

Шаг 2. Создание конечной точки внешней модели и управление ими

Important

Примеры кода в этом разделе демонстрируют использование пакета SDK CRUD для общедоступной предварительной версии MLflow.

Чтобы создать внешнюю конечную точку модели для крупной языковой модели (LLM), используйте create_endpoint() метод из пакета SDK для развертываний MLflow. Можно также создать внешние конечные точки модели в пользовательском интерфейсе обслуживания.

Следующий фрагмент кода создает конечную точку завершения для OpenAI gpt-3.5-turbo-instruct, как указано в served_entities разделе конфигурации. Для конечной точки обязательно заполните name, openai_api_key вашими уникальными значениями для каждого поля.

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

В следующем фрагменте кода показано, как предоставить ключ API OpenAI в виде строки открытого текста, чтобы создать ту же конечную точку завершения, что и выше.

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

При использовании Azure OpenAI можно также указать имя развертывания Azure OpenAI, URL-адрес конечной точки и версию API в openai_config разделе конфигурации.

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

Для настройки ограничений скорости, отслеживания использования, ведения журнала полезных данных или защиты в конечной точке используйте шлюз ИИ Unity. Настройка ограничений скорости с помощью шлюза ИИ Unity поддерживает ограничения на основе запросов (QPM) и на основе маркеров (TPM) и позволяет задавать ограничения на пользователя, на группу и конечную точку.

Сведения о настройке шлюза ИИ на конечных точках обслуживания моделей см. в программном примере, который обновляет конечную точку для добавления ограничений скорости и других функций шлюза ИИ Unity.

Note

Ранее документированные client.update_endpoint() шаблоны с полем верхнего уровня rate_limits устарели. Вместо этого используйте конфигурацию шлюза ИИ Unity в конечной точке.

Шаг 3. Отправка запросов во внешнюю конечную точку модели

Databricks рекомендует запрашивать конечные точки внешней модели с помощью клиента OpenAI. Служба моделей предоставляет единый, совместимый с OpenAI API для разных поставщиков, поэтому тот же клиентский код работает независимо от того, является ли базовая модель из OpenAI, Anthropic, Cohere, Amazon Bedrock, Google Cloud Vertex AI или настраиваемый поставщик.

Установите клиент OpenAI на вычислительные ресурсы:

%pip install openai

Далее отправляется запрос на завершение чата в конечную точку, которая служит моделью чата OpenAI. Замените значение base_url URL-адресом рабочей области Azure Databricks и укажите an Azure Databricks персональный маркер доступа для api_key. model Задайте для параметра имя конечной точки обслуживания модели.

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)

Чтобы отправить запрос завершения в конечную точку, настроенную для llm/v1/completions задачи, используйте 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)

Чтобы отправить запрос на получение эмбеддингов в конечную точку, настроенную для задачи llm/v1/embeddings, используйте client.embeddings.create():

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

Если вы запускаете клиент OpenAI внутри блокнота Azure Databricks, можно использовать вспомогательный объект databricks-openai, который автоматически настраивает аутентификацию и базовый URL-адрес рабочей области. Дополнительные сведения см. в разделе "Использование базовых моделей ".

Шаг 4. Сравнение моделей из другого поставщика

Служба моделей поддерживает множество внешних поставщиков моделей, включая Open AI, Anthropic, Cohere, Amazon Bedrock, Google Cloud Vertex AI и многое другое. Вы можете сравнивать многомодальные языковые модели (LLM) от разных поставщиков, что позволяет оптимизировать точность, скорость и стоимость ваших приложений с помощью AI Playground.

В следующем примере создается конечная точка для Anthropic claude-2, и ее ответ сравнивается с ответом на вопрос, который использует OpenAI gpt-3.5-turbo-instruct. Оба ответа имеют одинаковый стандартный формат, что упрощает их сравнение.

Создайте конечную точку для 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}}"
                    },
                },
            }
        ],
    },
)

Сравнение ответов из каждой конечной точки

Так как все конечные точки внешней модели предоставляют API, совместимый с OpenAI, можно запрашивать обе конечные точки с одинаковым клиентом OpenAI, переключив model параметр на соответствующее имя конечной точки.

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)

Дополнительные ресурсы