如何使用 Python 在 OpenAI 和 Azure OpenAI 端點之間切換

雖然 OpenAI 和 Azure OpenAI 服務依賴常見的 Python 用戶端程式庫,但您需要對程式碼進行小變更,才能在端點之間來回交換。 本文將逐步引導您完成跨 OpenAI 和 Azure OpenAI 工作時所遇到的常見變更和差異。

本文只會示範新的 OpenAI Python 1.x API 程式庫的範例。 如需從 0.28.1 移轉至 1.x 的資訊,請參閱我們的移轉指南

必要條件

驗證

建議您使用 Microsoft Entra ID 或 Azure Key Vault。 您可以使用環境變數在實際執行環境外部進行測試。 如果您之前尚未完成此步驟,我們的 Python 快速入門會逐步引導您完成此設定。

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

模型的關鍵字引數

OpenAI 會使用 model 關鍵字引數來指定要使用的模型。 Azure OpenAI 具有唯一模型部署的概念。 您使用 Azure OpenAI 時,model 應該參考您在部署模型時所選擇的基礎部署名稱。

重要

當您透過 Azure OpenAI 中的 API 存取模型時,您需要參考部署名稱,而不是 API 呼叫中的基礎模型名稱,這是 OpenAI 與 Azure OpenAI 之間的一個主要差異 (部分機器翻譯)。 OpenAI 只需要模型名稱。 即使使用模型參數,Azure OpenAI 一律需要部署名稱。 在我們的文件中,通常會有一些範例,其中部署名稱會表示為與模型名稱相同,以協助指出哪個模型適用於特定 API 端點。 您的部署名稱最終可以遵循最適合使用案例的任何命名慣例。

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 內嵌多個輸入支援

OpenAI 和 Azure OpenAI 目前支援最多 2,048 個 text-embedding-ada-002 輸入項目的輸入陣列。 兩者都需要每個 API 要求的最大輸入權杖限制,才能在此模型中維持在 8,191 之下。

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