Структурированный вывод JSON (response_format) через AI Gateway
Как получить от модели валидный JSON: параметр response_format, json_schema и json_object, валидация результата и пример кода на Python — с оплатой в рублях.
Структурированный вывод заставляет модель отвечать не свободным текстом, а валидным JSON по заданной схеме. Это убирает хрупкий парсинг «выцарапывания» данных из ответа: результат сразу готов к разбору и подстановке в код. В AI Gateway это работает через стандартный параметр response_format, как в оригинальном API OpenAI.
Как это работает
Есть два режима. response_format: {type: "json_object"} гарантирует синтаксически валидный JSON, но структуру нужно описать в промпте. response_format: {type: "json_schema", …} дополнительно привязывает ответ к вашей JSON Schema — модель обязана вернуть объект ровно с нужными полями и типами. Второй режим надёжнее, когда важна строгая форма данных.
from openai import OpenAI
import json
client = OpenAI(
base_url="https://ai-gatewey.ru/v1",
api_key="sk-aigate-ваш_ключ",
)
schema = {
"name": "product",
"schema": {
"type": "object",
"properties": {
"title": {"type": "string"},
"price": {"type": "number"},
"in_stock": {"type": "boolean"},
},
"required": ["title", "price", "in_stock"],
"additionalProperties": False,
},
}
resp = client.chat.completions.create(
model="openai/gpt-5.4-mini",
messages=[{"role": "user", "content": "Опиши товар: беспроводные наушники за 4990 рублей, в наличии"}],
response_format={"type": "json_schema", "json_schema": schema},
)
data = json.loads(resp.choices[0].message.content)
print(data["title"], data["price"], data["in_stock"])Сценарии
- Извлечение данных — вытащить из текста сущности (имя, дата, сумма, статус) сразу в готовый объект.
- Классификация — вернуть категорию и уверенность строгими полями, а не разбирать формулировку из прозы.
- Интеграции и пайплайны — ответ модели уходит прямо в БД, очередь или следующий сервис без ручной обработки.
- Формы и карточки — заполнение полей интерфейса значениями, которые модель извлекла из свободного ввода пользователя.
json_object гарантирует лишь корректный синтаксис, но не набор полей и не бизнес-ограничения.Частые вопросы
Какие модели поддерживают структурированный вывод?
Модели с поддержкой JSON-режима — их актуальный список собирается живьём ниже по каталогу. На карточке в каталоге такие модели помечены соответствующим бейджем.
Чем json_schema лучше json_object?
json_object гарантирует только валидный синтаксис JSON, а json_schema дополнительно связывает ответ с вашей схемой — нужные поля, типы и обязательность. Для строгих контрактов данных выбирайте json_schema.
Нужно ли всё равно писать про формат в промпте?
Для json_object — да, опишите желаемую структуру в тексте запроса. Для json_schema структуру задаёт сама схема, но короткая подсказка в промпте о смысле полей повышает качество.
Получите строгий JSON от модели
Получить ключМодели с этой возможностью
Живой срез каталога — цены за 1 млн токенов:
| Модель | Цена, ₽/1М | Контекст |
|---|---|---|
| Anthropic: Claude Opus 4.8 | 3 919 | 1M |
| Mistral: Mistral Medium 3.5 | 1 176 | 262K |
| xAI: Grok 4.3 | 392 | 1M |
| OpenAI: GPT-5.5 | 4 703 | 1.1M |
| Google: Gemini 3.1 Pro Preview | 1 881 | 1.0M |
| Qwen: Qwen3 Max | 611 | 262K |
| Meta: Llama 4 Maverick | 94 | 1.0M |
| DeepSeek: DeepSeek V3 | 125 | 128K |
| Anthropic: Claude Sonnet 5 | 1 568 | 1M |
| Qwen: Qwen3.6 Plus | 306 | 1M |
| Qwen: Qwen3.7 Max | 588 | 1M |
| Google: Nano Banana 2 (Gemini 3.1 Flash Image) | 470 | 131K |