Jak przełączać się między punktami końcowymi openAI i Azure OpenAI przy użyciu języka Python

Chociaż interfejsy OpenAI i Azure OpenAI Service opierają się na wspólnej bibliotece klienta języka Python, istnieją niewielkie zmiany, które należy wprowadzić w kodzie, aby zamienić się tam i z powrotem między punktami końcowymi. W tym artykule przedstawiono typowe zmiany i różnice występujące podczas pracy w usługach OpenAI i Azure OpenAI.

W tym artykule przedstawiono tylko przykłady z nową biblioteką interfejsu API OpenAI Python 1.x. Aby uzyskać informacje na temat migracji z programu , 1.x zapoznaj się z 0.28.1 naszym przewodnikiem migracji.

Wymagania wstępne

Brak

Uwierzytelnianie

Zalecamy używanie identyfikatora Entra firmy Microsoft lub usługi Azure Key Vault. Zmienne środowiskowe można używać do testowania poza środowiskiem produkcyjnym. Jeśli jeszcze tego nie zrobiono, nasze przewodniki Szybki start dotyczące języka Python przeprowadzi Cię przez tę konfigurację.

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

Argument słowa kluczowego dla modelu

Interfejs OpenAI używa argumentu kluczowego model , aby określić, który model ma być używany. Usługa Azure OpenAI ma koncepcję unikatowych wdrożeń modelu. W przypadku korzystania z usługi Azure OpenAI model należy odwołać się do bazowej nazwy wdrożenia wybranej podczas wdrażania modelu.

Ważne

Gdy uzyskujesz dostęp do modelu za pośrednictwem interfejsu API w usłudze Azure OpenAI, musisz odwołać się do nazwy wdrożenia, a nie podstawowej nazwy modelu w wywołaniach interfejsu API, co jest jedną z kluczowych różnic między interfejsem OpenAI i usługą Azure OpenAI. Interfejs OpenAI wymaga tylko nazwy modelu. Interfejs Azure OpenAI zawsze wymaga nazwy wdrożenia, nawet jeśli używasz parametru modelu. W naszych dokumentach często mamy przykłady, w których nazwy wdrożeń są reprezentowane jako identyczne z nazwami modeli, aby pomóc wskazać, który model działa z określonym punktem końcowym interfejsu API. Ostatecznie nazwy wdrożeń mogą być zgodne z dowolną konwencją nazewnictwa najlepszą dla twojego przypadku użycia.

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

Osadzanie w usłudze Azure OpenAI obsługuje wiele danych wejściowych

Interfejsy OpenAI i Azure OpenAI obsługują obecnie tablice wejściowe do 2048 elementów wejściowych dla osadzania tekstu-ada-002. Oba wymagają maksymalnego limitu tokenu wejściowego na żądanie interfejsu API, aby pozostały poniżej 8191 dla tego modelu.

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