Главная / Статьи / Обратное формулирование промптов: превращение успешной сессии с LLM в повторно используемый промпт

Обратное формулирование промптов: превращение успешной сессии с LLM в повторно используемый промпт

Узнайте, как извлекать однократный промпт из успешного многократного диалога с большой языковой моделью, а также как метод инверсии промптов позволяет восстановить исходные промпты, когда у вас имеются только результаты их выполнения.

1367 слов

Тот промпт, который в итоге сработает, редко бывает тем, с которого вы начинали: он формируется в ходе нескольких раундов корректировок, а затем исчезает при закрытии чата. Обратный промптинг нарушает обычную схему работы. Сначала вы получаете желаемый результат, а затем просите модель воссоздать инструкции, которые гарантированно приведут к нему. Вы узнаете, как извлекать такие инструкции из диалога, как восстанавливать приблизительный промпт только на основе результатов и в каких случаях оба эти метода перестают быть надежными.

Почему рабочий промпт обычно теряется

Обратный промптинг основан на том, что современные передовые модели умеют анализировать свой собственный контекст. Он может применяться вручную в окне чата или как этап в работе цепочки обработки, и наиболее эффективен при генерации кода и в рабочих процессах с агентами, где требований много и их легко забыть.

Типичный цикл усовершенствования

Представьте, что разработчик добавляет точку входа для регистрации пользователей в Python-сервис. Цель — код FastAPI высокого качества, готовый к использованию в производстве: проверка входных данных, структурированные ответы на ошибки, логирование и тесты. Исходный запрос часто бывает довольно общим, например «напишите точку входа FastAPI для регистрации пользователей», и первый ответ, как это обычно бывает, крайне скудным. Поэтому разработчик продолжает работу над проектом:

  • Просят добавить модели Pydantic для проверки адреса электронной почты и силы пароля.
  • Просят внедрить соответствующие исключения HTTP вместе с механизмом логирования.
  • Просят сформировать единый, стандартизированный формат JSON для всех ошибок.
  • Просят создать тесты с помощью pytest, охватывающие как успешные сценарии, так и случаи сбоев при проверке данных.

Через несколько шагов код соответствует требованиям команды, копируется в репозиторий, и разговор забывается вместе со всеми ограничениями и корректировками, которые его формировали. Следующий эндпоинт снова начинается с расплывчатой однострочной инструкции.

Извлечение одноразового запроса из разговора

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

Now that we have reached this final output, reverse-engineer
the entire conversation. Look at every correction, added constraint,
tone adjustment, format decision, and the result.
Produce one complete, standalone prompt that would generate
this exact output quality in a single shot with no follow-ups.

The prompt must explicitly state:
- Role and expertise level
- All background context and requirements established
- Every constraint and rule settled on
- Output format and structure
- Tone, style, and quality criteria
- Any examples or reference patterns used

Output only the prompt itself, ready to copy into a fresh session.
No explanation.

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

Рассматривайте результат как технический ресурс:

  • Сохраняйте его в репозитории рядом с кодом, который он генерирует, чтобы изменения проходили проверку и имели версии.
  • Делитесь им с коллегами, чтобы одни и те же стандарты соблюдались независимо от того, кто его запускает.
  • Заменяйте части, связанные с конкретной задачей, параметрами (имя сущности, поля, коды ошибок) и используйте его для похожих конечных точек.

Восстановление запроса только на основе результатов

Метод общения работает только тогда, когда у вас ещё есть история переписки. Более общий подход, известный как инверсия промпта или обратная инженерия промптов (RPE), позволяет воссоздать приблизительную версию промпта исключительно на основе текста, который он генерировал.

Формально это выглядит так: некий скрытый промпт X породил результат O. Необходимо найти промпт P, чей результат N будет семантически и функционально близок к O. У вас есть доступ только к «черному ящику», то есть нет ни логитов, ни данных обучения — только возможность отправлять промпты и читать ответы.

Отбор кандидатов и их проверка

Простой подход включает три шага:

  • Подайте модели результат O и попросите её определить запрос, лежащий в его основе. Одна попытка предсказания часто приводит к переобучению или к созданию ограничений, которых на самом деле не существовало; поэтому выполните эту процедуру несколько раз с разными параметрами температуры и выборки, чтобы собрать набор кандидатских запросов.
  • Пропустите каждый кандидат через модель и сравните полученный результат с O, используя такой показатель перекрытия, как ROUGE-1 (оценка F1 на основе общих униграмм).
  • Оставьте кандидата с наивысшим баллом.

Шаг проверки делает этот подход чем-то большим, чем простое угадывание: вы оцениваете, какой кандидат действительно воспроизводит целевой результат, а не полагаетесь на мнение модели.

Эволюция кандидатов с помощью генетического алгоритма

Кандидатов также можно рассматривать как популяцию и заставлять их эволюционировать. Каждое поколение:

  • Оценивайте качество в виде среднего значения похожести между результатами, генерируемыми кандидатской моделью, и исходным O.
  • Сохраняйте лучшие варианты.
  • Мутируйте более слабые варианты, предоставляя модели текущий запрос вместе с зафиксированными различиями, и позволяя ей переформулировать текст, добавить или удалить ограничения, либо изменить его структуру.
  • Повторяйте процесс до тех пор, пока оценки не перестанут улучшаться или не исчерпается бюджет.

Этот подход не требует обучения. Было сообщено, что он позволяет получать связные, повторно используемые запросы на основе всего пяти примеров результатов, причем закрытые модели не являются препятствием, поскольку для работы ему достаточна недорогая функция похожести.

Ограничения, с которыми стоит считаться

Реконструкция всегда является приближением. Восстановленный запрос часто бывает длиннее и более подробным, чем тот, который изначально породил результат, поскольку ему необходимо учесть нюансы, которые ранее передавались через контекст.

Ещё два замечания:

  • Инструкции, полученные путём обратной инженерии, содержат особенности модели, от которой они были скопированы. Инструкция, отрегулированная для одной модели, может потребовать корректировки перед тем, как эффективно работать с другой, поэтому проводите повторную проверку при смене модели.
  • Лексические метрики, такие как ROUGE-1, оценивают наличие общих слов, а не правильность поведения. Для кода или структурированного вывода рассмотрите возможность добавления проверок, важных для вас, таких как прохождение сгенерированных тестов или корректность формата JSON, наряду с показателем сходства.

Место кодирующих агентов

Инструменты агентного кодирования, такие как OpenAI Codex и Claude Code, оптимизированы для работы в одном направлении: они обеспечивают эффективную обработку контекста, длительные циклы работы агента и активное использование кэширования промптов. Тем не менее оба инструмента могут остановиться перед написанием кода и задать вам уточняющие вопросы с несколькими вариантами ответов, что позволяет заранее выявить требования. Работайте с агентом до получения качественного результата, затем извлеките основной промпт из этой сессии для однократного использования. Чтобы узнать дополнительные способы структурирования извлеченных промптов, ознакомьтесь с нашим руководством по созданию промптов для LLM, готовых к использованию в производстве, с помощью семислойной структуры.

Основные выводы

  • Настоящая ценность длительной сессии формирования промптов заключается в накопленных ограничениях; запишите их перед закрытием чата.
  • Одна мета-инструкция в конце успешного диалога превращает его в отдельный, версионируемый запрос.
  • Когда существуют только результаты вывода, генерируются множество вариантов запросов, и для выбора лучшего используется показатель сходства, а не уровень уверенности модели.
  • Восстановленные запросы являются приблизительными вариантами, связанными с конкретной моделью, поэтому их необходимо проверять в новой сессии и каждый раз при изменении модели.
  • Связанные материалы