Структурированный вывод (Structured Outputs)
Принудительный вывод в формате JSON через response_format. Два режима: json_object (любой JSON) и json_schema (строгое соответствие схеме). Примеры на curl и Python.
Параметр response_format заставляет модель вернуть корректный JSON. Поддерживается двумя режимами.
Режим json_object
Модель гарантирует, что вывод является валидным JSON. Структуру вы определяете в системном промпте.
curl https://plusvibeapi.ru/v1/chat/completions \
-H "Authorization: Bearer $PLUSVIBE_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.6-luna",
"response_format": { "type": "json_object" },
"messages": [
{"role": "system", "content": "Ответь JSON с полями: name (string), score (number)."},
{"role": "user", "content": "Оцени ответ: очень хорошо"}
]
}'Режим json_schema
Строгое соответствие JSON Schema — модель заполняет именно указанные поля. Поддерживается моделями GPT-5.x и совместимыми.
curl https://plusvibeapi.ru/v1/chat/completions \
-H "Authorization: Bearer $PLUSVIBE_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.6-luna",
"response_format": {
"type": "json_schema",
"json_schema": {
"name": "review",
"strict": true,
"schema": {
"type": "object",
"properties": {
"name": { "type": "string" },
"score": { "type": "number", "minimum": 1, "maximum": 10 },
"summary": { "type": "string" }
},
"required": ["name", "score", "summary"],
"additionalProperties": false
}
}
},
"messages": [
{"role": "user", "content": "Оцени продукт: быстро доставили, упаковка аккуратная"}
]
}'С
strict: true шлюз направляет запрос только на те варианты модели, которые эту схему действительно соблюдают, и делает это на каждой попытке — включая переключение на резервного поставщика. Если ни один подходящий вариант сейчас недоступен, вы получите явную ошибку structured_output_unsupported, а не обычный текст вместо JSON. Эта защита построена на замерах и покрывает только те каналы, которые мы измерили: на непроверенном канале поставщик может схему молча проигнорировать.Не все модели одинаково хорошо держат JSON — проверьте свою. Замер 12.09.2026 на
deepseek-v4-flash-0731, по 10 вызовов на клетку: json_object распарсился 10/10 на каналах :cxa и :cxbc и 8/10 на :network, а строгий json_schema — 0/10 на обоих каналах (:cxa отвечает 400, :cxbc отдаёт 200 с обычным текстом) и 3/10 на :network. У самой DeepSeek режима json_schema нет — используйте json_object, а если нужна ровно одна форма ответа, вызов функции через tools + tool_choice дал 10/10 на всех каналах. Цифры по каждому каналу — в поле structuredOutput у вариантов в GET /v1/model-capabilities. Это разовый замер с датой (measurement: "point-in-time"), а не обещание: поставщик за каналом может измениться, и мы не перезамеряем по расписанию.Пример ответа
{
"id": "chatcmpl-...",
"choices": [{
"message": {
"role": "assistant",
"content": "{\"name\":\"товар X\",\"score\":9,\"summary\":\"Быстро и удобно\"}"
},
"finish_reason": "stop"
}],
"usage": { "prompt_tokens": 42, "completion_tokens": 18, "total_tokens": 60 }
}