你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

如何使用 Python 在 OpenAI 和 Azure OpenAI 终结点之间进行切换

虽然 Open AI 和 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 嵌入多输入支持

对于 text-embedding-ada-002,OpenAI 和 Azure OpenAI 目前支持的输入数组最多可以有 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"
)