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

如何使用 Azure AI Foundry 模型生成聊天补全

本文介绍如何使用下一代 v1 Azure OpenAI API 生成聊天补全。

先决条件

若要在应用程序中使用聊天补全模型,需要:

v1 Azure OpenAI API

下一代 v1 Azure OpenAI APIs 允许在跨语言的官方 OpenAI 客户端库中用OpenAI()客户端替代AzureOpenAI()客户端。 v1 Azure OpenAI API 添加了对以下项的支持:

  • 可以持续访问最新功能,无需频繁为 api-version 参数指定新的值。
  • 在使用密钥身份验证时,OpenAI 客户端支持通过最少的代码更改在 OpenAI 和 Azure OpenAI 之间切换。
  • OpenAI 客户端支持基于令牌的身份验证和自动令牌刷新,而无需依赖于单独的 Azure OpenAI 客户端。
  • 使用 DeepSeek 和 Grok 等提供商(支持 v1 聊天补全语法)的 Foundry 模型进行聊天补全调用。

有关 v1 Azure OpenAI API 的详细信息,请参阅 API 演变v1 OpenAPI 3.0 规范

生成聊天补全

对于 Foundry 模型中的 Azure OpenAI,请使用响应 API 进行聊天补全调用。 对于 Azure 直接销售的其他 Foundry 模型(例如 DeepSeek 和 Grok 模型),v1 Azure OpenAI API 还允许你使用 v1 聊天完成语法进行聊天完成调用。

在以下示例中,创建客户端以使用模型,然后将基本请求发送到模型。

注释

将无密钥身份验证与 Microsoft Entra ID 配合使用。 如果不可能,请使用 API 密钥并将其存储在 Azure Key Vault 中。 可以使用环境变量在 Azure 环境外部进行测试。 若要了解有关无密钥身份验证的详细信息,请参阅 什么是Microsoft Entra 身份验证?DefaultAzureCredential

使用响应 API

Python v1 示例

API 密钥身份验证

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.getenv("AZURE_OPENAI_API_KEY"),
    base_url="https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/"
)

response = client.responses.create(   
  model="gpt-4.1-nano", # Replace with your deployment name 
  input="This is a test.",
)

print(response.model_dump_json(indent=2)) 

请注意前面的代码的以下详细信息:

  • 使用OpenAI()客户端而不是已弃用的AzureOpenAI()客户端。
  • 将附加 /openai/v1/ 的 Azure OpenAI 终结点作为 base_url 传递。
  • 无需向 v1 GA API 提供 api-version 参数。
  • model 参数设置为部署模型时选择的基础 部署名称 。 此名称与部署的模型的名称不同。

要使用为 OPENAI_BASE_URLOPENAI_API_KEY 设置了环境变量的 API 密钥:

client = OpenAI()

Microsoft Entra 身份验证:

Microsoft Entra 身份验证仅支持 Azure OpenAI 资源。 完成以下步骤:

  1. 安装 Azure 标识客户端库:

    pip install azure-identity
    
  2. 使用以下代码配置 OpenAI 客户端对象、指定部署并生成响应。

    import os
    from openai import OpenAI
    from azure.identity import DefaultAzureCredential, get_bearer_token_provider
    
    token_provider = get_bearer_token_provider(
        DefaultAzureCredential(), "https://cognitiveservices.azure.com/.default"
    )
    
    client = OpenAI(  
      base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",  
      api_key = token_provider  
    )
    
    response = client.responses.create(
        model ="gpt-4.1-nano",  # Replace with your deployment name 
        input = "This is a test" 
    )
    
    print(response.model_dump_json(indent=2)) 
    

    请注意前面的代码的以下详细信息:

    • 使用OpenAI()客户端而不是已弃用的AzureOpenAI()客户端。
    • 将附加 /openai/v1/ 的 Azure OpenAI 终结点作为 base_url 传递。
    • api_key 参数设置为 token_provider. 此设置支持自动检索和刷新身份验证令牌,而不是使用静态 API 密钥。
    • 无需向 v1 GA API 提供 api-version 参数。
    • model 参数设置为部署模型时选择的基础 部署名称 。 此名称与部署的模型的名称不同。

使用聊天完成功能的 API

对于 Foundry 模型中的 Azure OpenAI,请使用 响应 API。 但是,对于来自 DeepSeek 和 Grok 等提供程序的其他 Foundry 模型,v1 API 允许进行聊天完成调用,因为这些模型支持 OpenAI v1 聊天完成语法。

base_url 接受这两种格式 https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/https://YOUR-RESOURCE-NAME.services.ai.azure.com/openai/v1/ 格式。

API 密钥身份验证

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.getenv("AZURE_OPENAI_API_KEY"),
    base_url="https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
)

completion = client.chat.completions.create(
  model="grok-3-mini", # Replace with your model deployment name.
  messages=[
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "When was Microsoft founded?"}
  ]
)

#print(completion.choices[0].message)
print(completion.model_dump_json(indent=2))

Microsoft Entra 身份验证:

from openai import OpenAI
from azure.identity import DefaultAzureCredential, get_bearer_token_provider

token_provider = get_bearer_token_provider(
    DefaultAzureCredential(), "https://cognitiveservices.azure.com/.default"
)

client = OpenAI(  
  base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",  
  api_key=token_provider,
)
completion = client.chat.completions.create(
  model="grok-3-mini", # Replace with your model deployment name.
  messages=[
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "Tell me about the attention is all you need paper"}
  ]
)

#print(completion.choices[0].message)
print(completion.model_dump_json(indent=2))