Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Используйте API Azure OpenAI Responses для создания многоходовых ответов с сохранением состояния. Он объединяет функции завершения чата и API ассистентов в единую среду. API ответов также поддерживает модель, которая обеспечивает работу computer-use-previewкомпьютера.
Необходимые условия
- Развернутая модель 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 цепочку, не обрезайте вручную.
Поток
- Вызовите
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-файлы в качестве входных данных.
purposeподдержкаuser_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-файл.
purpose поддержка user_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 Responses в беспоcтоянном режиме, установив 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 ответов в настоящее время доступен в следующих регионах:
- australiaeast
- южнаябразилия
- canadacentral
- canadaeast
- eastus
- eastus2
- francecentral
- Германия Западно-Центральная
- Северная Италия
- japaneast
- koreacentral
- northcentralus
- норвегия восток
- polandcentral
- southafricanorth
- southcentralus
- Юго-Восточная Азия
- Южная Индия
- spaincentral
- ЦентральнаяШвеция
- швейцариянорт
- uaenorth
- uksouth
- westus
- westus3
Поддержка модели
-
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соответствует имени вашего развертывания.