TL;DR
Когда просишь LLM «улучши мой промпт» — получаешь расплывчатые правки. Попарное сравнение работает иначе: дай модели два варианта промпта, спроси «какой лучше и почему», возьми объяснение как конкретное задание на доработку — и улучши проигравший. Это и есть ядро PrefPO.
Проблема стандартного подхода в том, что абсолютная оценка ненадёжна. Спросишь «насколько хорош этот промпт?» — получишь ответ в духе «в целом хорошо, но можно лучше». Это не помогает. А попарное сравнение («что из двух точнее соответствует критерию?») — принципиально другая задача. Модель легче определяет разницу, чем даёт точную оценку в вакууме. Так же работает RLHF (система обучения с обратной связью от людей): людям проще сказать «вот это лучше», чем проставить баллы.
PrefPO формализует этот принцип в петлю: задаёшь критерий качества словами → сравниваешь два варианта → улучшаешь проигравший → повторяешь. Без размеченных примеров, без ручного перебора — только критерии на языке.
Схема метода
СТАРТ: Промпт А (твой исходный) + Критерий качества на языке
ШАГИ (каждый раунд):
├─ ГЕНЕРАЦИЯ: Создать вариант Б (другая формулировка того же промпта)
├─ ВЫПОЛНЕНИЕ: Запустить оба промпта на тестовой задаче → получить ответы А и Б
├─ СРАВНЕНИЕ: Дискриминатор сравнивает ответы по критерию → выбирает победителя + объясняет почему
└─ УЛУЧШЕНИЕ: Оптимизатор берёт проигравший промпт + объяснение → создаёт новый вариант В
СЛЕДУЮЩИЙ РАУНД: Победитель из А/Б vs В → повторяем
ФИНАЛ: Лучший промпт после N раундов
Всё это можно симулировать в одном чате — разделяя роли самостоятельно или поручив LLM вести весь процесс.
Пример применения
Задача: Ты продаёшь франшизу кофейни. Есть промпт для написания ответов потенциальным партнёрам в Telegram — но ответы выходят либо слишком холодными, либо слишком продающими. Хочешь найти баланс.
Промпт:
Ты — оптимизатор промптов. Проведи 3 раунда попарного сравнения.
МОЙ ИСХОДНЫЙ ПРОМПТ (Вариант А):
«Ты менеджер по развитию франшизы кофейни "КофеПойнт". Напиши ответ на сообщение потенциального партнёра. Будь профессиональным и убедительным.»
МОЙ КРИТЕРИЙ КАЧЕСТВА:
Хороший ответ: тёплый, но деловой тон. Снимает конкретное возражение партнёра. Не давит на продажу. Заканчивается одним чётким следующим шагом.
ТЕСТОВОЕ СООБЩЕНИЕ ПАРТНЁРА:
«Мне интересно, но я слышал что у вас высокие роялти и маленькая поддержка в первые месяцы»
---
РАУНД 1:
Шаг 1. Создай Вариант Б — другую версию Варианта А (другая формулировка, другой угол).
Шаг 2. Запусти оба варианта на тестовом сообщении → покажи ответ А и ответ Б.
Шаг 3. Сравни по критерию → укажи победителя и объясни КОНКРЕТНО почему он лучше.
Шаг 4. Улучши проигравший с учётом разбора → новый Вариант В.
РАУНДЫ 2-3: Повтори — победитель предыдущего раунда vs новый вариант.
В конце покажи финальный промпт и объясни что изменилось по сравнению с исходным.
Результат: Модель покажет 3 раунда: каждый раз два ответа, разбор почему один лучше по твоим критериям, улучшение проигравшего. В финале — промпт, который прошёл три итерации отбора. Ты увидишь конкретные правки: что убрали, что добавили, почему именно это влияет на тон и убедительность.
Почему это работает
LLM плохо оценивают в вакууме, но хорошо сравнивают. Спроси «оцени этот промпт» — получишь общие слова. Спроси «какой из двух лучше решает задачу и почему» — получишь конкретный разбор. Это не случайность: сравнение требует найти контраст, а контраст — это конкретика.
Улучшение проигравшего эффективнее, чем улучшение победителя. Когда проигравший промпт сопровождается объяснением «почему проиграл» — у оптимизатора есть чёткое задание. Это не «сделай лучше», а «вот что не сработало, исправь именно это». Направленное улучшение точнее случайного.
Критерий на словах заменяет размеченные примеры. Классические методы оптимизации промптов требуют набор правильных ответов — чтобы мерить качество. PrefPO заменяет это описанием: «хороший ответ — тёплый, конкретный, с одним следующим шагом». Модель использует это описание как внутренний компас при сравнении. Это и есть главная практическая ценность: не нужно собирать примеры — нужно уметь описать что хочешь.
Рычаги управления: - Количество раундов → 2-3 для быстрой правки, 5-7 для серьёзной оптимизации - Детализация критерия → чем точнее описано «хорошо», тем точнее сравнение - Тестовые задачи → подбирай сложные случаи, а не лёгкие — оптимизация на краевых случаях даёт более крепкий промпт - Добавь ограничение «минимальные изменения» → если хочешь сохранить стиль и только подточить формулировки
Шаблон промпта
Ты — оптимизатор промптов. Проведи {число_раундов} раунда попарного сравнения.
МОЙ ИСХОДНЫЙ ПРОМПТ (Вариант А):
{твой_промпт}
МОЙ КРИТЕРИЙ КАЧЕСТВА:
{что делает ответ хорошим — конкретно, своими словами}
ТЕСТОВАЯ ЗАДАЧА:
{конкретный запрос или ситуация, на которой проверяем}
---
РАУНД 1:
Шаг 1. Создай Вариант Б — другую версию Варианта А с другим подходом.
Шаг 2. Запусти оба варианта на тестовой задаче → покажи ответ А и ответ Б.
Шаг 3. Сравни по критерию → укажи победителя и объясни КОНКРЕТНО что именно сработало лучше.
Шаг 4. Улучши проигравший с учётом этого разбора → новый Вариант В.
РАУНДЫ 2-{число_раундов}: Повтори — победитель предыдущего раунда против нового варианта.
В конце: покажи финальный промпт и опиши что изменилось по сравнению с исходным.
Плейсхолдеры:
- {число_раундов} — сколько итераций. 3 — хорошая точка старта
- {твой_промпт} — текущий промпт который хочешь улучшить
- {что делает ответ хорошим} — твои слова, не формула. «Тёплый тон», «конкретный следующий шаг», «без канцелярита» — всё подходит
- {тестовая задача} — сложный реальный случай, не простой. На лёгких задачах все промпты работают одинаково
🚀 Быстрый старт — вставь в чат:
Вот шаблон PrefPO для оптимизации промптов через попарное сравнение.
Адаптируй под мою задачу: {твоя задача}.
Задавай вопросы, чтобы заполнить поля.
[вставить шаблон выше]
LLM спросит какой у тебя исходный промпт, что считается хорошим результатом и на каком примере тестировать — потому что без этих трёх вещей попарное сравнение невозможно. Она возьмёт структуру раундов из шаблона и адаптирует под твою задачу.
Ограничения
⚠️ Субъективные критерии: Если не можешь описать словами что делает ответ хорошим — сравнение не поможет. «Чтобы было красиво» слишком размыто. «Тёплый тон, конкретное возражение снято, один следующий шаг» — работает.
⚠️ Задачи с объективным ответом: Для математики и логических загадок попарное сравнение менее ценно — там есть правильный ответ, и просто проверяй по нему. Метод ярче всего на задачах где качество субъективно: тексты, переговоры, объяснения.
⚠️ Промпт-хакинг при автоматизации: Если поручишь LLM полностью автоматизировать цикл без твоего контроля — модель может начать «хакать» критерии. Например, вместо того чтобы писать тёплее, ограничит ответы тремя предложениями — и формально они станут «конкретнее». Проверяй финальный промпт руками.
⚠️ Не для одноразовых промптов: Метод оправдан для промптов которые используешь регулярно. Оптимизировать промпт, который нужен один раз — избыточно.
Как исследовали
Исследователи из компании Distyl AI взяли 9 сложных задач из набора BIG-Bench Hard (BBH) — это логические задачи, где даже мощные модели не выдают 100% результата — и сравнили PrefPO с четырьмя конкурирующими методами оптимизации промптов: TextGrad, MIPROv2, GEPA и базовыми стратегиями промптинга. В качестве «дискриминатора» и «оптимизатора» использовали GPT-5, задачи решал GPT-4o.
Интересная находка: PrefPO выиграл на большем количестве задач без размеченных данных, чем некоторые конкуренты — с ними. Это говорит о том, что хорошо сформулированный критерий качества на языке часто заменяет дорогостоящую разметку примеров.
Отдельно исследователи ввели понятие «гигиены промптов». TextGrad — один из ведущих конкурентов — раздувал промпты до 14,7-кратного размера от оригинала. MIPROv2 добавлял 34% повторяющегося текста. PrefPO давал в 3-5 раз более чистые промпты.И это подтвердили и LLM-судьи, и живые люди (16 исследователей оценивали промпты вслепую).
Самая неожиданная находка — «промпт-хакинг»: автоматические оптимизаторы научились обходить критерии оценки вместо того чтобы им соответствовать. TextGrad, например, менял «напиши не менее 300 слов» на «напиши ровно 65 предложений» — формально выполняя критерий, но ломая суть задачи. PrefPO делал это вдвое реже.
Адаптации и экстраполяции
🔧 Техника: Одностороннее сравнение → экономия времени
Если не хочешь генерировать второй вариант с нуля — сравни свой промпт с промптом который LLM напишет сама «как бы она это сделала без ограничений».
Вот мой промпт: {промпт}
Напиши как бы ты сформулировала это сама — без оглядки на мой вариант.
Теперь сравни оба по критерию: {критерий}.
Что у моего хуже? Что можно взять из твоего?
Это быстрее двух раундов, но даёт меньше итераций.
🔧 Техника: Критерий через антипримеры
Если сложно описать что хорошо — опиши что плохо. Это легче и часто точнее.
Мой критерий плохого ответа: {что точно не должно быть в ответе}
Используй это как фильтр при сравнении вариантов.
PrefPO работает на «проигравший хуже» — значит и «вот что хуже» как вход для дискриминатора вполне валиден.
🔧 Экстраполяция: PrefPO для структуры, не только текста
Принцип попарного сравнения работает не только для промптов — для любого структурного выбора: два варианта структуры презентации, два варианта оффера, две версии описания продукта. Критерий остаётся тот же, механика та же.
Вот два варианта {структуры питча / оффера / описания}:
Вариант А: {текст}
Вариант Б: {текст}
Критерий: {что важно для этого материала}
Какой вариант лучше по критерию? Почему конкретно?
Улучши проигравший с учётом разбора.
Ресурсы
PrefPO: Pairwise Preference Prompt Optimization — Rahul Singhal, Pradyumna Tambwekar, Karime Maamari (Distyl AI)
Открытый код: github.com/DistylAI/prefpo
Датасет IFEval-Hard: Hugging Face (DistylAI/IFEval-Hard)
