Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Используйте API Azure OpenAI Responses для создания многоэтапных и отслеживающих состояние ответов. Он объединяет возможности завершений чата и API ассистентов в едином интерфейсе. API ответов также поддерживает модель, которая позволяет computer-use-previewиспользовать компьютер.
Необходимые условия
- Развернутая модель OpenAI Azure
- Метод проверки подлинности:
- Ключ 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)
Сжатие с использованием идентификатора предыдущего ответа
Вы также можете уплотнить, используя предыдущий 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")
)
# 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 цепочку, не обрезайте вручную.
Поток
- Звоните
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(),
}
)
Стриминг
Примечание
Во время потоковой передачи API ответов может вернуть событие ошибки ( 500, 429 и аналогичные ошибки), если служба сталкивается с ошибкой, например, ограничения маркеров или проблемы синтаксического анализа. Приложения должны обнаруживать это событие и корректно останавливать или перезапускать потоковую передачу. Плата за токены, созданные во время неудачных потоковых ответов, не взимается.
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 |
|---|---|
.c |
text/x-c |
.cs |
text/x-csharp |
.cpp |
text/x-c++ |
.csv |
text/csv |
.doc |
application/msword |
.docx |
application/vnd.openxmlformats-officedocument.wordprocessingml.document |
.html |
text/html |
.java |
text/x-java |
.json |
application/json |
.md |
text/markdown |
.pdf |
application/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 |
text/plain |
.css |
text/css |
.js |
text/JavaScript |
.sh |
application/x-sh |
.ts |
application/TypeScript |
.csv |
application/csv |
.jpeg |
image/jpeg |
.jpg |
image/jpeg |
.gif |
image/gif |
.pkl |
application/octet-stream |
.png |
image/png |
.tar |
application/x-tar |
.xlsx |
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet |
.xml |
application/xml или text/xml |
.zip |
application/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-файлы в качестве входных данных.
В настоящее время
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-файл. В настоящее время 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"
}],
)
Проверки подлинности
Важно
- Клиент MCP в API ответов требует TLS 1.2 или более поздней версии.
- Взаимное TLS (mTLS) в настоящее время не поддерживается.
- теги службы Azure в настоящее время не поддерживаются для трафика клиента MCP.
В отличие от сервера GITHUB MCP, большинство удаленных серверов MCP требуют проверки подлинности. Средство MCP в API ответов поддерживает пользовательские заголовки, что позволяет безопасно подключаться к этим серверам с помощью необходимой схемы проверки подлинности.
Вы можете указать заголовки, такие как ключи API, маркеры доступа OAuth или другие учетные данные непосредственно в запросе. Наиболее часто используемый заголовок — это 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 для проверки состояния фонового ответа. Продолжайте опрос, пока состояние находится в очереди или в процессе выполнения. Когда ответ достигнет окончательного (конечного) состояния, он будет доступен для извлечения.
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_contentinclude в параметр в запросе. Это гарантирует, что ответ включает зашифрованную версию следа рассуждений, который можно передать в последующих запросах.
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 в формате разговора.
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 ответов в настоящее время доступен в следующих регионах:
- австралия восток
- бразилияюг
- canadacentral
- canadaeast
- eastus
- eastus2
- francecentral
- germanywestcentral
- италия север
- japaneast
- koreacentral
- northcentralus
- norwayeast
- Центральная Польша
- southafricanorth
- southcentralus
- Юго-Восточная Азия
- южная индия
- spaincentral
- Швецияцентр
- свицерланднорт
- uaenorth
- uksouth
- westus
- westus3
Поддержка модели
-
gpt-chat-latest(Версия:2026-05-05) -
gpt-5.5(Версия:2026-04-24) -
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для отправки файла. - Проблемы с производительностью при использовании фонового режима с потоковой передачей. Ожидается, что проблема будет решена в ближайшее время.
Справочная документация
Устранение неполадок
-
401/403. Если вы используете Microsoft Entra ID, убедитесь, что токен соответствует области действия для
https://ai.azure.com/.default. Если вы используете ключ API, убедитесь, что вы используете правильный ключ для ресурса. -
404. Подтверждение
modelсоответствия имени развертывания.