Структурированные выходные данные (Structured Outputs)

Структурированные выходные данные (Structured Outputs)

В уроке 6.1 мы освоили JSON как формат ответа. Теперь идём дальше: структурированные выходные данные. Это не просто «JSON вместо текста», а гарантированная, предсказуемая схема ответа, которую можно напрямую использовать в коде.

Проблема «свободного JSON»

Представь: ты просишь модель классифицировать отзывы и возвращать JSON. Ты написал:

Ответь в JSON: {"sentiment": "positive" или "negative"}

На 100 запросах модель возвращает хороший JSON. На 101-м — пишет "positive " с пробелом. Или "Positive" с заглавной. Или "нейтральный" — хотя такого варианта не было. Или вообще пропускает поле.

Это проблема неструктурированного подхода к структурированным данным. Ты попросил JSON — модель дала JSON. Но ты не гарантировал валидность схемы.

Техники обеспечения валидной схемы

1. Ограничение значений (enum)

Явно перечисли допустимые значения:

Ответь JSON с полем "sentiment". Допустимые значения ТОЛЬКО:
"positive", "negative", "neutral".

2. Описание типов данных

Укажи не только имена полей, но и типы:

Ответь JSON с полями:
- "name": строка, только буквы и пробелы.
- "age": число, целое, от 0 до 120.
- "email": строка в формате email или null.
- "tags": массив строк (может быть пустым).

3. Вложенные структуры

Опиши иерархию:

Ответь JSON со следующей структурой:
{
  "order": {
    "id": "строка",
    "date": "дата в формате YYYY-MM-DD",
    "items": [
      {
        "product": "строка",
        "quantity": "целое число > 0",
        "price_per_unit": "число"
      }
    ],
    "total": "число, сумма price_per_unit * quantity по всем items"
  }
}

Модель понимает вложенность и связи между полями (total = сумма).

4. Схема-пример (самый надёжный)

Лучший способ гарантировать структуру — показать пример валидного объекта:

Ответь JSON-объектом со следующей структурой. Вот пример валидного
ответа:

{
  "status": "ok",
  "data": {
    "name": "Иван Петров",
    "skills": ["JavaScript", "Python"],
    "experience_years": 5
  },
  "errors": []
}

Верни такой же объект для запроса: "Анна Смирнова, Java, Kotlin, опыт 3 года".

Пример валидного объекта снимает 95% неопределённости.

Обработка ошибок в структуре

В production-промптах нужно предусмотреть, что модель может не найти данные:

Извлеки имя и телефон из обращения. Ответь JSON:

{
  "name": "строка или null, если имя не найдено",
  "phone": "строка или null, если телефон не найден",
  "confidence": "число от 0 до 1 — насколько ты уверен в извлечённых данных"
}

Поле confidence — метрика, которая позволяет коду решить, доверять ли ответу.

Реальная схема: аналитика обращения клиента

Соберём комплексный пример:

Извлеки информацию из обращения клиента. Ответь СТРОГО по схеме ниже.
Никакого текста вне JSON.

СХЕМА:
{
  "topic": "строка, одна из: доставка, возврат, качество, сайт, другое",
  "is_urgent": "boolean, true если клиент угрожает или требует срочно",
  "sentiment": "строка, одна из: негативная, нейтральная, позитивная",
  "key_details": {
    "order_id": "строка или null",
    "product": "строка или null",
    "issue": "строка, краткое описание проблемы"
  },
  "contact": {
    "email": "строка или null",
    "phone": "строка или null"
  },
  "confidence": "число от 0 до 1"
}

Обращение: "Заказ 98765 не пришёл! Я жду уже 5 дней. Если завтра
не получу — пойду в суд. Мой email: angry@mail.ru"

Выход:

{
  "topic": "доставка",
  "is_urgent": true,
  "sentiment": "негативная",
  "key_details": {
    "order_id": "98765",
    "product": null,
    "issue": "заказ не доставлен в течение 5 дней"
  },
  "contact": {
    "email": "angry@mail.ru",
    "phone": null
  },
  "confidence": 0.95
}

Structured Outputs в веб-интерфейсе

В браузерной версии языковой модели ты вставляешь описание схемы прямо в промпт. Некоторые веб-интерфейсы предоставляют специальный режим «JSON mode» — если он есть, включи его. Это дополнительно гарантирует, что ответ будет валидным JSON.

Проверь себя

Спроектируй JSON-схему для ответа модели, которая извлекает из текста вакансии: название должности, зарплату (мин и макс), город, требования (массив) и является ли вакансия удалённой. Покажи пример валидного объекта.

Итог

  • Structured Outputs — это не просто JSON, а гарантированно валидная схема ответа.
  • Основные техники: enum-ограничения, описание типов, вложенные структуры, пример валидного объекта.
  • Всегда предусматривай null для необязательных полей — лучше null, чем выдуманное значение.
  • Добавляй поле confidence — оно позволяет коду принять решение, доверять ли ответу.
  • В веб-интерфейсе используй JSON mode, если он доступен.

Что дальше

Ты освоил весь арсенал управления выводом: формат, стиль, verbosity и структурированные схемы. В финальном уроке модуля — практика: настроим формат ответа для сквозной задачи от начала до конца.

Попробуйте интерактивную версию

Практические задачи, квизы и AI-наставник — бесплатный старт без карты

Перейти к практике