Техники

Цепочки промптов и декомпозиция промптов

Цепочка промптов разбивает сложную задачу на последовательность простых промптов. Как разложить задачу, передавать данные между шагами и обрабатывать ошибки в цепочке.

  • Автор: Vijayraj Palanisamy
  • Обновлено
  • 4 мин чтения

Перевод английского оригинала. Код, промпты и вывод моделей оставлены на английском.

Цепочка промптов означает решение задачи несколькими промптами подряд, где вывод одного становится вводом следующего. Декомпозиция промптов — это предшествующий этап проектирования: решение о том, как разбить задачу. Вместе они — самый надёжный способ заставить модель сделать что-то сложное.

Почему один большой промпт не работает

Промпт, который просит модель за один проход извлечь, проанализировать, принять решение и написать текст, имеет несколько проблем:

  • Инструкции конкурируют. Чем больше просит промпт, тем вероятнее, что какое-то требование будет упущено.
  • Нельзя понять, какая часть дала сбой. Неверный итоговый ответ может быть результатом любого шага.
  • Нельзя тестировать части. До самого конца не на чем проверять утверждения.
  • Каждый вызов оплачивает каждую инструкцию, даже не относящуюся к этому вводу.

Цепочка даёт каждому шагу одну работу, чёткий ввод и проверяемый вывод.

Как разложить задачу

Спросите, что делал бы аккуратный человек и в каком порядке, и где он передал бы работу другому. Хорошие места для разбиения — там, где:

  • меняется вид работы (чтение, затем оценка, затем письмо);
  • промежуточный результат стоит проверки (извлечённые факты до того, как сделаны выводы);
  • шаг применяется лишь иногда (переводить, только если текст не на английском);
  • разным шагам нужны разные модели (маленькая для классификации, побольше для письма).

Разобранный пример

Задача: ответить на письмо клиента с жалобой.

Шаг 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, когда любой промпт в репозитории опускается ниже вашей планки качества или превышает бюджет токенов, а анализатор промптов сообщает о переменных без разделителей, которые важнее всего там, где один шаг питает следующий.

Применить на практике

Попробуйте: анализатор промптов

Находит неоднозначности, недостающий контекст, противоречия и лишние токены в любом промпте. Бесплатно, детерминированно и без аккаунта.

Связанные инструменты PromptFlowEngine

Ещё по теме «техники»

Все руководства по промпт-инжинирингу