TL;DR
Relative Contrastive Feedback (RCF) — техника итеративного улучшения, где модели показывают не одну версию с оценкой, а две: лучшую и худшую. Модель сама находит различия и использует их как ориентир для следующей итерации.
Обычная логика итерации: «вот текст, улучши его» или «вот текст, оцени 1–10». Проблема — модель получает абсолютную оценку без структуры направления: что именно менять, куда двигаться. Результат плавает — каждая итерация угадывает, а не прицеливается.
RCF меняет механику: вместо «оцени это» — «сравни хорошую версию и плохую, найди что именно делает хорошую лучше, теперь улучши, опираясь на эти различия». Контраст даёт конкретное направление. Каждый шаг уточняет предыдущий, а не стреляет заново.
Схема метода
ШАГ 1 (1 запрос): Сгенерировать 2–3 варианта задачи → пул кандидатов
ШАГ 2 (1 запрос): Выбрать лучший вариант (p+) и похожий, но худший (p-)
→ попросить модель выявить конкретные различия
ШАГ 3 (1 запрос): Используя выявленный контраст как инструкцию → создать
улучшенную версию → добавить в пул для следующего раунда
Всё вместе можно упаковать в 1 промпт — или запускать пошагово.
Пример применения
Задача: Николай пишет питч своего SaaS-стартапа для письма инвесторам. Прошлые версии «не цепляли» — но непонятно почему.
Промпт:
Я готовлю письмо инвестору с питчем SaaS-продукта для автоматизации закупок в ритейле.
ШАГ 1. Напиши три варианта первого абзаца письма — от 3 до 5 предложений каждый.
Варианты должны отличаться по подходу: один — через боль клиента, другой — через цифры, третий — через нарратив/историю.
ШАГ 2. Оцени все три варианта. Выбери лучший (p+) и худший (p-).
Для каждой пары «что именно делает p+ лучше, чем p-» — конкретно:
какие фразы, структура, логика, порядок аргументов.
ШАГ 3. Используя выявленные различия как прямую инструкцию, напиши финальный вариант первого абзаца.
Результат:
Модель покажет три разных первых абзаца, затем явный разбор «что работает vs что нет» с конкретными формулировками — и финальную версию, которая уже опирается на найденный паттерн, а не угадывает.
Почему это работает
Когда просишь «улучши», модель не знает куда двигаться — у неё нет точки отсчёта. Она делает случайные правки: меняет стиль, переставляет слова, добавляет детали. Результат зависит от удачи, а не от логики.
Контраст даёт другое. Когда модель видит две похожие версии с разным качеством, она может точно назвать что отличает одну от другой. Это не оценка «хуже/лучше» — это конкретная инструкция: «вот здесь перегруженный оборот, вот здесь пассивный залог, вот здесь потеряна конкретика».
Итерация превращается в прицельный огонь, а не шрапнель. Каждый раунд сужает зону улучшений — потому что контраст показывает куда именно нажать.
Рычаги управления: - Число вариантов (2–3–5) → больше кандидатов = сильнее различия между лучшим и худшим = точнее контраст. Для простых задач 2 хватает. - Критерий выбора p+ и p- → можно задать явно: «выбери лучший по убедительности», «по конкретности», «по краткости» — контраст будет прицелен именно в этот параметр. - Число раундов → по исследованию, первый раунд даёт наибольший прирост. Для большинства задач 1–2 итерации достаточно. - Роль оценщика → можно попросить оценивать с позиции конкретного читателя: «как инвестор», «как скептичный клиент», «как редактор Тинькофф-журнала» — контраст станет острее.
Шаблон промпта
Мне нужно улучшить {задача} через контрастное сравнение.
ШАГ 1.
Сгенерируй {число} варианта {задача}.
Варианты должны различаться по {параметр различия: подход, стиль, структура}.
ШАГ 2.
Оцени все варианты по критерию: {критерий качества}.
Определи p+ (лучший) и p- (наиболее похожий на p+, но уступающий ему).
Выяви конкретные различия: что именно делает p+ лучше p-.
Не общие слова — конкретные элементы: фразы, структура, логика, порядок.
ШАГ 3.
Используя выявленный контраст как прямую инструкцию,
создай улучшенную версию {задача}.
Плейсхолдеры:
- {задача} — «первый абзац коммерческого предложения», «заголовок поста в ВК», «описание вакансии»
- {число} — 2, 3 или 5. Для быстрого результата — 2
- {параметр различия} — «по тону», «по структуре аргумента», «по длине и плотности»
- {критерий качества} — «убедительность», «конкретность», «вовлекающий первый абзац»
🚀 Быстрый старт — вставь в чат:
Вот шаблон RCF для контрастного улучшения. Адаптируй под мою задачу.
Задавай вопросы, чтобы заполнить поля.
[вставить шаблон выше]
LLM спросит что именно нужно улучшить и по какому критерию — потому что без этого она не знает как выбрать p+ и p- и в какую сторону прицелиться.
Ограничения
⚠️ Субъективные критерии: Контраст работает лучше всего когда критерий качества чёткий («короче», «конкретнее», «без пассивного залога»). При размытых критериях («выразительнее», «красивее») модель хуже находит значимые различия.
⚠️ Первый раунд — самый ценный: По данным исследования, наибольший прирост даёт первая итерация. Больше 2–3 раундов дают убывающую отдачу — каждый следующий улучшает меньше.
⚠️ Нужны разные варианты: Если все сгенерированные варианты похожи, контраст слабый. Явно проси разные подходы или разные структуры — иначе p+ и p- почти неотличимы.
⚠️ Метод исследовался на коде: Вся инфраструктура заточена под программирование с автоматическим профилированием и тестами. Переносимость принципа на другие задачи — экстраполяция, не прямой результат исследования.
Ресурсы
EffiPair: Improving the Efficiency of LLM-generated Code with Relative Contrastive Feedback — препринт, на рецензии.
Авторы: Samira Hajizadeh, Suman Jana — Columbia University, New York.
Связанные работы: EffiLearner (Huang et al., 2025), LLM4EFFI (Ye et al., 2025), PerfCodeGen (Peng et al., 2024). Бенчмарки: EvalPerf, Mercury, ENAMEL, EffiBench.
