Växla mellan OpenAI- och Azure OpenAI-slutpunkter med Python

OpenAI och Azure OpenAI Service förlitar sig på ett vanligt Python-klientbibliotek, men det finns små ändringar du behöver göra i koden för att växla fram och tillbaka mellan slutpunkter. Den här artikeln beskriver de vanliga ändringar och skillnader som du kommer att uppleva när du arbetar i OpenAI och Azure OpenAI.

Den här artikeln visar bara exempel med det nya OpenAI Python 1.x API-biblioteket. Information om hur du migrerar från 0.28.1 finns 1.x i vår migreringsguide.

Förutsättningar

Ingen

Autentisering

Vi rekommenderar att du använder Microsoft Entra-ID eller Azure Key Vault. Du kan använda miljövariabler för testning utanför produktionsmiljön. Om du inte har gjort det tidigare går våra Python-snabbstarter igenom den här konfigurationen.

API key

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

Nyckelordsargument för modell

OpenAI använder nyckelordsargumentet model för att ange vilken modell som ska användas. Azure OpenAI har begreppet unika modelldistributioner. När du använder Azure OpenAI model bör du referera till det underliggande distributionsnamnet som du valde när du distribuerade modellen.

Viktigt!

När du kommer åt modellen via API:et i Azure OpenAI måste du referera till distributionsnamnet i stället för det underliggande modellnamnet i API-anrop, vilket är en av de viktigaste skillnaderna mellan OpenAI och Azure OpenAI. OpenAI kräver endast modellnamnet. Azure OpenAI kräver alltid distributionsnamn, även när du använder modellparametern. I våra dokument har vi ofta exempel där distributionsnamn representeras som identiska med modellnamn för att ange vilken modell som fungerar med en viss API-slutpunkt. I slutändan kan dina distributionsnamn följa den namngivningskonvention som passar bäst för ditt användningsfall.

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-inbäddning har stöd för flera indata

OpenAI och Azure OpenAI har för närvarande stöd för indatamatriser på upp till 2 048 indataobjekt för textinbäddning-ada-002. Båda kräver att maxgränsen för indatatoken per API-begäran förblir under 8 191 för den här modellen.

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