Цепочка промптов означает решение задачи несколькими промптами подряд, где вывод одного становится вводом следующего. Декомпозиция промптов — это предшествующий этап проектирования: решение о том, как разбить задачу. Вместе они — самый надёжный способ заставить модель сделать что-то сложное.
Почему один большой промпт не работает
Промпт, который просит модель за один проход извлечь, проанализировать, принять решение и написать текст, имеет несколько проблем:
- Инструкции конкурируют. Чем больше просит промпт, тем вероятнее, что какое-то требование будет упущено.
- Нельзя понять, какая часть дала сбой. Неверный итоговый ответ может быть результатом любого шага.
- Нельзя тестировать части. До самого конца не на чем проверять утверждения.
- Каждый вызов оплачивает каждую инструкцию, даже не относящуюся к этому вводу.
Цепочка даёт каждому шагу одну работу, чёткий ввод и проверяемый вывод.
Как разложить задачу
Спросите, что делал бы аккуратный человек и в каком порядке, и где он передал бы работу другому. Хорошие места для разбиения — там, где:
- меняется вид работы (чтение, затем оценка, затем письмо);
- промежуточный результат стоит проверки (извлечённые факты до того, как сделаны выводы);
- шаг применяется лишь иногда (переводить, только если текст не на английском);
- разным шагам нужны разные модели (маленькая для классификации, побольше для письма).
Разобранный пример
Задача: ответить на письмо клиента с жалобой.
Шаг 1: извлечение. Небольшая быстрая модель превращает письмо в структурированные факты.
Extract from the email in the tags: order_id, product, the problem in
one sentence, and what the customer is asking for. Return JSON only.
Use null for anything not stated.
<email>
{{email}}
</email>
Шаг 2: решение. Код находит заказ. Промпт применяет политику.
Given the complaint and the order record, choose one action from:
refund, replace, escalate, explain. Give the policy clause that applies.
Return JSON: {"action": string, "clause": string}.
<complaint>{{step1_json}}</complaint>
<order>{{order_record}}</order>
<policy>{{policy}}</policy>
Шаг 3: написание. Третий промпт составляет ответ по решению.
Write a reply to the customer, under 120 words, that states the action
and what happens next. Do not promise anything outside the action.
<action>{{step2_json}}</action>
<customer_name>{{name}}</customer_name>
Каждый шаг можно проверять отдельно. Если ответы обещают не то, смотрите на вывод шага 2 и сразу понимаете, виновато решение или текст.
Передача данных между шагами
Используйте между шагами структурированный вывод. JSON или поля в тегах, а не проза. Тогда следующий промпт и ваш код могут полагаться на форму. См. промпты для структурированного вывода.
Передавайте только то, что нужно следующему шагу. Пересылка всей истории удлиняет последующие промпты и позволяет ранним ошибкам распространяться.
Проверяйте на каждой границе. Проверяйте вывод каждого шага перед использованием. Цепочка без проверки умножает ошибки: пять шагов, каждый из которых верен в 95 % случаев, все вместе верны лишь примерно в 77 % случаев.
Отделяйте всё, что вставляете. Вывод одной модели — недоверенный ввод для следующей. Письмо с жалобой, где сказано «игнорируй свои инструкции», прошло шаг 1 и теперь находится внутри промпта шага 2. Оборачивайте вставляемое содержимое в теги. См. инъекцию в промпт.
Формы цепочек
| Форма | Описание | Пример |
|---|---|---|
| Последовательная | A, затем B, затем C | Извлечь, решить, написать |
| Маршрутизация | Классифицировать, затем выбрать ветку | Вопросы по оплате идут в один промпт, ошибки — в другой |
| Параллельная | Независимые шаги одновременно, затем объединение | Резюмировать 10 документов, затем объединить |
| Создать и проверить | Один промпт создаёт, другой проверяет | Составить черновик, затем раскритиковать по требованиям |
| Цикл | Повторять, пока не выполнится условие | Дорабатывать, пока не пройдёт проверка, с лимитом повторов |
Всегда ограничивайте циклы. Цепочка, которая повторяет бесконечно, — это сбой и счёт.
Цепочки и альтернативы
В сравнении с цепочкой рассуждений. Цепочка рассуждений хранит рассуждение внутри одного ответа. Используйте её, когда шаги заранее неизвестны. Используйте цепочку промптов, когда известны: вы получаете проверяемость и контроль.
В сравнении с агентами. В цепочке порядок определяет ваш код. В агенте — модель. Цепочка дешевле, быстрее и предсказуемее. Выбирайте агента, только когда путь зависит от того, что будет обнаружено по ходу. См. ReAct-промптинг и промпты для ИИ-агентов.
Расходы, за которыми стоит следить
Цепочка делает больше вызовов. Держите её экономной:
- Используйте самую маленькую модель, справляющуюся с каждым шагом.
- Выполняйте независимые шаги параллельно, чтобы снизить задержку.
- Пропускайте шаги, не относящиеся к этому вводу.
- Кешируйте постоянную часть каждого промпта там, где провайдер это поддерживает. См. оптимизацию токенов.
Следите за здоровьем каждого звена
В цепочке несколько промптов, которые нужно поддерживать, поэтому проблему в одном из них легко упустить. Храните каждый в виде файла и проверяйте все при каждом изменении. Проверка промптов в CI проваливает pull request, когда любой промпт в репозитории опускается ниже вашей планки качества или превышает бюджет токенов, а анализатор промптов сообщает о переменных без разделителей, которые важнее всего там, где один шаг питает следующий.