Практика: структурирование сложного промпта

Практика: структурирование сложного промпта

В этом уроке мы пройдём полный путь: возьмём сложную бизнес-задачу и построим для неё структурированный промпт с использованием разделителей и XML-тегов. Ты увидишь, как «рыхлый» запрос превращается в инженерно точный инструмент.

Задача

Компания получает десятки писем от клиентов. Нужно автоматически извлекать из каждого письма: тему (одна из 5 категорий), суть обращения (одно предложение), контактные данные (email и/или телефон) и срочность (высокая/средняя/низкая). Письма на русском, часто с опечатками и в свободной форме.

Шаг 1: Пишем zero-shot версию

Первый набросок — сплошным текстом:

Извлеки из письма тему, суть, контакты и срочность. Тема — одна из:
«доставка», «возврат», «качество», «сайт», «другое». Контакты —
email или телефон. Срочность — высокая, средняя или низкая.
Письмо: "Здравствуйте! Заказ №12345 не пришёл уже неделю! Когда
будет доставка? Мой телефон +79001234567. Это срочно!!!"

Проблемы: инструкции смешаны с данными, категории тем перечислены в строку, нет формата ответа. Модель справится, но есть риск: перепутает email клиента с email из подписи письма; не поймёт, что «неделю» = срочность «высокая».

Шаг 2: Добавляем секции

Разделим на логические блоки:

<task>Извлеки из письма клиента ключевую информацию.</task>

<categories>
- «доставка» — проблемы с доставкой заказа.
- «возврат» — желание вернуть товар или деньги.
- «качество» — товар сломан/бракован/не соответствует описанию.
- «сайт» — проблемы с сайтом или приложением.
- «другое» — всё, что не подходит под первые 4 категории.
</categories>

<urgency_rules>
- Высокая: клиент угрожает обращением в суд/Роспотребнадзор, прошло
  больше 5 дней без ответа, товар испорчен/опасен.
- Средняя: клиент недоволен, но без угроз; сроки поджимают.
- Низкая: вопрос общего характера, благодарность, предложение.
</urgency_rules>

<output_format>
{
  "topic": "одна из категорий",
  "summary": "суть обращения, одно предложение",
  "email": "email или null",
  "phone": "телефон в формате +7... или null",
  "urgency": "высокая / средняя / низкая"
}
</output_format>

Теперь у модели есть: определение каждой категории, правила определения срочности, точная JSON-схема ответа.

Шаг 3: Добавляем примеры (few-shot + структура)

<examples>
  <example>
    <input>
    Здравствуйте! Заказ №12345 не пришёл уже неделю! Когда будет
    доставка? Мой телефон +79001234567. Это срочно!!!
    </input>
    <output>
    {
      "topic": "доставка",
      "summary": "Заказ №12345 не доставлен через неделю после заказа",
      "email": null,
      "phone": "+79001234567",
      "urgency": "высокая"
    }
    </output>
  </example>

  <example>
    <input>
    Добрый день. Я купила у вас телефон, а он не включается.
    Что мне делать? Верните деньги! Меня зовут Анна, anna@mail.ru
    </input>
    <output>
    {
      "topic": "качество",
      "summary": "Купленный телефон не включается, клиентка требует возврат",
      "email": "anna@mail.ru",
      "phone": null,
      "urgency": "высокая"
    }
    </output>
  </example>

  <example>
    <input>
    Подскажите пожалуйста, вы работаете 1 мая?
    </input>
    <output>
    {
      "topic": "другое",
      "summary": "Вопрос о графике работы в праздничный день",
      "email": null,
      "phone": null,
      "urgency": "низкая"
    }
    </output>
  </example>
</examples>

Примеры показывают модели: как обрабатывать эмоциональные письма, как извлекать телефон vs email, как отличать «другое» от остальных категорий.

Шаг 4: Собираем итоговый промпт

<task>
Ты — сотрудник службы поддержки. Извлеки из письма клиента ключевую
информацию для регистрации обращения в CRM.
</task>

<categories>
- «доставка» — проблемы с доставкой заказа.
- «возврат» — желание вернуть товар или деньги.
- «качество» — товар сломан, бракован или не соответствует описанию.
- «сайт» — проблемы с работой сайта или мобильного приложения.
- «другое» — всё, что не подходит под первые 4 категории.
</categories>

<urgency_rules>
- Высокая: клиент угрожает обращением в контролирующие органы,
  товар испорчен или опасен, прошло более 5 дней без ответа.
- Средняя: клиент недоволен, но без угроз; сроки ограничены.
- Низкая: общий вопрос, благодарность, предложение, уточнение.
</urgency_rules>

<output_format>
Ответ должен быть строго в формате JSON без дополнительного текста:
{
  "topic": "одна из категорий",
  "summary": "суть обращения, одно предложение",
  "email": "email или null",
  "phone": "телефон в формате +7... или null",
  "urgency": "высокая / средняя / низкая"
}
</output_format>

<examples>
  (примеры из шага 3)
</examples>

<query>
<input>Здравствуйте, хочу оформить возврат кроссовок — они мне
велики. Заказ №56789. Моя почта: ivan@mail.ru. Спасибо!</input>
</query>

Выход модели:

{
  "topic": "возврат",
  "summary": "Клиент хочет вернуть кроссовки из заказа №56789 — не подошёл размер",
  "email": "ivan@mail.ru",
  "phone": null,
  "urgency": "средняя"
}

Точно, структурированно, готово к загрузке в CRM.

Что дала структура

АспектБез структурыСо структурой
Определение категорииМодель гадает, что значит «качество»Чёткое описание каждой категории
Срочность«Это срочно!!!» → высокая (угадала)Правила: угрозы, сроки, опасность
Формат ответаТекст (нужно парсить)JSON — сразу в систему
ПримерыОтсутствуют3 примера на разные категории
Отделение данныхПисьмо в той же строкеТег <query> с <input>

Проверь себя

Дана задача: модель получает описание товара (свободный текст) и должна заполнить карточку для интернет-магазина (название, цена, характеристики списком). Спроектируй структуру промпта: какие секции, какие теги, нужны ли примеры.

Итог

  • Сложный промпт собирается слоями: задача → секции → правила → формат → примеры → запрос.
  • Структура превращает «рыхлый» текст в инженерный инструмент с предсказуемым поведением.
  • Комбинируй разделители и XML-теги: теги для вложенных структур, разделители для простых границ.
  • Хорошо структурированный промпт легко читать, тестировать и переиспользовать через месяц.

Что дальше

Ты научился структурировать промпты. Теперь перейдём к особому типу инструкций, который задаёт тон всему общению с моделью — системным промптам и ролям. Один раз настроил роль — и модель ведёт себя нужным образом без повторения инструкций в каждом сообщении.

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

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

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