3,583 papers
arXiv:2509.21371 73 22 сент. 2025 г. FREE

ReGeS: двухсторонний промпт-паттерн для выбора из похожих вариантов

КЛЮЧЕВАЯ СУТЬ
Обнаружено: LLM катастрофически плохо сжимает длинные диалоги в концентрированные запросы — поисковик находит правильный вариант только в 3.5% случаев (топ-5 результатов). Метод ReGeS позволяет выбирать из похожих вариантов после длинного разговора — не путать "боевик с Уиллом Смитом про инопланетян" и "боевик с Уиллом Смитом про роботов". Фишка: покажи модели правильный ответ и спроси "почему именно он?" — она сама выделит ключевые критерии из шума. Потом используй эти критерии для поиска. Второй шаг: дай модели похожие неправильные варианты (не случайные, а реально близкие) — она научится видеть тонкие различия.
Адаптировать под запрос

TL;DR

ReGeS — исследование о том, как связать диалоговые рекомендательные системы с базами знаний. Авторы показали, что наивное применение RAG (Retrieval-Augmented Generation) в диалогах проваливается из-за двух проблем: шумные длинные диалоги убивают поиск, а LLM путается среди похожих вариантов. Решение — взаимное усиление поиска и генерации: генерация создаёт концентрированные запросы для поиска, а поиск находит похожие варианты для тренировки генератора различать нюансы.

Главная находка: Качество запроса — это всё для поиска. Когда исследователи скормили retriever-у оригинальный диалог как есть, точность поиска упала до 3.5% (Recall@5). Даже простой промпт "перефразируй диалог в короткий запрос" не спасает — LLM теряет важные детали или добавляет шум. Проблема в том, что LLM не знает что важно для поиска — она видит весь диалог, но не понимает какие слова критичны для нахождения нужного фильма. Второй барьер: когда retriever находит 5 похожих фильмов, LLM начинает путаться. Без явного контраста между вариантами модель галлюцинирует — выдумывает несуществующие фильмы или выбирает неправильный из списка.

Суть метода: ReGeS использует самообучение через правильный ответ. Первый шаг: дай LLM диалог + правильный фильм, попроси создать идеальный поисковый запрос. Второй шаг: обучи другую LLM воспроизводить такие запросы без знания правильного ответа — только из диалога. Для генератора: обучай не на случайных неправильных вариантах, а на похожих — тех, что retriever нашёл рядом с правильным. Модель учится видеть тонкие различия: "этот боевик с Уиллом Смитом про инопланетян, а тот — про роботов".

🔬

Схема метода

ОБУЧЕНИЕ:
Шаг 1: LLM видит [диалог + правильный ответ] → генерирует идеальный запрос
Шаг 2: Query Expert учится воспроизводить такие запросы без ответа → только из диалога
Шаг 3: Retriever ищет по refined query → находит похожие варианты (hard negatives)
Шаг 4: Item Generator учится выбирать правильный среди похожих → contrastive learning

ПРИМЕНЕНИЕ:
Диалог → Query Expert создаёт запрос → Retriever находит кандидатов → 
Item Generator выбирает лучший → Рекомендация

Все шаги требуют fine-tuning с LoRA. Для обычного чата — неприменимо напрямую.

📋

Extractable принципы для промптов

Хотя ReGeS требует fine-tuning, принципы работы можно адаптировать в промпты:

📌

1. Self-Reflection для улучшения запроса

Проблема: LLM плохо сжимает длинный контекст в концентрированный запрос.

Решение: Используй ground truth как якорь для рефлексии.

Промпт-паттерн:

Дан диалог:
{диалог}

Правильная рекомендация: {правильный_вариант}

Задача: Какие 3-5 ключевых слов из диалога привели именно к этой рекомендации?
Игнорируй общие фразы, выдели ТОЛЬКО конкретные предпочтения.

Формат: список слов через запятую.

Потом используй эти слова как поисковый запрос.

📌

2. Contrastive Selection с похожими вариантами

Проблема: LLM галлюцинирует когда выбирает из похожих вариантов.

Решение: Явно дай похожие варианты и заставь объяснить различия.

Промпт-паттерн:

Контекст: {диалог}

Вот 5 похожих вариантов:
1. {вариант_1}
2. {вариант_2}
...

Задача:
1. Для каждого варианта — почему он НЕ подходит (1-2 предложения)
2. Выбери лучший и объясни почему именно он

Формат:
Не подходят:
1. [причина]
2. [причина]
...
Выбор: [номер] — [объяснение]
📌

3. Двухшаговая обработка: сжатие → поиск

Промпт-паттерн:

ШАГ 1 (в отдельном запросе):
"Сожми этот диалог в поисковый запрос 5-10 слов. Убери вежливость, оставь только факты о предпочтениях:
{диалог}"

ШАГ 2 (в новом запросе):
"Найди в базе варианты по запросу: {сжатый_запрос}"
🚀

Пример применения

Ситуация: Ты консультант по выбору CRM-системы для малого бизнеса. Клиент час рассказывал о своей компании, упомянул 20 разных потребностей.

Задача: Превратить длинный диалог в концентрированный запрос для поиска подходящих CRM.

📌

Вариант 1: Self-Reflection паттерн

Промпт:

Дан диалог с клиентом:
"""
[Клиент 40 минут рассказывал про свой бизнес — оптовая торговля стройматериалами,
15 человек в офисе, работают с 200 контрагентами, ведут учёт в Excel,
хотят автоматизировать выставление счетов, отслеживать дебиторку,
интегрироваться с 1С, бюджет до 150 тысяч рублей в год...]
"""

Я знаю что для них идеально подходит amoCRM Комплексная (с модулем Финансы).

Задача: Какие 5-7 ключевых критериев из диалога привели к этому выбору?
Игнорируй общие фразы типа "автоматизация" или "удобство".
Выдели ТОЛЬКО конкретные требования которые есть в amoCRM Комплексная.

Формат: маркированный список критериев.

Результат: LLM выдаст концентрированный список типа:

  • Интеграция с 1С
  • Модуль работы с дебиторской задолженностью
  • Выставление счетов внутри системы
  • До 15 пользователей
  • Ценовой сегмент до 150 тыс/год
  • Оптовая торговля (не розница)

Эти критерии теперь можно использовать для точного поиска альтернатив.

📌

Вариант 2: Contrastive Selection

Промпт:

Контекст: Клиент — оптовая торговля стройматериалами, 15 человек, бюджет 150 тыс/год,
нужна интеграция с 1С, работа с дебиторкой, выставление счетов.

Вот 4 CRM которые нашёл поиск:
1. amoCRM Комплексная — есть модуль Финансы, интеграция с 1С, до 20 юзеров, 12 тыс/мес
2. Битрикс24 Компания — есть учёт товаров, интеграция с 1С, до 50 юзеров, 11 тыс/мес
3. Мегаплан — простая CRM, нет работы с финансами, до 10 юзеров, 6 тыс/мес
4. Salesforce Essentials — нет интеграции с 1С из коробки, от 25$/юзер/мес

Задача:
1. Для каждого варианта — почему он НЕ подходит (или подходит хуже)
2. Выбери лучший и объясни

Формат:
Не подходят / хуже:
1. [причина]
...
Выбор: [номер] — [объяснение]

Результат: LLM разберёт нюансы:

  1. amoCRM Комплексная — подходит идеально, всё есть
  2. Битрикс24 — перегружен для задачи, нет специализированного модуля финансов
  3. Мегаплан — слишком простая, нет нужного функционала
  4. Salesforce — дорого + нет интеграции с 1С

Выбор: 1 — amoCRM Комплексная, потому что...

🧠

Почему это работает

Слабость LLM: Модель не умеет автоматически выделять главное из шума. Когда ей дают длинный диалог и говорят "сделай запрос" — она пытается сохранить всё, теряет фокус, добавляет общие слова. Результат: поиск находит не то.

Сильная сторона LLM: Модель отлично работает когда у неё есть якорь — конкретная точка опоры. Если показать правильный ответ и спросить "почему именно он?" — LLM чётко выделит связь между диалогом и ответом. Это self-reflection: модель смотрит на свой же вывод и извлекает логику.

Как метод использует силу: ReGeS даёт LLM правильный ответ и заставляет объяснить почему. Это создаёт псевдо-разметку: "вот диалог, вот идеальный запрос для него". Потом другая LLM учится воспроизводить такие запросы без подсказки. В промптах мы делаем то же самое вручную: показываем правильный ответ → просим найти ключевые слова → используем их для поиска.

Второй механизм — hard negatives: Когда LLM учат на случайных неправильных вариантах, она не видит тонких различий. Все неправильные варианты "далеко" от правильного, легко отличить. Но в реальности retriever найдёт похожие варианты — те, что отличаются одним-двумя критериями. ReGeS тренирует модель именно на таких hard negatives. В промптах это работает так: вместо "выбери из 100 вариантов" даём "вот 5 похожих, найди различия".

Рычаги управления в промптах:

  1. Детальность self-reflection → "3-5 слов" vs "подробный анализ критериев"
    • Меньше слов = концентрированный запрос, лучше поиск
    • Больше деталей = глубокий анализ, но может зашуметь поиск
  2. Число вариантов для сравнения → 3-5 vs 10+
    • Меньше = проще различать, быстрее
    • Больше = полнее охват, но сложнее для модели
  3. Формат вывода → "только список слов" vs "список + объяснение"
    • Без объяснений = быстро, для автоматизации
    • С объяснениями = видишь логику, можешь корректировать
⚠️

Ограничения

⚠️ Требует правильный ответ: Self-reflection паттерн работает только если ты уже знаешь правильный вариант. Для неизвестных задач — не подходит.

⚠️ Два запроса вместо одного: Двухшаговая схема (сжатие → поиск) дороже по токенам и времени чем прямой запрос.

⚠️ Зависит от качества поиска: Contrastive selection работает только если retriever нашёл релевантные варианты. Если поиск провалился — выбирать не из чего.

⚠️ Не для простых случаев: Когда вариантов мало или они сильно различаются — эти паттерны избыточны. Применяй для задач где реально нужно различать нюансы.

🔍

Как исследовали

Команда взяла две классические базы диалоговых рекомендаций: ReDial (10 тысяч диалогов про фильмы, короткие разговоры) и INSPIRED (800 диалогов, более глубокие предпочтения). Идея была проверить гипотезу: наивный RAG проваливается в диалогах из-за шумных запросов и похожих кандидатов.

Сначала протестировали базовый RAG: скормили retriever оригинальный диалог — получили Recall@5 = 3.5%. То есть правильный фильм попал в топ-5 найденных только в 3.5% случаев. Это провал. Попробовали промпт "перефразируй диалог в запрос" — стало лучше, но всё равно слабо.

Потом построили ReGeS в два этапа:

Этап 1 — Query Expert: Взяли Gemma-2B, Llama3.1-8B и Gemma-27B. Для каждого диалога + правильного фильма промптили LLM: "создай идеальный запрос". Получили псевдо-разметку: 10 тысяч пар (диалог → идеальный запрос). Fine-tuned другую LLM воспроизводить такие запросы без знания правильного ответа. Использовали LoRA (rank=8) чтобы экономить память. Результат: Recall@5 вырос до 20-40% в зависимости от retriever.

Этап 2 — Item Generator: Взяли refined queries от Query Expert, скормили retriever-ам (DPR, BGE, OpenAI embeddings). Retriever вернул топ-50 кандидатов для каждого диалога. Среди них — правильный фильм + 49 похожих неправильных (hard negatives). Fine-tuned генератор контрастивно: максимизировать вероятность правильного, минимизировать похожих.

Что сравнивали:

  • Традиционные методы (KBRD, KGSF, UniCRS) — используют графы знаний
  • Чистые LLM (GPT-3.5, GPT-4, Vicuna) — генерируют без retrieval
  • Базовые RAG (RARS, RAMO) — простой retrieval + generation без reciprocal synergy

Почему результаты получились такими:

ReGeS удвоил точность рекомендаций по сравнению с лучшим baseline (UniCRS: 4.9% → ReGeS: 10.8% на ReDial). Ключевой инсайт: взаимное усиление критично. Когда убрали Query Expert (использовали raw диалог) — retrieval провалился. Когда убрали hard negatives из обучения генератора — модель начала галлюцинировать (5% vs 0.13% с hard negatives).

Удивительный результат: Chain-of-Thought помог не всегда. На ReDial CoT дал +3% к точности, на INSPIRED — вообще не помог. Авторы объясняют: короткие диалоги (ReDial) выигрывают от явного рассуждения, а длинные (INSPIRED) уже содержат всю нужную информацию.

Второй неожиданный вывод: больше кандидатов ≠ лучше. На INSPIRED топ-10 кандидатов дал лучший результат чем топ-50. Причина: INSPIRED содержит более информативные диалоги → retriever работает точнее → узкий список проще для генератора. На ReDial наоборот: диалоги короткие → retriever слабее → нужен широкий охват топ-50.

Практический инсайт: Для коротких шумных диалогов (как ReDial) — делай широкий retrieval и компенсируй контрастивной генерацией. Для детальных диалогов (как INSPIRED) — сужай поиск и упрощай выбор генератору.

📄

Оригинал из исследования

Промпт для генерации псевдо-запроса (Query Expert обучение):

Given the conversation history and the recommended item,
generate a concise search query that captures the user's 
core preferences leading to this recommendation.

Conversation: <conversation_history>
Recommended Item: <item_name>

Query (5-10 words):

Промпт для контрастивного обучения генератора:

Given the conversation and candidate items,
select the item that best matches the user's preferences.

Conversation: <conversation_history>

Candidates:
1. <item_1>
2. <item_2>
...
N. <item_N>

Think step by step about why each candidate does or 
doesn't fit the user's stated preferences.

Your answer (number only):

Контекст: Исследователи использовали эти промпты для создания обучающих данных. Первый промпт генерировал идеальные запросы (self-supervision), второй — обучал модель различать похожие варианты. Важно: ground truth item (<item_name>) подставлялся только на этапе создания псевдо-разметки, не во время inference.

📌

Адаптации

📌

💡 Адаптация для карьерных советов

Ситуация: Ты карьерный коуч. Клиент час рассказывал о своей ситуации, упомянул 15 разных факторов. Нужно выбрать 1 из 4 карьерных треков.

Промпт с self-reflection:

Дан разговор с клиентом про карьеру:
"""
[28 лет, работает аналитиком в банке 4 года, устал от рутины,
хочет творчества, но боится нестабильности, есть ипотека,
любит общаться с людьми, интересуется психологией, 
в детстве мечтал быть учителем, сейчас зарплата 150к...]
"""

Я знаю что для него подходит трек "HR-специалист в крупной компании".

Задача: Какие 3-5 ключевых факторов из разговора указывают на этот выбор?
НЕ пиши общие вещи типа "хочет развития". Только конкретные связки.

Формат: список через точку с запятой.

Потом используй эти факторы для поиска похожих кейсов или проверки альтернативных треков.

⚖️

🔧 Техника: Явное сравнение вместо абстрактного выбора

Что меняем: Вместо "выбери лучший" → "для каждого объясни почему НЕ подходит"

Эффект: LLM глубже анализирует различия, меньше галлюцинирует

Промпт:

Контекст: {задача}

Варианты:
1. {вариант_1}
2. {вариант_2}
3. {вариант_3}

НЕ выбирай сразу. Сначала:

ШАГ 1: Для каждого варианта напиши 1-2 недостатка относительно задачи
ШАГ 2: Только потом выбери лучший и объясни почему

Формат:
Недостатки:
1. [текст]
2. [текст]
3. [текст]
Выбор: [номер] — [почему]

Когда применять: Задачи где варианты похожи и легко ошибиться. Выбор фреймворка, найм кандидата, выбор стратегии.


🔗

Ресурсы

ReGeS: Reciprocal Retrieval–Generation Synergy for Conversational Recommender Systems

  • Код: github.com/dayuyang1999/ReGeS
  • Авторы: Dayu Yang, Hui Fang (University of Delaware)
  • Отсылки: RAG (Retrieval-Augmented Generation), DPR (Dense Passage Retrieval), LoRA (Low-Rank Adaptation)

📋 Дайджест исследования

Ключевая суть

Обнаружено: LLM катастрофически плохо сжимает длинные диалоги в концентрированные запросы — поисковик находит правильный вариант только в 3.5% случаев (топ-5 результатов). Метод ReGeS позволяет выбирать из похожих вариантов после длинного разговора — не путать "боевик с Уиллом Смитом про инопланетян" и "боевик с Уиллом Смитом про роботов". Фишка: покажи модели правильный ответ и спроси "почему именно он?" — она сама выделит ключевые критерии из шума. Потом используй эти критерии для поиска. Второй шаг: дай модели похожие неправильные варианты (не случайные, а реально близкие) — она научится видеть тонкие различия.

Принцип работы

Не надейся что модель сама выделит главное из длинного контекста. Дай ей якорь — правильный ответ. Попроси объяснить что в диалоге привело именно к нему. Модель выдаст концентрированный список критериев. Это самоанализ через опору: LLM не умеет автоматически фильтровать шум, но отлично работает когда есть точка привязки. Для выбора из похожих вариантов: не давай модели 100 случайных опций, дай 3-5 близких и заставь объяснить различия — "этот не подходит потому что X, тот потому что Y".

Почему работает

LLM плохо работает с открытыми задачами типа "сожми 40 минут диалога в запрос" — она пытается сохранить всё, теряет фокус, добавляет общие слова. Результат: поисковик находит не то. Но показываешь правильный ответ и спрашиваешь "почему он?" — модель чётко видит связь между диалогом и выводом. Это работает через псевдо-разметку: модель создаёт инструкцию для самой себя. Второй механизм — обучение на похожих неправильных вариантах (не на случайных). Когда модель сравнивает "боевик про инопланетян" и "боевик про роботов", она учится различать нюансы. Случайные варианты слишком далеко от правильного — легко отличить, нет обучающего сигнала.

Когда применять

Консультации и рекомендации → конкретно для выбора из похожих вариантов после длинного диалога (CRM-системы, фильмы, вакансии), особенно когда клиент упомянул 10-20+ критериев вперемешку с водой. НЕ подходит для простых случаев где варианты сильно различаются или диалог короткий — там это избыточно.

Мини-рецепт

1. Self-reflection (нужен правильный ответ): Дай модели [диалог] + [правильный вариант который ты уже знаешь]. Попроси: "Какие 5-7 ключевых критериев из диалога привели именно к этому выбору? Игнорируй общие фразы, выдели ТОЛЬКО конкретные требования". Получишь концентрированный список.
2. Используй для поиска: Эти критерии → поисковый запрос. Найди 3-5 похожих вариантов.
3. Contrastive selection: Дай модели [диалог] + [5 похожих вариантов]. Формат: "Для каждого варианта объясни почему он НЕ подходит (или подходит хуже). Выбери лучший".

Примеры

[ПЛОХО] : Вот 40 минут диалога с клиентом про CRM. Найди подходящую систему — модель попытается учесть всё, потеряет фокус, поиск найдёт не то.
[ХОРОШО] : Шаг 1: Диалог: [клиент час рассказывал]. Я знаю что подходит amoCRM Комплексная. Какие 5 критериев из диалога привели к этому выбору? Только конкретные требования → модель выдаст: интеграция с 1С, модуль дебиторки, до 15 юзеров, бюджет 150к/год. Шаг 2: Контекст: [те же критерии]. Вот 4 CRM: amoCRM, Битрикс24, Мегаплан, Salesforce. Для каждой — почему НЕ подходит. Выбери лучшую → модель разберёт нюансы и объяснит выбор.
Источник: ReGeS: Reciprocal Retrieval-Generation Synergy for Conversational Recommender Systems
ArXiv ID: 2509.21371 | Сгенерировано: 2026-01-12 05:39

Работа с исследованием

Адаптируйте исследование под ваши задачи или создайте готовый промпт на основе техник из исследования.

0 / 2000
~0.5-2 N-токенов ~10-30с
~0.3-1 N-токенов ~5-15с