Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Используйте API Azure OpenAI Responses для генерации многотуровых ответов с сохранением состояния. Он объединяет возможности завершений чата и API помощников в едином интерфейсе. API ответов также поддерживает модель computer-use-preview, которая обеспечивает управление компьютером.
Предпосылки
- Развернутая модель Microsoft Azure OpenAI
- Метод проверки подлинности:
- Ключ API (например,
AZURE_OPENAI_API_KEYили) - Microsoft Entra ID (рекомендуется).
- Ключ API (например,
Установка или обновление пакета OpenAI
Установите или обновите пакет OpenAI Python.
pip install --upgrade openai
Создание текстового ответа
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 model deployment name
input="This is a test.",
)
print(response.model_dump_json(indent=2))
Это важно
Используйте ключи API с осторожностью. Не включайте ключ API непосредственно в код и никогда не публикуйте его. Если вы используете ключ API, сохраните его безопасно в Azure Key Vault. Дополнительные сведения о безопасном использовании ключей API в приложениях см. в разделе Ключи API с Azure Key Vault.
Дополнительные сведения о безопасности служб ИИ см. в разделе Аутентификация запросов к службам Azure AI.
Получение ответа
Чтобы получить ответ от предыдущего вызова 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.retrieve("resp_67cb61fa3a448190bcf2c42d96f0d1a8")
Это важно
Используйте ключи API с осторожностью. Не включайте ключ API непосредственно в код и никогда не публикуйте его. Если вы используете ключ API, сохраните его безопасно в Azure Key Vault. Дополнительные сведения о безопасном использовании ключей API в приложениях см. в разделе Ключи API с Azure Key Vault.
Дополнительные сведения о безопасности служб ИИ см. в разделе Аутентификация запросов к службам Azure AI.
Удаление ответа
По умолчанию данные ответа хранятся в течение 30 дней. Чтобы удалить сохраненный ответ, вызовите client.responses.delete("{response_id}").
import os
from openai import OpenAI
client = OpenAI(
base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
api_key=os.getenv("AZURE_OPENAI_API_KEY")
)
response = client.responses.delete("resp_67cb61fa3a448190bcf2c42d96f0d1a8")
print(response)
Объединение ответов
Вы можете связать ответы вместе, передавая response.id из предыдущего ответа в параметр previous_response_id.
import os
from openai import OpenAI
client = OpenAI(
base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
api_key=os.getenv("AZURE_OPENAI_API_KEY")
)
response = client.responses.create(
model="gpt-4o", # replace with your model deployment name
input="Define and explain the concept of catastrophic forgetting?"
)
second_response = client.responses.create(
model="gpt-4o", # replace with your model deployment name
previous_response_id=response.id,
input=[{"role": "user", "content": "Explain this at a level that could be understood by a college freshman"}]
)
print(second_response.model_dump_json(indent=2))
Обратите внимание на выходные данные: несмотря на то, что мы никогда не делились первым входным вопросом с вызовом API second_response, при передаче previous_response_id модель получает полный контекст предыдущего вопроса и ответа, чтобы ответить на новый вопрос.
Выходные данные:
{
"id": "resp_67cbc9705fc08190bbe455c5ba3d6daf",
"created_at": 1741408624.0,
"error": null,
"incomplete_details": null,
"instructions": null,
"metadata": {},
"model": "gpt-4o-2024-08-06",
"object": "response",
"output": [
{
"id": "msg_67cbc970fd0881908353a4298996b3f6",
"content": [
{
"annotations": [],
"text": "Sure! Imagine you are studying for exams in different subjects like math, history, and biology. You spend a lot of time studying math first and get really good at it. But then, you switch to studying history. If you spend all your time and focus on history, you might forget some of the math concepts you learned earlier because your brain fills up with all the new history facts. \n\nIn the world of artificial intelligence (AI) and machine learning, a similar thing can happen with computers. We use special programs called neural networks to help computers learn things, sort of like how our brain works. But when a neural network learns a new task, it can forget what it learned before. This is what we call \"catastrophic forgetting.\"\n\nSo, if a neural network learned how to recognize cats in pictures, and then you teach it how to recognize dogs, it might get really good at recognizing dogs but suddenly become worse at recognizing cats. This happens because the process of learning new information can overwrite or mess with the old information in its \"memory.\"\n\nScientists and engineers are working on ways to help computers remember everything they learn, even as they keep learning new things, just like students have to remember math, history, and biology all at the same time for their exams. They use different techniques to make sure the neural network doesn’t forget the important stuff it learned before, even when it gets new information.",
"type": "output_text"
}
],
"role": "assistant",
"status": null,
"type": "message"
}
],
"parallel_tool_calls": null,
"temperature": 1.0,
"tool_choice": null,
"tools": [],
"top_p": 1.0,
"max_output_tokens": null,
"previous_response_id": "resp_67cbc96babbc8190b0f69aedc655f173",
"reasoning": null,
"status": "completed",
"text": null,
"truncation": null,
"usage": {
"input_tokens": 405,
"output_tokens": 285,
"output_tokens_details": {
"reasoning_tokens": 0
},
"total_tokens": 690
},
"user": null,
"reasoning_effort": null
}
Ручное формирование цепочек ответов
Кроме того, можно вручную объединить ответы с помощью следующего метода:
import os
from openai import OpenAI
client = OpenAI(
base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
api_key=os.getenv("AZURE_OPENAI_API_KEY")
)
inputs = [{"type": "message", "role": "user", "content": "Define and explain the concept of catastrophic forgetting?"}]
response = client.responses.create(
model="gpt-4o", # replace with your model deployment name
input=inputs
)
inputs += response.output
inputs.append({"role": "user", "type": "message", "content": "Explain this at a level that could be understood by a college freshman"})
second_response = client.responses.create(
model="gpt-4o",
input=inputs
)
print(second_response.model_dump_json(indent=2))
Сжатие ответа
Сжатие позволяет уменьшить окно контекста, отправленное в модель, сохраняя необходимые сведения для понимания модели.
Использование возвращаемых элементов для сжатия
Вы можете сжать все элементы, возвращаемые из предыдущих запросов, таких как причины, сообщение, вызов функции и т. д.
curl https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/responses/compact \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $AZURE_OPENAI_AUTH_TOKEN" \
-d '{
"model": "gpt-4.1",
"input": [
{
"role" : "user",
"content": "Create a simple landing page for a dog petting café."
},
{
"id": "msg_001",
"type": "message",
"status": "completed",
"content": [
{
"type": "output_text",
"annotations": [],
"logprobs": [],
"text": "Below is a single file, ready-to-use landing page for a dog petting café:..."
}
],
"role": "assistant"
}
]
}'
import os
from openai import OpenAI
client = OpenAI(
base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
api_key=os.getenv("AZURE_OPENAI_API_KEY")
)
compacted_response = client.responses.compact(
model="gpt-4.1",
input=[
{
"role": "user",
"content": "Create a simple landing page for a dog petting cafe.",
},
# All items returned from previous requests are included here, like reasoning, message, function call, etc.
{
"id": "msg_001",
"type": "message",
"status": "completed",
"content": [
{
"type": "output_text",
"annotations": [],
"logprobs": [],
"text": "Below is a single file, ready-to-use landing page for a dog petting café:...",
},
],
"role": "assistant",
},
]
)
# Pass the compacted_response.output as input to the next request
print(compacted_response)
Сжатие с использованием предыдущего идентификатора ответа
Вы также можете упаковать, используя предыдущий идентификатор ответа.
import os
from openai import OpenAI
client = OpenAI(
base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
api_key=os.getenv("AZURE_OPENAI_API_KEY")
)
# Get back a full response
initial_response = client.responses.create(
model="gpt-4.1",
input="What is the size of France?"
)
print(f"Initial Response: {initial_response.output_text}")
# Now compact the response
compacted_response = client.responses.compact(
model="gpt-4.1",
previous_response_id=initial_response.id
)
# use the compacted response in a follow up
followup_response = client.responses.create(
model="gpt-4.1",
input=[
*compacted_response.output,
{"role": "user", "content": "And what is the capital/major city"}
]
)
print(f"Follow-up Response: {followup_response.output_text}")
Сжатие на стороне сервера
Вы также можете использовать сжатие на стороне сервера непосредственно в ответах (POST /responses или client.responses.create) с помощью параметра context_managementcompact_threshold.
- Когда число выходных маркеров пересекает заданное пороговое значение, API ответов автоматически запускает сжатие.
- В этом режиме не нужно вызывать
/responses/compactотдельно. - Ответ включает зашифрованный элемент сжатия.
- Сжатие на стороне сервера будет работать, когда вы установите store=false в запросах на создание ответов.
Элемент сжатия переносит основное предыдущее состояние и логические обоснования в следующий шаг с использованием меньшего количества токенов. Она непрозрачна и не предназначена для того, чтобы быть читаемым человеком.
Если вы используете цепочку входных массивов без отслеживания состояния, добавьте выходные элементы как обычно. Если вы используете previous_response_id, при каждом обращении передавайте только новое сообщение пользователя. В обоих шаблонах элемент сжатия содержит контекст, необходимый для следующего окна.
Подсказка
После добавления выходных элементов к предыдущим входным элементам можно удалить элементы, которые пришли до последнего элемента сжатия, чтобы уменьшить размер запросов и сократить задержку пониженного приоритета. Последний элемент компактирования содержит необходимый контекст для продолжения беседы. Если вы используете previous_response_id цепочечное выполнение, не обрезайте вручную.
Flow
- Вызывайте
responsesкак обычно. Добавьтеcontext_managementсcompact_threshold, чтобы включить сжатие на стороне сервера. - Если выход пересекает пороговое значение, служба запускает сжатие, выдает результат сжатия в выходном потоке и подрезает контекст перед продолжением инференции.
- Продолжить беседу с помощью одного из следующих шаблонов:
- Цепочка массивов ввода без состояния: добавление элементов вывода, включая элементы сжатия, в следующий входной массив.
-
previous_response_idцепочка: передавайте только новое сообщение пользователя при каждом шаге и переносите последний идентификатор ответа.
Пример
conversation = [
{
"type": "message",
"role": "user",
"content": "Let's begin a long coding task.",
}
]
while keep_going:
response = client.responses.create(
model="gpt-5.3-codex",
input=conversation,
store=False,
context_management=[{"type": "compaction", "compact_threshold": 200000}],
)
conversation.append(
{
"type": "message",
"role": "user",
"content": get_next_user_input(),
}
)
Стриминг
import os
from openai import OpenAI
client = OpenAI(
base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
api_key=os.getenv("AZURE_OPENAI_API_KEY")
)
response = client.responses.create(
input = "This is a test",
model = "o4-mini", # replace with model deployment name
stream = True
)
for event in response:
if event.type == 'response.output_text.delta':
print(event.delta, end='')
Вызов функции
API ответов поддерживает вызов функции.
import os
from openai import OpenAI
client = OpenAI(
base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
api_key=os.getenv("AZURE_OPENAI_API_KEY")
)
response = client.responses.create(
model="gpt-4o", # replace with your model deployment name
tools=[
{
"type": "function",
"name": "get_weather",
"description": "Get the weather for a location",
"parameters": {
"type": "object",
"properties": {
"location": {"type": "string"},
},
"required": ["location"],
},
}
],
input=[{"role": "user", "content": "What's the weather in San Francisco?"}],
)
print(response.model_dump_json(indent=2))
# To provide output to tools, add a response for each tool call to an array passed
# to the next response as `input`
input = []
for output in response.output:
if output.type == "function_call":
match output.name:
case "get_weather":
input.append(
{
"type": "function_call_output",
"call_id": output.call_id,
"output": '{"temperature": "70 degrees"}',
}
)
case _:
raise ValueError(f"Unknown function call: {output.name}")
second_response = client.responses.create(
model="gpt-4o",
previous_response_id=response.id,
input=input
)
print(second_response.model_dump_json(indent=2))
Интерпретатор кода
Средство интерпретатора кода позволяет моделям записывать и выполнять Python код в безопасной изолированной среде. Она поддерживает ряд сложных задач, в том числе:
- Обработка файлов с различными форматами и структурами данных
- Создание файлов, включающих данные и визуализации (например, графы)
- Итеративное написание и выполнение кода для решения проблем— модели могут отлаживать и повторять код до успешного выполнения.
- Повышение качества визуального восприятия в поддерживаемых моделях (например, o3, o4-mini) путем включения преобразований изображений, таких как обрезка, масштабирование и поворот.
- Это средство особенно полезно для сценариев, связанных с анализом данных, математическими вычислениями и созданием кода.
curl https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/responses?api-version=preview \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $AZURE_OPENAI_AUTH_TOKEN" \
-d '{
"model": "gpt-4.1",
"tools": [
{ "type": "code_interpreter", "container": {"type": "auto"} }
],
"instructions": "You are a personal math tutor. When asked a math question, write and run code using the python tool to answer the question.",
"input": "I need to solve the equation 3x + 11 = 14. Can you help me?"
}'
import os
from openai import OpenAI
client = OpenAI(
base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
api_key=os.getenv("AZURE_OPENAI_API_KEY")
)
instructions = "You are a personal math tutor. When asked a math question, write and run code using the python tool to answer the question."
response = client.responses.create(
model="gpt-4.1",
tools=[
{
"type": "code_interpreter",
"container": {"type": "auto"}
}
],
instructions=instructions,
input="I need to solve the equation 3x + 11 = 14. Can you help me?",
)
print(response.output)
Контейнеры
Это важно
Интерпретатор кода имеет дополнительные сборы, помимо платы, основанной на использовании токенов в Azure OpenAI. Если API ответа вызывает интерпретатор кода одновременно в двух разных потоках, создаются два сеанса интерпретатора кода. Каждый сеанс по умолчанию активен в течение 1 часа с временем ожидания простоя в 20 минут.
Для средства интерпретатора кода требуется контейнер — полностью изолированная виртуальная машина, в которой модель может выполнять Python код. Контейнеры могут включать отправленные файлы или файлы, созданные во время выполнения.
Чтобы создать контейнер, укажите "container": { "type": "auto", "file_ids": ["file-1", "file-2"] } в конфигурации средства при создании объекта Response. При этом автоматически создается новый контейнер или повторно используется активный объект из предыдущей code_interpreter_call в контексте модели. В code_interpreter_call выходных данных API будет содержаться тот container_id, который был создан. Срок действия этого контейнера истекает, если он не используется в течение 20 минут.
Входные и выходные данные файлов
При запуске интерпретатора кода модель может создавать собственные файлы. Например, если вы попросите создать график или создать CSV-файл, он создает эти образы непосредственно в контейнере. Он будет ссылаться на эти файлы в заметках следующего сообщения.
Все файлы в входных данных модели автоматически передаются в контейнер. Не нужно явно загружать его в контейнер.
Поддерживаемые файлы
| Формат файла | MIME type |
|---|---|
.c |
text/x-c |
.cs |
text/x-csharp |
.cpp |
text/x-c++ |
.csv |
text/csv |
.doc |
application/msword |
.docx |
Тип: приложение/vnd.openxmlformats-officedocument.wordprocessingml.document (Microsoft Word документ) |
.html |
text/html |
.java |
text/x-java |
.json |
application/json |
.md |
text/markdown |
.pdf |
приложение/pdf |
.php |
text/x-php |
.pptx |
application/vnd.openxmlformats-officedocument.presentationml.presentation |
.py |
text/x-python |
.py |
text/x-script.python |
.rb |
text/x-ruby |
.tex |
text/x-tex |
.txt |
текст/без форматирования |
.css |
text/css |
.js |
text/JavaScript |
.sh |
application/x-sh |
.ts |
application/TypeScript |
.csv |
application/csv |
.jpeg |
изображение/jpeg |
.jpg |
изображение/jpeg |
.gif |
изображение/gif |
.pkl |
application/octet-stream |
.png |
изображение/png |
.tar |
application/x-tar |
.xlsx |
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet (формат файла Excel) |
.xml |
application/xml или text/xml |
.zip |
application/zip (приложение/zip) |
Список входных элементов
import os
from openai import OpenAI
client = OpenAI(
base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
api_key=os.getenv("AZURE_OPENAI_API_KEY")
)
response = client.responses.input_items.list("resp_67d856fcfba0819081fd3cffee2aa1c0")
print(response.model_dump_json(indent=2))
Выходные данные:
{
"data": [
{
"id": "msg_67d856fcfc1c8190ad3102fc01994c5f",
"content": [
{
"text": "This is a test.",
"type": "input_text"
}
],
"role": "user",
"status": "completed",
"type": "message"
}
],
"has_more": false,
"object": "list",
"first_id": "msg_67d856fcfc1c8190ad3102fc01994c5f",
"last_id": "msg_67d856fcfc1c8190ad3102fc01994c5f"
}
ввод изображения
Для моделей с поддержкой визуального зрения поддерживаются изображения в PNG (.png), JPEG (.jpeg и .jpg), WEBP (.webp).
URL-адрес изображения
import os
from openai import OpenAI
client = OpenAI(
base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
api_key=os.getenv("AZURE_OPENAI_API_KEY")
)
response = client.responses.create(
model="gpt-4o",
input=[
{
"role": "user",
"content": [
{ "type": "input_text", "text": "what is in this image?" },
{
"type": "input_image",
"image_url": "<image_URL>"
}
]
}
]
)
print(response)
Изображение в кодировке Base64
import base64
import os
from openai import OpenAI
client = OpenAI(
base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
api_key=os.getenv("AZURE_OPENAI_API_KEY")
)
def encode_image(image_path):
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode("utf-8")
# Path to your image
image_path = "path_to_your_image.jpg"
# Getting the Base64 string
base64_image = encode_image(image_path)
response = client.responses.create(
model="gpt-4o",
input=[
{
"role": "user",
"content": [
{ "type": "input_text", "text": "what is in this image?" },
{
"type": "input_image",
"image_url": f"data:image/jpeg;base64,{base64_image}"
}
]
}
]
)
print(response)
Ввод файла
Модели с возможностями визуального зрения поддерживают входные данные PDF. PDF-файлы можно предоставлять как данные в кодировке Base64, так и в виде идентификаторов файлов. Чтобы помочь моделям интерпретировать содержимое PDF, извлеченный текст и изображение каждой страницы включаются в контекст модели. Это полезно, если ключевые сведения передаются с помощью схем или нетекстового содержимого.
Замечание
Все извлеченные текст и изображения помещаются в контекст модели. Убедитесь, что вы понимаете последствия, связанные со стоимостью и использованием токенов при вводе PDF-файлов.
В одном запросе API размер содержимого, загруженного через несколько входов (файлов), должен находиться в пределах длины контекста модели.
Только модели, поддерживающие входные данные текста и изображения, могут принимать PDF-файлы в качестве входных данных.
A
purposeuser_dataв настоящее время не поддерживается. В качестве временного обходного решения вам потребуется задать назначениеassistants.
Преобразование PDF-файла в Base64 и анализ
import base64
import os
from openai import OpenAI
client = OpenAI(
base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
api_key=os.getenv("AZURE_OPENAI_API_KEY")
)
with open("PDF-FILE-NAME.pdf", "rb") as f: # assumes PDF is in the same directory as the executing script
data = f.read()
base64_string = base64.b64encode(data).decode("utf-8")
response = client.responses.create(
model="gpt-4o-mini", # model deployment name
input=[
{
"role": "user",
"content": [
{
"type": "input_file",
"filename": "PDF-FILE-NAME.pdf",
"file_data": f"data:application/pdf;base64,{base64_string}",
},
{
"type": "input_text",
"text": "Summarize this PDF",
},
],
},
]
)
print(response.output_text)
Отправка PDF-файла и анализ
Отправьте PDF-файл. A purposeuser_data в настоящее время не поддерживается. В качестве обходного решения вам потребуется установить цель на assistants.
import os
from openai import OpenAI
client = OpenAI(
base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
api_key=os.getenv("AZURE_OPENAI_API_KEY")
)
# Upload a file with a purpose of "assistants"
file = client.files.create(
file=open("nucleus_sampling.pdf", "rb"), # This assumes a .pdf file in the same directory as the executing script
purpose="assistants"
)
print(file.model_dump_json(indent=2))
file_id = file.id
Выходные данные:
{
"id": "assistant-KaVLJQTiWEvdz8yJQHHkqJ",
"bytes": 4691115,
"created_at": 1752174469,
"filename": "nucleus_sampling.pdf",
"object": "file",
"purpose": "assistants",
"status": "processed",
"expires_at": null,
"status_details": null
}
Затем вы возьмете значение id и передайте его в модель для обработки в file_id:
import os
from openai import OpenAI
client = OpenAI(
base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
api_key=os.getenv("AZURE_OPENAI_API_KEY")
)
response = client.responses.create(
model="gpt-4o-mini",
input=[
{
"role": "user",
"content": [
{
"type": "input_file",
"file_id":"assistant-KaVLJQTiWEvdz8yJQHHkqJ"
},
{
"type": "input_text",
"text": "Summarize this PDF",
},
],
},
]
)
print(response.output_text)
curl https://YOUR-RESOURCE-NAME.openai.azure.com/openai/files \
-H "Authorization: Bearer $AZURE_OPENAI_AUTH_TOKEN" \
-F purpose="assistants" \
-F file="@your_file.pdf" \
curl https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/responses \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $AZURE_OPENAI_AUTH_TOKEN" \
-d '{
"model": "gpt-4.1",
"input": [
{
"role": "user",
"content": [
{
"type": "input_file",
"file_id": "assistant-123456789"
},
{
"type": "input_text",
"text": "ASK SOME QUESTION RELATED TO UPLOADED PDF"
}
]
}
]
}'
Использование удаленных серверов MCP
Вы можете расширить возможности модели, подключив ее к средствам, размещенным на серверах удаленного протокола контекста модели (MCP). Эти серверы поддерживаются разработчиками и организациями и предоставляют средства, к которым могут обращаться клиенты, совместимые с MCP, такие как API ответов.
Протокол контекста модели (MCP) — это открытый стандарт, определяющий, как приложения предоставляют средства и контекстные данные для больших языковых моделей (LLM). Она обеспечивает согласованную масштабируемую интеграцию внешних инструментов с рабочими процессами модели.
В следующем примере показано, как использовать вымышленный сервер MCP для запроса сведений о Azure REST API. Это позволяет модели извлекать контент репозитория и анализировать его в режиме реального времени.
curl https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/responses \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $AZURE_OPENAI_AUTH_TOKEN" \
-d '{
"model": "gpt-4.1",
"tools": [
{
"type": "mcp",
"server_label": "github",
"server_url": "https://contoso.com/Azure/azure-rest-api-specs",
"require_approval": "never"
}
],
"input": "What is this repo in 100 words?"
}'
import os
from openai import OpenAI
client = OpenAI(
base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
api_key=os.getenv("AZURE_OPENAI_API_KEY")
)
response = client.responses.create(
model="gpt-4.1", # replace with your model deployment name
tools=[
{
"type": "mcp",
"server_label": "github",
"server_url": "https://contoso.com/Azure/azure-rest-api-specs",
"require_approval": "never"
},
],
input="What transport protocols are supported in the 2025-03-26 version of the MCP spec?",
)
print(response.output_text)
Средство MCP работает только в API ответов и доступно во всех новых моделях (gpt-4o, gpt-4.1 и наших моделях причин). Если вы используете средство MCP, вы оплачиваете только токены, используемые при импорте определений инструментов или вызовов инструментов, без каких-либо дополнительных сборов.
Утверждения
По умолчанию API ответов требует явного утверждения, прежде чем любые данные будут переданы удаленному серверу MCP. Этот шаг утверждения помогает обеспечить прозрачность и обеспечивает контроль над тем, какие данные отправляются внешним образом.
Рекомендуется просматривать все данные, совместно используемые с удаленными серверами MCP, и при необходимости регистрируя их в целях аудита.
Если требуется утверждение, модель возвращает элемент mcp_approval_request в ответных данных. Этот объект содержит сведения о ожидающих запросах и позволяет проверять или изменять данные перед продолжением.
{
"id": "mcpr_682bd9cd428c8198b170dc6b549d66fc016e86a03f4cc828",
"type": "mcp_approval_request",
"arguments": {},
"name": "fetch_azure_rest_api_docs",
"server_label": "github"
}
Чтобы продолжить удаленный вызов MCP, необходимо ответить на запрос утверждения, создав новый объект ответа, включающий элемент mcp_approval_response. Этот объект подтверждает намерение разрешить модели отправлять указанные данные на удаленный сервер MCP.
curl https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/responses \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $AZURE_OPENAI_AUTH_TOKEN" \
-d '{
"model": "gpt-4.1",
"tools": [
{
"type": "mcp",
"server_label": "github",
"server_url": "https://contoso.com/Azure/azure-rest-api-specs",
"require_approval": "never"
}
],
"previous_response_id": "resp_682f750c5f9c8198aee5b480980b5cf60351aee697a7cd77",
"input": [{
"type": "mcp_approval_response",
"approve": true,
"approval_request_id": "mcpr_682bd9cd428c8198b170dc6b549d66fc016e86a03f4cc828"
}]
}'
import os
from openai import OpenAI
client = OpenAI(
base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
api_key=os.getenv("AZURE_OPENAI_API_KEY")
)
response = client.responses.create(
model="gpt-4.1", # replace with your model deployment name
tools=[
{
"type": "mcp",
"server_label": "github",
"server_url": "https://contoso.com/Azure/azure-rest-api-specs",
"require_approval": "never"
},
],
previous_response_id="resp_682f750c5f9c8198aee5b480980b5cf60351aee697a7cd77",
input=[{
"type": "mcp_approval_response",
"approve": True,
"approval_request_id": "mcpr_682bd9cd428c8198b170dc6b549d66fc016e86a03f4cc828"
}],
)
Authentication
Это важно
- Клиент MCP в API ответов требует TLS 1.2 или более поздней версии.
- В настоящее время взаимный TLS (mTLS) не поддерживается.
- теги службы Azure в настоящее время не поддерживаются для трафика клиента MCP.
В отличие от сервера GITHUB MCP, большинство удаленных серверов MCP требуют проверки подлинности. Средство MCP в API ответов поддерживает пользовательские заголовки, что позволяет безопасно подключаться к этим серверам с помощью необходимой схемы проверки подлинности.
Вы можете указать заголовки, такие как ключи API, маркеры OAuth access или другие учетные данные непосредственно в запросе. Наиболее часто используемым является заголовок Authorization.
curl https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/responses \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $AZURE_OPENAI_AUTH_TOKEN" \
-d '{
"model": "gpt-4.1",
"input": "What is this repo in 100 words?",
"tools": [
{
"type": "mcp",
"server_label": "github",
"server_url": "https://contoso.com/Azure/azure-rest-api-specs",
"headers": {
"Authorization": "Bearer $YOUR_API_KEY"
}
}
]
}'
import os
from openai import OpenAI
client = OpenAI(
base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
api_key=os.getenv("AZURE_OPENAI_API_KEY")
)
response = client.responses.create(
model="gpt-4.1",
input="What is this repo in 100 words?",
tools=[
{
"type": "mcp",
"server_label": "github",
"server_url": "https://gitmcp.io/Azure/azure-rest-api-specs",
"headers": {
"Authorization": "Bearer $YOUR_API_KEY"
}
}
]
)
print(response.output_text)
Фоновые задачи
Фоновый режим позволяет выполнять длительные задачи асинхронно с помощью таких моделей, как o3 и o1-pro. Это особенно полезно для сложных задач рассудка, которые могут занять несколько минут, например тех, которые обрабатываются агентами, такими как Codex или Deep Research.
Включив фоновый режим, можно избежать времени ожидания и обеспечить надежность во время расширенных операций. При отправке "background": trueзапроса задача обрабатывается асинхронно, и с течением времени можно проверить его состояние.
Чтобы запустить фоновую задачу, задайте для параметра фона значение true в запросе:
curl https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/responses \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $AZURE_OPENAI_AUTH_TOKEN" \
-d '{
"model": "o3",
"input": "Write me a very long story",
"background": true
}'
import os
from openai import OpenAI
client = OpenAI(
base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
api_key=os.getenv("AZURE_OPENAI_API_KEY")
)
response = client.responses.create(
model = "o3",
input = "Write me a very long story",
background = True
)
print(response.status)
Используйте конечную точку GET для проверки состояния фонового ответа. Продолжайте опрос, пока состояние находится в очереди или in_progress. Когда ответ достигнет окончательного (конечного) состояния, он будет доступен для извлечения.
curl -X GET https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/responses/resp_1234567890 \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $AZURE_OPENAI_AUTH_TOKEN"
from time import sleep
import os
from openai import OpenAI
client = OpenAI(
base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
api_key=os.getenv("AZURE_OPENAI_API_KEY")
)
response = client.responses.create(
model = "o3",
input = "Write me a very long story",
background = True
)
while response.status in {"queued", "in_progress"}:
print(f"Current status: {response.status}")
sleep(2)
response = client.responses.retrieve(response.id)
print(f"Final status: {response.status}\nOutput:\n{response.output_text}")
Вы можете отменить выполняемую фоновую задачу, используя конечную точку cancel. Отмена является идемпотентной— последующие вызовы возвращают окончательный объект ответа.
curl -X POST https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/responses/resp_1234567890/cancel \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $AZURE_OPENAI_AUTH_TOKEN"
import os
from openai import OpenAI
client = OpenAI(
base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
api_key=os.getenv("AZURE_OPENAI_API_KEY")
)
response = client.responses.cancel("resp_1234567890")
print(response.status)
Потоковая передача ответа в фоновом режиме
Чтобы выполнить потоковую передачу фонового ответа, установите для background и stream значение true. Это полезно, если вы хотите возобновить потоковую передачу позже в случае удаленного подключения. Для отслеживания положения используйте sequence_number (номер последовательности) из каждого события.
curl https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/responses \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $AZURE_OPENAI_AUTH_TOKEN" \
-d '{
"model": "o3",
"input": "Write me a very long story",
"background": true,
"stream": true
}'
import os
from openai import OpenAI
client = OpenAI(
base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
api_key=os.getenv("AZURE_OPENAI_API_KEY")
)
# Fire off an async response but also start streaming immediately
stream = client.responses.create(
model="o3",
input="Write me a very long story",
background=True,
stream=True,
)
cursor = None
for event in stream:
print(event)
cursor = event["sequence_number"]
Замечание
Фоновые ответы в настоящее время имеют более высокую задержку времени до первого маркера, чем синхронные ответы. В настоящее время ведется улучшение, чтобы сократить этот разрыв.
Ограничения
- Для фонового режима требуется
store=true. Запросы без отслеживания состояния не поддерживаются. - Вы можете возобновить потоковую передачу только в том случае, если исходный запрос включал
stream=true. - Чтобы отменить синхронный ответ, завершите подключение напрямую.
Возобновление потоковой передачи с определенной точки
curl https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/responses/resp_1234567890?stream=true&starting_after=42 \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $AZURE_OPENAI_AUTH_TOKEN"
Зашифрованные элементы для рассуждения
При использовании API ответов в режиме без сохранения состояния, установив значение store на false, необходимо по-прежнему сохранять контекст аргументирования во время беседы. Чтобы сделать это, включите зашифрованные причинно-следственные элементы в запросы API.
Чтобы сохранить элементы рассуждений между ходами, добавьте reasoning.encrypted_content к параметру include в вашем запросе. Это гарантирует, что ответ включает зашифрованную версию траектории рассуждений, которая может быть передана в будущих запросах.
curl https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/responses \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $AZURE_OPENAI_AUTH_TOKEN" \
-d '{
"model": "o4-mini",
"reasoning": {"effort": "medium"},
"input": "What is the weather like today?",
"tools": [<YOUR_FUNCTION GOES HERE>],
"include": ["reasoning.encrypted_content"]
}'
Создание изображений (предварительная версия)
API ответов позволяет создавать изображения в рамках бесед и многоэтапных рабочих процессов. Он поддерживает входные и выходные данные изображения в контексте и включает встроенные средства для создания и редактирования изображений.
По сравнению с автономным API изображений API ответов предлагает несколько преимуществ:
- Потоковая передача: отображение частичных изображений во время генерации для улучшения восприятия задержки.
- Гибкие входные данные: примите идентификаторы файлов изображений в качестве входных данных в дополнение к необработанным байтам изображений.
Замечание
Инструмент создания изображений в API ответов поддерживается только моделями gpt-image-1-серии. Однако эту модель можно вызвать из этого списка поддерживаемых моделей: gpt-4o, gpt-4o-mini, gpt-4.1, gpt-4.1-mini, gpt-4.1-nano, o3, gpt-5 и gpt-5.1 серии моделей.
Средство создания образов API "Ответы" в настоящее время не поддерживает режим потоковой передачи. Чтобы использовать режим потоковой передачи и создавать частичные изображения, вызовите API создания изображений непосредственно за пределами API ответов.
Используйте API ответов, если вы хотите создать разговорные визуальные взаимодействия с GPT Image.
from openai import OpenAI
from azure.identity import DefaultAzureCredential, get_bearer_token_provider
token_provider = get_bearer_token_provider(
DefaultAzureCredential(), "https://ai.azure.com/.default"
)
client = OpenAI(
base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
api_key=token_provider,
default_headers={"x-ms-oai-image-generation-deployment":"gpt-image-1.5", "api_version":"preview"}
)
response = client.responses.create(
model="o3",
input="Generate an image of gray tabby cat hugging an otter with an orange scarf",
tools=[{"type": "image_generation"}],
)
# Save the image to a file
image_data = [
output.result
for output in response.output
if output.type == "image_generation_call"
]
if image_data:
image_base64 = image_data[0]
with open("otter.png", "wb") as f:
f.write(base64.b64decode(image_base64))
Модели причин
Примеры использования моделей рассуждений с API ответов см. в руководстве по моделям причин.
Использование компьютера
Использование компьютера с Playwright теперь относится к руководству по модели использования выделенного компьютера
API ответов на запросы
поддержка API
Доступность по регионам
API ответов в настоящее время доступен в следующих регионах:
- австралиявосток
- Бразильский Юг
- Центральная Канада
- Канада Восток
- Истус
- eastus2
- francecentral
- Германия-запад-центр
- северная италия
- japaneast
- koreacentral
- Northcentralus
- Норвегия Восток
- Польша Центральная
- Южная Африка-север
- СаутЦентралус
- southeastasia
- Южная Индия
- spaincentral
- SwedenCentral
- Швейцария север
- uaenorth
- UKSOUTH
- Вестус
- westus3
Поддержка модели
-
gpt-5.4-nano(Версия:2026-03-17) -
gpt-5.4-mini(Версия:2026-03-17) -
gpt-5.4-pro(Версия:2026-03-05) -
gpt-5.4(Версия:2026-03-05) -
gpt-5.3-chat(Версия:2026-03-03) -
gpt-5.3-codex(Версия:2026-02-24) -
gpt-5.2-codex(Версия:2026-01-14) -
gpt-5.2(Версия:2025-12-11) -
gpt-5.2-chat(Версия:2025-12-11) -
gpt-5.2-chat(Версия:2026-02-10) -
gpt-5.1-codex-max(Версия:2025-12-04) -
gpt-5.1(Версия:2025-11-13) -
gpt-5.1-chat(Версия:2025-11-13) -
gpt-5.1-codex(Версия:2025-11-13) -
gpt-5.1-codex-mini(Версия:2025-11-13) -
gpt-5-pro(Версия:2025-10-06) -
gpt-5-codex(Версия:2025-09-11) -
gpt-5(Версия:2025-08-07) -
gpt-5-mini(Версия:2025-08-07) -
gpt-5-nano(Версия:2025-08-07) -
gpt-5-chat(Версия:2025-08-07) -
gpt-5-chat(Версия:2025-10-03) -
gpt-5-codex(Версия:2025-09-15) -
gpt-4o(версии:2024-11-20,2024-08-062024-05-13) -
gpt-4o-mini(Версия:2024-07-18) computer-use-preview-
gpt-4.1(Версия:2025-04-14) -
gpt-4.1-nano(Версия:2025-04-14) -
gpt-4.1-mini(Версия:2025-04-14) -
gpt-image-1(Версия:2025-04-15) -
gpt-image-1-mini(Версия:2025-10-06) -
gpt-image-1.5(Версия:2025-12-16) -
o1(Версия:2024-12-17) -
o3-mini(Версия:2025-01-31) -
o3(Версия:2025-04-16) -
o4-mini(Версия:2025-04-16)
Не каждая модель доступна в регионах, поддерживаемых API ответов. Проверьте страницу моделей для доступности региона модели.
Замечание
В настоящее время не поддерживается:
- Создание изображений с помощью многоэтапного редактирования и потоковой передачи.
- Изображения нельзя отправлять в виде файла, а затем ссылаться на него в качестве входных данных.
Существует известная проблема со следующими:
- PDF в качестве входного файла теперь поддерживается, но установка цели загрузки файла на
user_dataв данный момент не поддерживается. - Проблемы с производительностью при использовании фонового режима с потоковой передачей. Ожидается, что проблема будет решена в ближайшее время.
Справочная документация
- справочная документация по API Responses
Устранение неполадок
-
401/403. Если вы используете Microsoft Entra ID, убедитесь, что токен предназначен для
https://ai.azure.com/.default. Если вы используете ключ API, убедитесь, что вы используете правильный ключ для ресурса. -
404: Убедитесь, что
modelсоответствует имени развертывания.