responses — второй формат запросов openai, кроме chat/completions. он принимается на эндпоинте /v1/responses, с тем же адресом и тем же ключом.
чем отличается от chat/completions
отличается структура запроса и ответа, набор доступных моделей тот же.
/v1/chat/completions | /v1/responses | |
|---|---|---|
| текст запроса | массив messages | поле input |
| инструкция модели | сообщение с ролью system | поле instructions |
| текст ответа | choices[0].message.content | массив output |
| ограничение длины ответа | max_tokens / max_completion_tokens | max_output_tokens |
запрос
поле input принимает либо строку, либо массив сообщений — как messages в chat/completions.
curl "https://api.airakurs.ru/v1/responses" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <КЛЮЧ>" \
-d '{
"model": "openai/gpt-5-mini",
"instructions": "Отвечай коротко.",
"input": "Назови столицу Австралии."
}'from openai import OpenAI
client = OpenAI(api_key="<КЛЮЧ>", base_url="https://api.airakurs.ru/v1")
response = client.responses.create(
model="openai/gpt-5-mini",
instructions="Отвечай коротко.",
input="Назови столицу Австралии.",
)
print(response.output_text)ответ
ответ приходит массивом output: в нём элемент с ролью assistant, внутри которого лежит текст.
{
"output": [
{
"type": "message",
"role": "assistant",
"content": [
{
"type": "output_text",
"text": "Канберра."
}
]
}
]
}
в официальных библиотеках разбирать массив вручную не нужно — готовый текст лежит в output_text.
рядом приходит объект usage с числом токенов: input_tokens, output_tokens и total_tokens.
какие модели доступны
те же, что и на chat/completions — любая текстовая модель каталога, а не только модели openai.
что дальше
- единый api — базовый формат запроса и ответа.
- модели — как устроены идентификаторы.
частые вопросы
что выбрать — chat/completions или responses?
если код пишется с нуля, проще chat/completions: этот формат понимают почти все сторонние библиотеки и инструменты. responses нужен, когда код уже написан под него или когда используются возможности, доступные только в этом формате.
как получить текст ответа?
в официальных библиотеках готовый текст лежит в поле output_text. без библиотеки его нужно взять из первого текстового элемента массива output.
нужно ли передавать переписку целиком?
да. модель не помнит предыдущие обращения, поэтому историю диалога нужно передавать в поле input при каждом запросе.