API
Структурированный вывод
response_format с type: json_schema заставляет модель ответить JSON по вашей схеме. Так проще парсить ответ и меньше выдуманных полей.
Работает в /chat/completions и /responses. Есть не у всех моделей — смотрите страницу модели. Если модель или провайдер схему не умеет, запрос вернёт ошибку.
Схема
JSON
{
"type": "json_schema",
"json_schema": {
"name": "weather",
"strict": true,
"schema": {
"type": "object",
"properties": {
"city": { "type": "string", "description": "Город" },
"temp_c": { "type": "number", "description": "Температура, °C" },
"conditions": { "type": "string", "description": "Кратко про погоду" }
},
"required": ["city", "temp_c", "conditions"],
"additionalProperties": false
}
}
}content ответа — строка JSON:
JSON
{
"city": "Лондон",
"temp_c": 18,
"conditions": "Переменная облачность"
}curl https://api.aitunnel.ru/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-aitunnel-xxx" \
-d '{
"model": "gpt-5.4",
"messages": [
{ "role": "user", "content": "Какая погода в Лондоне? Ответь по схеме." }
],
"response_format": {
"type": "json_schema",
"json_schema": {
"name": "weather",
"strict": true,
"schema": {
"type": "object",
"properties": {
"city": { "type": "string", "description": "Город" },
"temp_c": { "type": "number", "description": "Температура, °C" },
"conditions": { "type": "string", "description": "Кратко про погоду" }
},
"required": ["city", "temp_c", "conditions"],
"additionalProperties": false
}
}
}
}'Как писать схему
- Ставьте
strict: true. На части провайдеров это жёсткая проверка, на других — сильная подсказка: точное совпадение не гарантировано на каждом эндпоинте. - Пишите
descriptionу полей — модель ориентируется на них. - Перечисляйте все ключи в
requiredи ставьтеadditionalProperties: false. - Строгий режим может запрещать часть конструкций JSON Schema. Если запрос падает на схеме — упростите её.
Слабее, чем схема: { "type": "json_object" } — «просто JSON», без полей.
Стриминг
stream: true вместе со схемой отдаёт частичный JSON. Целый объект собирается, когда стрим закончился.
Ошибки
- Модель не умеет structured outputs — ошибка про отсутствие поддержки.
- Схема невалидна — ошибка про схему.