Глава 9. Сложные промпты с нуля: собираем всё вместе

Вы дошли до финальной главы — пора собрать все приёмы курса в один рабочий шаблон. Ниже — рекомендованная Anthropic структура сложного промпта из десяти элементов. Важно: не каждому промпту нужны все десять. Рабочая стратегия такая: сначала соберите промпт «жирным», со всеми подходящими элементами, добейтесь стабильного результата — и только потом ужимайте и выкидывайте лишнее. Не наоборот.

Для части элементов порядок важен (мы это отметим), для части — нет. Но если просто идти по списку сверху вниз, вы получите хорошую отправную точку почти для любой задачи.

10 элементов сложного промпта

Это главный артефакт всей главы — и, пожалуй, всего курса:

  1. Роль user — диалог в API всегда начинается с user-сообщения (глава 1).
  2. Контекст задачи — кто такой Claude в этом промпте и какая у него общая цель. Лучше всего в самом начале.
  3. Тон — каким голосом отвечать. Нужен не всегда.
  4. Детальные правила — что именно делать, чего не делать, и «запасной выход»: что говорить, если ответа нет. Полезно показать правила живому человеку — понятны ли они без контекста.
  5. Примеры — хотя бы один эталонный ответ в тегах <example></example>. По опыту Anthropic, примеры — самый мощный инструмент для получения нужного поведения; больше примеров — лучше, особенно на граничные случаи.
  6. Входные данные — документы, история диалога, вопрос пользователя. Каждый кусок — в своих XML-тегах. Позиция гибкая.
  7. Непосредственная задача — «напоминание», что сделать прямо сейчас. Работает лучше ближе к концу длинного промпта; вопрос пользователя тоже стоит держать внизу.
  8. Пошаговое мышление — «сначала подумай, потом отвечай» (глава 6). В конце, сразу после непосредственной задачи.
  9. Формат вывода — в какие теги или структуру завернуть ответ. Тоже лучше в конце.
  10. Префилл — начало ответа за Claude, уходит в роль assistant (глава 5).
Квиз 1

Как Anthropic советует работать со структурой из 10 элементов?

Разбор: карьерный коуч Joe

Основной пример главы — контролируемая ролевая игра: Claude играет дружелюбного карьерного коуча по имени Joe на сайте компании AdAstra Careers. Вот как элементы шаблона превращаются в конкретный текст (скелет промпта, входные данные подставляются в теги):

# Элемент 2 — контекст задачи
Ты будешь играть роль AI-карьерного коуча по имени Joe, созданного
компанией AdAstra Careers. Твоя цель — давать пользователям советы
по карьере. Ты отвечаешь пользователям на сайте AdAstra, и они
запутаются, если ты выйдешь из роли Joe.

# Элемент 3 — тон
Держи дружелюбный тон клиентской поддержки.

# Элемент 4 — правила (включая «запасной выход»)
Важные правила взаимодействия:
- Всегда оставайся в роли Joe — AI от AdAstra Careers
- Если не уверен, как ответить, скажи: «Извините, я не понял.
  Не могли бы вы переформулировать вопрос?»
- Если спрашивают не по теме, скажи: «Извините, я Joe и я даю
  советы по карьере. Есть ли у вас карьерный вопрос?»

# Элемент 5 — пример эталонного ответа
Вот пример ответа в стандартном диалоге:
<example>
Customer: Привет, как тебя создали и что ты умеешь?
Joe: Здравствуйте! Меня зовут Joe, меня создала AdAstra Careers,
чтобы давать советы по карьере. Чем могу помочь?
</example>

# Элемент 6 — входные данные
Вот история диалога (между пользователем и тобой) до вопроса.
Она может быть пустой:
<history>{HISTORY}</history>
Вот вопрос пользователя:
<question>{QUESTION}</question>

# Элемент 7 — непосредственная задача
Как ты ответишь на вопрос пользователя?

# Элемент 8 — пошаговость
Сначала обдумай ответ, потом отвечай.

# Элемент 9 — формат вывода
Помести ответ в теги <response></response>.

# Элемент 10 — префилл (уходит в роль assistant)
[Joe] <response>

В историю диалога подставлен прошлый обмен (Joe назвал две профессии для социологов — соцработник и HR-специалист), а вопрос пользователя: «Какая из этих двух карьер требует больше, чем степень бакалавра?» Запускаем — и получаем ответ строго в роли:

user

[весь собранный промпт: роль Joe + правила + пример + история + вопрос про степень бакалавра]

assistant

[Joe] <response> Из этих двух карьер дополнительное образование чаще требуется соцработнику: для самостоятельной практики обычно нужна магистратура и лицензия. В HR же многие роли доступны сразу с бакалавриатом. </response>

Заметьте, как префилл [Joe] <response> сразу «включает» персонажа и формат — Claude остаётся достроить ответ внутри заданных рамок.

Квиз 2

Какой элемент Anthropic называет, пожалуй, самым эффективным инструментом для нужного поведения модели?

Второй пример оригинала — юридический: Claude отвечает на вопрос «Есть ли законы о том, что делать с питомцами во время урагана?» по результатам юридического поиска (три длинных выдержки в <search_results> — про патентные споры в ветеринарии, про ветеринарную стоматологию в Канаде и про законы о животных после урагана Катрина; здесь мы их сокращаем). Чем он интересен — порядок элементов изменён, и это нормально:

  • Контекст задачи ужат до одной строки: «Ты — эксперт-юрист».
  • Данные идут раньше правил: сначала <legal_research> с выдержками, потом примеры формата цитирования (номер источника в квадратных скобках в конце предложения: [3].), потом сам вопрос и правило-«выход»: если данных недостаточно — ответить «Извините, у меня недостаточно информации для ответа».
  • Пошаговость конкретизирована: «Перед ответом выпиши самые релевантные цитаты из исследования в теги <relevant_quotes>» — а префилл <relevant_quotes> заставляет начать именно с этого шага.

Промпт-инжиниринг — это научный метод проб и ошибок: двигайте элементы с гибким порядком, гоняйте тест-кейсы и смотрите, что работает именно для вашей задачи. Единственно верной раскладки нет.

Квиз 3

Зачем в юридическом промпте префилл <relevant_quotes>?

Упражнения

Финальные упражнения — самые «взрослые» в курсе: соберите сложный промпт целиком, сами решая, какие элементы нужны, а какие оставить пустыми.

Упражнение 9.1 — Финансовый бот

Claude должен анализировать налоговый документ и отвечать на вопросы по нему. Входные данные: вопрос пользователя «Сколько времени у меня есть, чтобы подать election по 83(b)?» и длинный фрагмент налогового кодекса США (раздел про передачу собственности за услуги; в подпункте (b)(2) сказано, что election подаётся не позднее 30 дней после передачи — но пользовательский промпт этого знать не должен, пусть найдёт Claude). Соберите промпт по шаблону из десяти элементов и добейтесь точного ответа со ссылкой на документ.

Решение упражненияСначала попробуйте сами — потом сверьтесь
# Контекст задачи
Ты — опытный налоговый консультант. Отвечаешь на вопросы
пользователей, опираясь только на предоставленный текст кодекса.

# Входные данные
Вот фрагмент налогового кодекса:
<tax_code>{TAX_CODE}</tax_code>   # длинный документ — сокращён

# Правила + «выход»
Ответь на вопрос коротко и точно. Если в документе нет ответа,
скажи: «В предоставленном тексте недостаточно информации».

# Вопрос — ближе к концу промпта
<question>{QUESTION}</question>

# Пошаговость
Прежде чем отвечать, выпиши релевантные цитаты из кодекса
в теги <quotes>.

# Формат вывода
Итоговый ответ помести в теги <answer>.

# Префилл (роль assistant)
<quotes>

С таким промптом Claude сначала находит в кодексе пункт (b)(2) — election подаётся «не позднее 30 дней после даты передачи собственности» — и только потом формулирует ответ. Обратите внимание на связку «пошаговость + префилл»: она же спасала нас от галлюцинаций в главе 8.

Упражнение 9.2 — Codebot

Соберите бота-ассистента для кода: он получает фрагмент кода, находит ошибки и предлагает исправления. Решите сами, какие из десяти элементов нужны: роль? тон наставника или строгого ревьюера? примеры формата разбора? правило, что делать с кодом без ошибок? Проверьте на заведомо кривом коде — например, функции с делением на ноль.

Решение упражненияСначала попробуйте сами — потом сверьтесь
# Контекст + тон
Ты — Codebot, доброжелательный ассистент-ревьюер. Помогаешь
находить ошибки в коде и объясняешь их простым языком.

# Правила
- Разбирай только присланный код, ничего не додумывай про проект
- Если ошибок нет — так и скажи, не выдумывай проблемы
- Если прислали не код, ответь: «Я Codebot, пришлите мне код»

# Входные данные
<code>{CODE}</code>

# Непосредственная задача + пошаговость
Найди ошибки и предложи исправления. Сначала пройди по коду
шаг за шагом в тегах <analysis>, затем дай итог.

# Формат вывода
Итог оформи так: список ошибок в <bugs>,
исправленный код в <fixed_code>.

# Префилл
<analysis>

На функции с делением на ноль такой бот сначала трассирует выполнение в <analysis>, находит ZeroDivisionError, а затем выдаёт аккуратный список ошибок и исправленный вариант. Все элементы — из глав курса, ничего нового: в этом и была цель финала.

Что запомнить

  • Сложный промпт — конструктор из ~10 элементов: роль user, контекст, тон, правила, примеры, данные, непосредственная задача, пошаговость, формат, префилл.
  • Контекст — в начало; задачу, пошаговость и формат — в конец; вопрос пользователя — ближе к низу.
  • Примеры — самый мощный отдельный элемент. Правила должны включать «запасной выход» на случай «не знаю».
  • Сначала соберите промпт со всеми нужными элементами, добейтесь стабильности — потом ужимайте.
  • Промпт-инжиниринг — это тест-кейсы и итерации, а не заклинание с первого раза.
Поздравляю — вы прошли весь курс! Девять глав назад промпт был для вас «вопросом в чатик», а теперь вы умеете управлять форматом, ролью, рассуждением, примерами, галлюцинациями и собирать всё это в производственные промпты. Лучший следующий шаг — взять свою реальную задачу и собрать для неё промпт по шаблону из этой главы. Псшш!

Дочитали и сделали упражнения? Зафиксируйте прогресс — отметка сохранится в вашем браузере.

Перевод и адаптация главы «Complex Prompts from Scratch» курса Prompt Engineering Interactive Tutorial © Anthropic, лицензия CC BY-NC 4.0. Перевод: Дарья Воронкина (@aishipuchka). Материал изменён: переведён на русский, примеры и названия моделей актуализированы, длинные документы-примеры сокращены, добавлены квизы. Используется некоммерчески.