Python を使用して OpenAI エンドポイントと Azure OpenAI エンドポイントを切り替える方法

OpenAI と Azure OpenAI Service は共通の Python クライアント ライブラリに依存していますが、これらのエンドポイントの間でやり取りするには、コードを少し変更する必要があります。 この記事では、OpenAI と Azure OpenAI で作業するときに発生する一般的な変更と相違点について説明します。

この記事では、新しい OpenAI Python 1.x API ライブラリの例のみを示します。 0.28.1 から 1.x への移行については、移行ガイドを参照してください。

認証

環境変数を使うことをお勧めします。 まだこれを行っていない場合は、Python のクイックスタートでこの構成手順が説明されています。

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="2023-12-01-preview",
    azure_endpoint=os.getenv("AZURE_OPENAI_ENDPOINT")
)

Microsoft Entra ID 認証

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 の主な違いの 1 つです。 OpenAI で必要なのはモデル名のみですが、Azure OpenAI では、モデル パラメーターを使う場合でも常にデプロイ名が必要です。 Microsoft のドキュメントには、どのモデルが特定の 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 では現在、text-embedding-ada-002 で最大 2048 個の入力項目の入力配列がサポートされています。 どちらの場合も、このモデルでは API 要求あたりの最大入力トークン制限を 8191 未満に抑える必要があります。

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

次のステップ