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 — ошибка про отсутствие поддержки.
  • Схема невалидна — ошибка про схему.