Come passare da un endpoint OpenAI ad Azure OpenAI 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 per 1.x fare riferimento alla guida alla migrazione.

Prerequisiti

None

Autenticazione

È consigliabile usare le variabili di ambiente. Se non è stato fatto in precedenza, le guide introduttive di Python illustrano 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="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,
)

Argomento parola chiave per il modello

OpenAI usa l'argomento della parola chiave model per specificare il modello da usare. Azure OpenAI ha il concetto di distribuzioni di modelli univoci. Quando si usa Azure OpenAI, model 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, è necessario fare riferimento al nome della distribuzione anziché al nome del modello sottostante nelle chiamate API, 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 usa il parametro del modello. Nella documentazione sono spesso disponibili esempi in cui i nomi di distribuzione sono rappresentati come identici ai nomi dei modelli per indicare quale modello funziona con un determinato endpoint API. In definitiva, i nomi di distribuzione possono seguire qualsiasi convenzione di denominazione sia 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-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>"
)

Azure OpenAI incorpora più input

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