你当前正在访问 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 的信息,请参阅我们的迁移指南

先决条件

身份验证

建议使用 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 嵌入多输入支持

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