Plan-and-Solve: план решения задачи — это приём промптинга, при котором модель сначала формулирует план действий, а затем выполняет расчёт по этому плану. Метод описан в работе Plan-and-Solve Prompting: Improving Zero-Shot Chain-of-Thought Reasoning by Large Language Models, код которой опубликован в репозитории AGI-Edgerunners. Ниже — постановка из первичного исследования, готовый промпт и учебный эталон с проверкой.
Исходная постановка метода
Авторы работы Plan-and-Solve Prompting представили её как код к статье ACL 2023, опубликованный в репозитории AGI-Edgerunners на GitHub. В README проекта приведены идентификаторы промптов: 101 — это базовый CoT с фразой «Let’s think step by step», 201 — это PS, а 301–307 — варианты PS+. Различие между PS и PS+ видно прямо в триггерных фразах: PS просит понять задачу и составить план, после чего выполнить его шаг за шагом. PS+ добавляет к этому извлечение переменных и их числовых значений, расчёт промежуточных величин и требование показать ответ.
Исходная постановка отделяет два этапа: планирование и решение. План задаёт последовательность действий, а решение наполняет её числами. Авторы добавили метод в ядро библиотеки LangChain под именем Plan-and-Execute, о чём сказано в том же README. Это подтверждает, что схема вышла за пределы одной статьи и используется как строительный блок агентов. Для читателя важен сам принцип: сначала структура шагов, затем вычисления внутри неё.
В README приведены и команды запуска: скрипт main.py принимает prompt_id, dataset, engine и learning_type. Для ускорения предусмотрен main_threads.py с несколькими ключами API. Эти команды относятся к исследовательскому коду авторов и требуют собственного ключа OpenAI API, который кладётся в файл apikeys.json. Ключ — секрет: его не выводят в терминал и не публикуют.
Метод исследования и бытовое название
Название «план и решение» встречается в бытовой речи как общий совет: составь план и действуй. Исследовательский метод Plan-and-Solve — это конкретный протокол с фиксированной формулировкой триггера и двумя фазами. В README проекта PS-триггер звучит как просьба понять задачу, составить план решения, а затем выполнить план шаг за шагом. Бытовой совет не задаёт ни порядка фаз, ни требования извлекать переменные.
Различие проявляется в деталях. PS+ требует выписать переменные и их числовые значения, посчитать промежуточные величины и показать ответ. Бытовая версия «сначала подумай, потом делай» таких требований не содержит. В практической работе это означает: если вы просто пишете модели «составь план и реши», вы получаете свободную форму. Если вы воспроизводите PS+, вы получаете структуру с явными промежуточными числами, которую проще проверять.
Ещё одно расхождение — с внутренней цепочкой мыслей модели. Plan-and-Solve — это внешний протокол промпта: вы задаёте фазы в тексте запроса. Он не равен запросу скрытых рассуждений модели и не требует доступа к ним. Читатель управляет тем, что видит в ответе: план, таблицу величин, промежуточные числа, финальный ответ.
Готовый промпт для учебной задачи
Промпт ниже — самостоятельная формулировка под конкретную задачу: 47 деталей, коробки по 6 деталей, 9 пустых коробок, перевозка одной заполненной коробки за условные 30 рублей. Скопируйте блок целиком.
47 деталей нужно разложить по коробкам вместимостью 6 деталей. Пустых коробок 9. Перевозка одной заполненной коробки стоит условные 30 рублей. Найди минимальное количество заполненных коробок, число неиспользованных коробок и стоимость перевозки. Раздели ответ на краткий план, таблицу входных величин, проверяемые промежуточные числа и финальный ответ. Сначала перечисли условия расчёта, затем выполни его. Не придумывай скидки или другой способ доставки. Проверь, что найденной вместимости достаточно и запас коробок не превышен.
Под себя меняйте числа и предметную область: [количество деталей], [вместимость коробки], [запас коробок], [цена перевозки]. Структурная часть — план, таблица величин, промежуточные числа, финальный ответ, проверка вместимости — остаётся неизменной, потому что именно она воспроизводит схему PS+.
Вариации той же задачи, если нужен другой вход:
- Заменить единицу:
[литры]вместо деталей,[бочки]вместо коробок. - Добавить ограничение:
[не более N рейсов],[грузовик берёт M коробок]. - Сменить вопрос: найти не стоимость, а
[число рейсов]или[остаток деталей]. - Убрать запас: считать только минимум коробок без ограничения на 9.
- Добавить проверку:
[сравни два варианта округления]и объясни выбор.
Полный учебный вход и эталон
Учебный вход задан полностью: 47 деталей, вместимость 6, запас 9 коробок, цена 30 рублей за заполненную коробку. Эталон считается так. Целых коробок: 47 = 7×6 + 5, то есть 7 полных коробок и остаток 5 деталей. Остаток требует ещё одну коробку, значит минимум 8 заполненных коробок. Из 9 доступных одна останется неиспользованной. Перевозка: 8×30 = 240 рублей. Проверка вместимости: 8×6 = 48, а 48 ≥ 47, значит места хватает.
| Величина | Значение | Как получено |
|---|---|---|
| Деталей всего | 47 | условие |
| Вместимость коробки | 6 | условие |
| Полных коробок | 7 | 47 = 7×6 + 5 |
| Остаток деталей | 5 | 47 − 42 |
| Заполненных коробок | 8 | 7 + 1 на остаток |
| Неиспользованных коробок | 1 | 9 − 8 |
| Стоимость перевозки | 240 | 8×30 |
| Ёмкость восьми коробок | 48 | 8×6 |
План решения выглядит так: вычислить целые коробки и остаток, округлить число коробок вверх при остатке, сверить запас из 9 коробок, умножить число заполненных коробок на цену. Этот эталон — самостоятельный учебный артефакт, рассчитанный вручную. Ответ сервиса редакция не измеряла. Числа взяты как условный вход для тренировки проверки.
Правило проверки результата
Проверка идёт по четырём условиям. Первое: вместимость найденного числа коробок не меньше 47. Второе: число заполненных коробок не превышает запас 9. Третье: стоимость равна числу заполненных коробок, умноженному на 30. Четвёртое: на одну коробку меньше уже недостаточно. Для эталона 8 коробок дают 48 мест, а 7 дают только 42. Ответ принимается, когда выполнены все четыре условия.
Порядок проверки удобно вести от чисел к смыслу. Сначала пересчитайте промежуточные величины: 7 полных коробок, остаток 5, итог 8. Затем сверьте запас: 8 не больше 9, одна коробка свободна. Потом пересчитайте стоимость: 8×30 = 240. Если хотя бы одно число расходится, ответ негоден, даже когда финальная сумма выглядит правдоподобно.
Отдельно проверяйте, не появились ли в ответе условия, которых не было во входе. Скидка, другой способ доставки, изменение вместимости — всё это признаки того, что модель дополнила задачу. Промпт прямо запрещает такие добавления, и проверка возвращает ответ к исходным условиям.
Отрицательный случай и ограничения
Отрицательный вариант: 7 коробок. Он даёт 7×6 = 42 места, а 42 меньше 47, поэтому негоден. При этом стоимость 7×30 = 210 посчитана арифметически верно. Этот случай показывает главное ограничение: правильная арифметика внутри неверного плана не спасает ответ. Ошибка возникает при выборе числа коробок; умножение выполнено верно.
Ограничения метода связаны с классами ошибок, которые разбирает исходная работа: пропущенный шаг, ошибка в вычислении, смысловая ошибка. План помогает против пропущенного шага, потому что задаёт последовательность. Против арифметической ошибки план сам по себе не помогает — нужна проверка промежуточных чисел. Против смысловой ошибки помогает явное перечисление условий, но и оно не даёт гарантии.
Есть и обратная сторона: на простом запросе написание плана увеличивает объём ответа и время чтения, не добавляя полезной структуры. План не несёт гарантии правильности. Если задача решается в одно действие, протокол из двух фаз может оказаться лишним.
Что проверить перед применением
Метод полезен, когда задача содержит несколько шагов и промежуточные величины, которые можно пересчитать. Разложение по коробкам, расчёт рейсов, распределение бюджета по статьям — здесь план отделяет выбор структуры от арифметики, и ошибку видно на конкретном шаге.
Проверьте промежуточные числа, запас коробок, отсутствие добавленных условий и минимальность найденного количества. Для минимальности убедитесь, что уменьшение числа коробок на одну лишает нужной вместимости. Все проверки выполняются вручную по условию и эталону.
Исторические результаты исходной работы получены на модели того времени, и переносить их на современные модели нельзя. Схема PS+ организует ответ, а точность требует отдельной проверки. Читатель получает структуру и правило проверки, а качество конкретного ответа подтверждает пересчётом.
Частые вопросы
Что такое Plan-and-Solve простыми словами?
Это приём промптинга из двух фаз: модель сначала составляет план решения, затем выполняет расчёт по этому плану. Вариант PS+ дополнительно требует выписать переменные, посчитать промежуточные числа и показать ответ. Метод описан в работе ACL 2023, код опубликован в репозитории AGI-Edgerunners.
Чем PS отличается от PS+?
PS просит понять задачу, составить план и выполнить его шаг за шагом. PS+ добавляет извлечение переменных и их числовых значений, расчёт промежуточных величин и требование показать ответ. В README проекта PS обозначен идентификатором 201, а варианты PS+ — 301–307.
Где взять исходную статью и код?
Статья называется Plan-and-Solve Prompting: Improving Zero-Shot Chain-of-Thought Reasoning by Large Language Models, её код лежит в репозитории AGI-Edgerunners на GitHub. Там же приведены триггерные фразы и команды запуска. Для запуска нужен собственный ключ OpenAI API в файле apikeys.json.
Помогает ли метод против ошибок в расчётах?
План помогает против пропущенного шага, потому что задаёт последовательность действий. Против арифметической ошибки нужна отдельная проверка промежуточных чисел. Против смысловой ошибки помогает явное перечисление условий, но полной гарантии метод не даёт.
Когда план только увеличивает объём ответа?
На простой задаче в одно действие план добавляет текст, который не помогает проверке. Если промежуточных величин нет, структура из двух фаз становится лишней. Метод раскрывается там, где есть несколько шагов и числа, которые можно пересчитать.
