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

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

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

必要條件

驗證

建議您使用環境變數。 如果您之前尚未這麼做,我們的 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="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,
)

模型的關鍵詞自變數

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

OpenAI 和 Azure OpenAI 目前支援最多 2,048 個文字內嵌-ada-002 輸入項目的輸入數位。 這兩者都需要每個 API 要求的最大輸入令牌限制,才能針對此模型保留低於 8,191。

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