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

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

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

нет

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

Рекомендуется использовать Microsoft Entra ID или Azure Key Vault. Переменные среды можно использовать для тестирования за пределами рабочей среды.

Ключ API

OpenAI Azure OpenAI
import os
from openai import OpenAI

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



import os
from openai import OpenAI
    
client = OpenAI(
    api_key=os.getenv("AZURE_OPENAI_API_KEY"),  
    base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/"
)

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 OpenAI

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

client = OpenAI(
    base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/", 
    api_key = token_provider,
)

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

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

Это важно

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

OpenAI Azure OpenAI
response = client.responses.create(   
    model="gpt-4.1-nano", # Replace with your model deployment name 
    input="This is a test."
)

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

embedding = client.embeddings.create(
    model="text-embedding-3-large",
    input="<input>"
)
response = client.responses.create(   
    model="gpt-4.1-nano", # Replace with your model deployment name 
    input="This is a test."
)

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 элементов для text-embedding-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"
)