Переключение между конечными точками OpenAI и Azure OpenAI с помощью Python

Хотя служба OpenAI и Azure OpenAI используют общую клиентская библиотека Python, для переключения между конечными точками необходимо внести небольшие изменения. В этой статье описаны распространенные изменения и различия, которые будут возникать при работе с OpenAI и Azure OpenAI.

В этой статье показаны только примеры с новой библиотекой API OpenAI Python 1.x. Дополнительные сведения о миграции 0.28.1 1.x см. в нашем руководстве по миграции.

Необходимые компоненты

нет

Аутентификация

Мы рекомендуем использовать идентификатор Microsoft Entra или Azure Key Vault. Переменные среды можно использовать для тестирования за пределами рабочей среды. Если вы еще этого не сделали, в кратких руководствах по Python вы узнаете об этой конфигурации.

Ключ API

OpenAI Azure OpenAI
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.getenv("OPENAI_API_KEY")
)



import os
from openai import AzureOpenAI
    
client = AzureOpenAI(
    api_key=os.getenv("AZURE_OPENAI_API_KEY"),  
    api_version="2024-07-01-preview",
    azure_endpoint=os.getenv("AZURE_OPENAI_ENDPOINT")
)

Microsoft Entra ID authentication

OpenAI Azure OpenAI
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.getenv("OPENAI_API_KEY")
)








from azure.identity import DefaultAzureCredential, get_bearer_token_provider
from openai import AzureOpenAI

token_provider = get_bearer_token_provider(
    DefaultAzureCredential(), "https://cognitiveservices.azure.com/.default"
)

api_version = "2024-07-01-preview"
endpoint = "https://my-resource.openai.azure.com"

client = AzureOpenAI(
    api_version=api_version,
    azure_endpoint=endpoint,
    azure_ad_token_provider=token_provider,
)

Аргумент ключевого слова для модели

OpenAI использует аргумент ключевого слова для указания используемой model модели. Azure OpenAI имеет концепцию уникальных развертываний моделей. При использовании Azure OpenAI следует указать базовое имя развертывания, model выбранное при развертывании модели.

Внимание

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

OpenAI Azure OpenAI
completion = client.completions.create(
    model="gpt-3.5-turbo-instruct",
    prompt="<prompt>"
)

chat_completion = client.chat.completions.create(
    model="gpt-4o",
    messages="<messages>"
)

embedding = client.embeddings.create(
    model="text-embedding-3-large",
    input="<input>"
)
completion = client.completions.create(
    model="gpt-35-turbo-instruct", # This must match the custom deployment name you chose for your model.
    prompt="<prompt>"
)

chat_completion = client.chat.completions.create(
    model="gpt-4o", # model = "deployment_name".
    messages="<messages>"
)

embedding = client.embeddings.create(
    model="text-embedding-3-large", # model = "deployment_name".
    input="<input>"
)

Поддержка внедрения Нескольких входных данных в Azure OpenAI

OpenAI и Azure OpenAI в настоящее время поддерживают входные массивы до 2048 входных элементов для текстовых внедрения-ada-002. Для обоих требуется максимальное ограничение маркера ввода для каждого запроса API, чтобы остаться до 8191 для этой модели.

OpenAI Azure OpenAI
inputs = ["A", "B", "C"] 

embedding = client.embeddings.create(
    input=inputs,
    model="text-embedding-3-large"
)


inputs = ["A", "B", "C"] #max array size=2048

embedding = client.embeddings.create(
    input=inputs,
    model="text-embedding-3-large" # This must match the custom deployment name you chose for your model.
    # engine="text-embedding-ada-002"
)