Como alternar entre pontos de extremidade OpenAI e Azure OpenAI com Python

Embora o OpenAI e o Serviço OpenAI do Azure dependam de uma biblioteca de cliente Python comum, há pequenas alterações que você precisa fazer no seu código para trocar entre pontos de extremidade. Este artigo orienta você pelas alterações e diferenças comuns que você experimentará ao trabalhar no OpenAI e no Azure OpenAI.

Este artigo mostra apenas exemplos com a nova biblioteca de API OpenAI Python 1.x. Para obter informações sobre como migrar de, 1.x consulte nosso guia de 0.28.1 migração.

Pré-requisitos

Nenhuma

Autenticação

Recomendamos o uso de variáveis de ambiente. Se você ainda não fez isso, nossos quickstarts do Python orientam você nessa configuração.

Chave de 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="2023-12-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 = "2023-12-01-preview"
endpoint = "https://my-resource.openai.azure.com"

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

Argumento de palavra-chave para modelo

O OpenAI usa o argumento da model palavra-chave para especificar qual modelo usar. O Azure OpenAI tem o conceito de implantações de modelo exclusivas. Quando você usa o Azure OpenAI, model deve se referir ao nome de implantação subjacente que você escolheu quando implantou o modelo.

Importante

Ao acessar o modelo por meio da API no Azure OpenAI, você precisa se referir ao nome da implantação em vez do nome do modelo subjacente nas chamadas de API, que é uma das principais diferenças entre o OpenAI e o Azure OpenAI. OpenAI requer apenas o nome do modelo. O Azure OpenAI sempre requer o nome da implantação, mesmo ao usar o parâmetro model. Em nossos documentos, geralmente temos exemplos em que os nomes de implantação são representados como idênticos aos nomes de modelo para ajudar a indicar qual modelo funciona com um ponto de extremidade de API específico. Em última análise, seus nomes de implantação podem seguir qualquer convenção de nomenclatura que seja melhor para seu caso de uso.

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

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

embedding = client.embeddings.create(
    model="text-embedding-ada-002",
    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-35-turbo", # model = "deployment_name".
    messages="<messages>"
)

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

O Azure OpenAI incorpora suporte a várias entradas

Atualmente, o OpenAI e o Azure OpenAI suportam matrizes de entrada de até 2.048 itens de entrada para text-embedding-ada-002. Ambos exigem que o limite máximo de token de entrada por solicitação de API permaneça abaixo de 8.191 para este modelo.

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

embedding = client.embeddings.create(
    input=inputs,
    model="text-embedding-ada-002"
)


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

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