Azure OpenAI 的 Responses API 是一种全新的有状态 API,它将聊天补全 (Chat Completions) 和助手 (Assistants) API 的核心功能整合到统一的体验中。此外,该 API 还新增了对 computer-use-preview 模型的支持,为“计算机使用 (Computer use)”功能提供动力。

可用性与支持

API 版本

要使用 Responses API 的最新功能,必须使用 v1 版本的 API。

支持区域

Responses API 目前在以下 Azure 区域可用:

  • 澳大利亚东部 (australiaeast)
  • 美国东部 (eastus)
  • 美国东部 2 (eastus2)
  • 法国中部 (francecentral)
  • 日本东部 (japaneast)
  • 挪威东部 (norwayeast)
  • 波兰中部 (polandcentral)
  • 印度南部 (southindia)
  • 瑞典中部 (swedencentral)
  • 瑞士北部 (switzerlandnorth)
  • 阿联酋北部 (uaenorth)
  • 英国南部 (uksouth)
  • 美国西部 (westus)
  • 美国西部 3 (westus3)

支持模型

以下是部分支持的模型列表。请注意,并非所有模型在所有支持的区域都可用,具体可用性请查阅 Azure OpenAI 模型文档。

  • gpt-5
  • gpt-5-mini
  • gpt-5-nano
  • gpt-5-chat
  • gpt-4o
  • gpt-4o-mini
  • computer-use-preview
  • gpt-4.1
  • gpt-4.1-nano
  • gpt-4.1-mini
  • gpt-image-1
  • o1
  • o3-mini
  • o3
  • o4-mini

当前限制与已知问题

在使用 Responses API 时,请注意以下几点:

  • 暂不支持的功能
    • 网页搜索工具。
    • 通过多轮编辑和流式传输生成图像(即将推出)。
    • 将图像作为文件上传后在输入中引用(即将推出)。
  • 已知问题
    • 虽然支持将 PDF 作为输入文件,但将文件上传目的设置为 user_data 的功能目前不受支持。
    • 在流式传输模式下使用后台模式时存在性能问题,预计很快会得到解决。

快速入门

环境准备

要访问 Responses API,您需要将 OpenAI Python 库升级到最新版本。

pip install --upgrade openai

生成文本响应

以下示例展示了如何调用 Responses API 生成一个简单的文本响应。

Python (使用 API 密钥)

重要提示:请谨慎使用 API 密钥。不要将其硬编码在代码中或公开发布。建议将密钥安全地存储在 Azure Key Vault 等服务中。

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.getenv("AZURE_OPENAI_API_KEY"),
    base_url="https://<你的资源名称>.openai.azure.com/openai/v1/",
)

response = client.responses.create( 
    model="gpt-4.1-nano", # 替换为你的模型部署名称
    input="This is a test.",
)

print(response.model_dump_json(indent=2))

Python (使用 Microsoft Entra ID)

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://<你的资源名称>.openai.azure.com/openai/v1/", 
    api_key=token_provider,
)

response = client.responses.create(
    model="gpt-4.1-nano", # 替换为你的模型部署名称
    input="This is a test" 
)

print(response.model_dump_json(indent=2))

REST API

您也可以通过 cURL 直接调用 API 端点。

使用 API 密钥:

curl -X POST https://<你的资源名称>.openai.azure.com/openai/v1/responses \
 -H "Content-Type: application/json" \
 -H "api-key: $AZURE_OPENAI_API_KEY" \
 -d '{
 "model": "gpt-4.1-nano",
 "input": "This is a test"
 }'

使用 Microsoft Entra ID 令牌:

curl -X POST https://<你的资源名称>.openai.azure.com/openai/v1/responses \
 -H "Content-Type: application/json" \
 -H "Authorization: Bearer $AZURE_OPENAI_AUTH_TOKEN" \
 -d '{
 "model": "gpt-4o",
 "input": "This is a test"
 }'

响应示例

调用成功后,您会收到一个类似下方的 JSON 对象:

{
  "id": "resp_67cb32528d6881909eb2859a55e18a85",
  "created_at": 1741369938.0,
  "model": "gpt-4o-2024-08-06",
  "object": "response",
  "output": [
    {
      "id": "msg_67cb3252cfac8190865744873aada798",
      "content": [
        {
          "annotations": [],
          "text": "Great! How can I help you today?",
          "type": "output_text"
        }
      ],
      "role": "assistant",
      "status": null,
      "type": "message"
    }
  ],
  "output_text": "Great! How can I help you today?",
  "status": "completed",
  "usage": {
    "input_tokens": 20,
    "output_tokens": 11,
    "total_tokens": 31
  },
  "error": null
}

检索响应

您可以通过响应 ID (response_id) 检索之前创建的响应。

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.getenv("AZURE_OPENAI_API_KEY"),
    base_url="https://<你的资源名称>.openai.azure.com/openai/v1/",
)

# 使用实际的 response_id 替换
response = client.responses.retrieve("resp_67cb61fa3a448190bcf2c42d96f0d1a8")

print(response.model_dump_json(indent=2))

删除响应

默认情况下,响应数据会保留 30 天。您可以使用 delete 方法主动删除一个响应。

import os
from openai import OpenAI

client = OpenAI( 
    base_url="https://<你的资源名称>.openai.azure.com/openai/v1/",
    api_key=os.getenv("AZURE_OPENAI_API_KEY") 
)

# 使用实际的 response_id 替换
response = client.responses.delete("resp_67cb61fa3a448190bcf2c42d96f0d1a8")

print(response)

构建多轮对话

Responses API 是有状态的,可以轻松构建连续的多轮对话。

方法一:使用 previous_response_id 自动关联上下文

最简单的方法是在创建新响应时,将上一个响应的 id 传入 previous_response_id 参数。这样,模型就能自动获取完整的对话历史。

import os
from openai import OpenAI

client = OpenAI( 
    base_url="https://<你的资源名称>.openai.azure.com/openai/v1/",
    api_key=os.getenv("AZURE_OPENAI_API_KEY") 
)

# 第一轮对话
response = client.responses.create(
    model="gpt-4o",
    input="请定义并解释‘灾难性遗忘’这个概念。"
)

# 第二轮对话,关联上一轮的响应
second_response = client.responses.create(
    model="gpt-4o",
    previous_response_id=response.id,
    input=[{"role": "user", "content": "用大一新生能听懂的水平再解释一下。"}]
)

print(second_response.model_dump_json(indent=2))

在第二次调用中,我们并未重复第一个问题,但通过传递 previous_response_id,模型能够理解上下文并给出恰当的回答。

方法二:手动维护对话历史

您也可以在客户端手动维护一个输入列表,将每一轮的用户输入和模型输出都追加进去,然后将其作为下一次请求的 input

import os
from openai import OpenAI

client = OpenAI( 
    base_url="https://<你的资源名称>.openai.azure.com/openai/v1/",
    api_key=os.getenv("AZURE_OPENAI_API_KEY") 
)

# 初始化对话历史
inputs = [{"type": "message", "role": "user", "content": "请定义并解释‘灾难性遗忘’这个概念。"}] 
 
# 第一轮对话
response = client.responses.create( 
    model="gpt-4o",
    input=inputs 
) 
 
# 将模型的输出添加到对话历史中
inputs += response.output

# 添加新一轮的用户输入
inputs.append({"role": "user", "type": "message", "content": "用大一新生能听懂的水平再解释一下。"}) 
 
# 第二轮对话
second_response = client.responses.create(
    model="gpt-4o",
    input=inputs
)

print(second_response.model_dump_json(indent=2))

👉 如果你需要 ChatGPT 代充 / Claude / Claude Code / 镜像 / 中转 API