Come passare da un endpoint OpenAI ad OpenAI di Azure con Python

Anche se OpenAI e il Servizio OpenAI di Azure si basano su una libreria client Python comune, è necessario apportare piccole modifiche al codice per eseguire lo scambio tra endpoint. Questo articolo illustra le modifiche e le differenze comuni che si riscontrano quando si lavora in OpenAI e OpenAI di Azure.

Questo articolo mostra solo esempi con la nuova libreria API Python 1.x OpenAI. Per informazioni sulla migrazione da 0.28.1 a 1.x, vedere la guida alla migrazione.

Prerequisiti

None

Authentication

È consigliabile usare Microsoft Entra ID o Azure Key Vault. È possibile usare le variabili di ambiente per i test all'esterno dell'ambiente di produzione. Se non si ha familiarità con questa operazione, le guide di avvio rapido di Python spiegano in maniera dettagliata questa configurazione.

Chiave 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,
)

Argomento della parola chiave per il modello

OpenAI usa l'argomento della parola chiave model per specificare il modello da usare. Azure OpenAI usa il concetto di distribuzioni di modelli univoci. Quando si usa Azure OpenAI, model deve fare riferimento al nome della distribuzione sottostante scelto durante la distribuzione del modello.

Importante

Quando si accede al modello tramite l'API in Azure OpenAI, nelle chiamate API è necessario fare riferimento al nome della distribuzione anziché a quello del modello sottostante, il che è una delle differenze principali tra OpenAI e Azure OpenAI. OpenAI richiede solo il nome del modello. Azure OpenAI richiede sempre il nome della distribuzione, anche quando si sta usando il parametro del modello. Nella documentazione sono spesso disponibili esempi in cui i nomi di distribuzione sono rappresentati come identici ai nomi di modelli per indicare quale modello funziona con un determinato endpoint API. In definitiva, i nomi di distribuzione possono seguire qualsiasi convenzione di denominazione risulti ottimale per il caso d'uso.

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

Supporto di input multipli per gli incorporamenti di Azure OpenAI

OpenAI e Azure OpenAI supportano attualmente matrici di input fino a 2.048 elementi di input per text-embedding-ada-002. Entrambi richiedono che il limite massimo di token di input per ogni richiesta API rimanga inferiore a 8.191 per questo modello.

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