Практика: настройка формата ответа

Практика: настройка формата ответа

В этом уроке соберём все инструменты управления выводом на сквозной задаче. Мы начнём с «обычного» ответа и шаг за шагом превратим его в структурированный, валидный JSON с контролируемым стилем и verbosity.

Задача

Модель получает описание товара в свободной форме и должна заполнить карточку для интернет-магазина. Ответ должен быть JSON с гарантированной структурой.

Шаг 1: От свободного текста к JSON

Вход (без контроля формата):

Опиши товар по этому тексту: "iPhone 15 Pro, 256 ГБ, цвет чёрный,
цена 120 000 рублей, есть в наличии."

Выход (размытый текст):

Это iPhone 15 Pro с памятью 256 ГБ в чёрном цвете. Стоимость
составляет 120 000 рублей. Товар есть в наличии.

Проблемы: не структурировано, цена в тексте, нет чётких полей.

Добавляем JSON:

Извлеки информацию о товаре и ответь JSON:

{
  "name": "...",
  "storage": "...",
  "color": "...",
  "price": ...,
  "in_stock": ...
}

Текст: "iPhone 15 Pro, 256 ГБ, цвет чёрный, цена 120 000 рублей,
есть в наличии."

Выход:

{
  "name": "iPhone 15 Pro",
  "storage": "256 ГБ",
  "color": "чёрный",
  "price": 120000,
  "in_stock": true
}

Уже лучше. Но есть проблемы: цена как число (потеряли «рублей»), in_stock как булево значение (а если будет «ожидается через 3 дня»?).

Шаг 2: Уточняем типы и ограничения

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

СХЕМА:
{
  "name": "строка — название модели",
  "storage_gb": "число — объём памяти в ГБ (только число, без ГБ)",
  "color": "строка — цвет",
  "price_rub": "число — цена в рублях (только число, без текста)",
  "in_stock": "boolean — true если явно указано наличие, false если
   указано отсутствие, null если не указано"
}

Текст: "iPhone 15 Pro, 256 ГБ, цвет чёрный, цена 120 000 рублей,
есть в наличии."

Выход:

{
  "name": "iPhone 15 Pro",
  "storage_gb": 256,
  "color": "чёрный",
  "price_rub": 120000,
  "in_stock": true
}

Теперь схема точнее: storage_gb — число, price_rub — число, in_stock имеет три варианта (true/false/null).

Шаг 3: Добавляем verbosity контроля

Иногда нужно не только извлечь данные, но и добавить описание:

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

СХЕМА:
{
  "name": "строка",
  "storage_gb": "число",
  "color": "строка",
  "price_rub": "число",
  "in_stock": "boolean или null",
  "description_short": "строка — описание для карточки товара,
   ровно одно предложение, не длиннее 80 символов",
  "description_full": "строка — полное описание, 3–4 предложения,
   выделяющее ключевые преимущества, 200–300 символов"
}

Стиль описаний: дружелюбный, как консультант в магазине. Не используй
маркетинговые штампы «революционный», «инновационный», «лучший».

Текст: "iPhone 15 Pro, 256 ГБ, цвет чёрный, цена 120 000 рублей,
есть в наличии."

Выход:

{
  "name": "iPhone 15 Pro",
  "storage_gb": 256,
  "color": "чёрный",
  "price_rub": 120000,
  "in_stock": true,
  "description_short": "iPhone 15 Pro с 256 ГБ памяти в чёрном цвете — мощный и надёжный.",
  "description_full": "iPhone 15 Pro — это профессиональный инструмент в элегантном чёрном корпусе. 256 ГБ памяти хватит для тысяч фото, видео и приложений. Мощный процессор справляется с любыми задачами мгновенно. Доступен прямо сейчас."
}

Шаг 4: Обработка отсутствующих данных

Реальность: не все товары имеют полное описание. Добавим устойчивость:

Извлеки информацию о товаре. Если какого-то поля нет в тексте —
поставь null. НЕ придумывай значения.

СХЕМА: (та же)

Текст: "Ноутбук б/у, работает нормально, торг."

Выход:

{
  "name": "Ноутбук б/у",
  "storage_gb": null,
  "color": null,
  "price_rub": null,
  "in_stock": null,
  "description_short": "Ноутбук б/у в рабочем состоянии, возможен торг.",
  "description_full": "Ноутбук бывший в употреблении, полностью исправен. Продавец открыт к переговорам о цене. Для уточнения деталей свяжитесь с продавцом."
}

Важно: модель не придумала бренд или характеристики — то, чего не было в тексте, получило null.

Шаг 5: Итоговый промпт

Собираем всё:

Извлеки информацию о товаре из описания. Ответь СТРОГО по схеме.
Никакого текста вне JSON. Если данных нет — ставь null, не придумывай.

СХЕМА:
{
  "name": "строка — название",
  "storage_gb": "число — ГБ, только цифра, или null",
  "color": "строка или null",
  "price_rub": "число — цена в рублях, только цифра, или null",
  "in_stock": "true/false если указано явно, иначе null",
  "description_short": "строка — ровно 1 предложение до 80 символов",
  "description_full": "строка — 3–4 предложения, 200–300 символов"
}

ПРАВИЛА:
- Описания: дружелюбный тон, как консультант в магазине.
- Без штампов: «революционный», «инновационный», «лучший».
- Если ТОВАР не указан в тексте вообще — верни {"error": "нет товара"}.

Текст: {{product_description}}

Проверь себя

Возьми итоговый промпт из шага 5 и протестируй на трёх текстах: а) полное описание со всеми данными, б) минимальное описание из 2 слов, в) текст, в котором вообще нет товара. Для каждого — какой JSON ожидается?

Итог

  • Управление выводом — это слоёный процесс: формат → типы → ограничения → verbosity → обработка краевых случаев.
  • Каждый слой добавляет предсказуемости и надёжности.
  • Схема с null для отсутствующих данных надёжнее, чем схема, где модель вынуждена придумывать.
  • Итоговый промпт — это production-ready шаблон: параметризован ({{product_description}}), с чёткой схемой и правилами обработки ошибок.

Что дальше

Ты освоил управление выводом. Модель возвращает ответ именно в том виде, который тебе нужен. Теперь поднимем планку качества ответа: научимся просить модель «рассуждать шаг за шагом» — техника Chain of Thought. Она особенно полезна для сложных задач, где первый ответ модели часто бывает неверным.

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

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

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