3,583 papers
arXiv:2512.20145 70 23 дек. 2025 г. FREE

RetroPrompt: обучение LLM по аналогии через поиск похожих примеров

КЛЮЧЕВАЯ СУТЬ
LLM пытаются запомнить все примеры в параметрах — это работает для частых паттернов, но атипичные случаи просто размазываются по весам и теряются. Особенно проваливается в few-shot сценариях на 5-10 примерах. RetroPrompt позволяет решать задачи через поиск похожих кейсов из накопленной базы — модель не зубрит, а использует внешнюю шпаргалку. Фишка: база примеров остаётся снаружи модели. Когда приходит новая задача, модель ищет 3-5 самых похожих примеров из прошлого опыта и использует их паттерны для решения. Финальный ответ = предсказание модели + голосование похожих соседей.
Адаптировать под запрос

TL;DR

RetroPrompt — метод, который улучшает работу промптов через добавление похожих примеров из "базы знаний". Суть: при решении новой задачи модель ищет самые похожие примеры из прошлого опыта и использует их как дополнительный контекст. В исследовании это делается через embeddings и kNN-поиск, но принцип работает и вручную — можно самому подбирать релевантные примеры или попросить LLM найти их.

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

RetroPrompt решает это через "открытую книгу" во время работы: создаётся хранилище примеров из тренировочных данных, модель ищет там похожие кейсы и комбинирует своё предсказание с паттернами из найденных примеров. Два ключевых момента: (1) во время обучения сложные примеры (где соседи дают разные ответы) получают больший вес; (2) во время решения задачи финальный ответ = взвешенная сумма предсказания модели + голосования ближайших соседей.


🔬

Схема метода (оригинальная — требует код)

ПОДГОТОВКА:
Для каждого примера из тренировочных данных:
→ Создать embedding через энкодер
→ Сохранить пару (embedding, правильный ответ) в базу

ОБУЧЕНИЕ:
Для каждого нового примера:
→ Найти k ближайших соседей в базе
→ Если соседи дают противоречивые ответы → пример сложный → увеличить вес в обучении
→ Обновлять embeddings в базе каждую эпоху

ИНФЕРЕНС:
Для новой задачи:
→ Найти k ближайших примеров
→ Взять предсказание модели P_model
→ Взять "голосование" соседей P_knn
→ Финальный ответ = λ × P_model + (1-λ) × P_knn

🚀

Пример применения (адаптированный принцип)

Задача: Классифицируешь отзывы клиентов на "позитивный"/"негативный"/"нейтральный" для российского маркетплейса. Уже обработал 50 отзывов вручную, теперь пришёл новый сложный отзыв: "Товар норм, но доставка — вообще жесть, курьер хамло".

Промпт (ручная имплементация принципа):

У меня есть база размеченных отзывов. Новый отзыв: "Товар норм, но доставка — вообще жесть, курьер хамло".

ШАГ 1: Найди 3 самых похожих отзыва из моей базы (прикладываю):
[вставить свою базу из 50 размеченных отзывов]

ШАГ 2: Для каждого похожего отзыва объясни:
- Почему он похож на новый
- Какую метку я ему дал
- Есть ли противоречия между похожими (например, похожие отзывы с разными метками)

ШАГ 3: Если нашёл противоречия — это сигнал сложного случая. Объясни подробно, почему новый отзыв ближе к одной метке, чем к другой.

ШАГ 4: Дай финальную классификацию.

Результат: Модель покажет процесс аналогового рассуждения: найдёт отзывы где хвалят товар но ругают сервис, объяснит что такие кейсы обычно маркируются как нейтральные (товар ≠ сервис), и если в базе есть противоречия (один раз пометил "негативный", другой — "нейтральный"), уделит особое внимание критериям разделения. Финальный ответ придёт с развёрнутым обоснованием через паттерны из похожих примеров.


🧠

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

Слабость LLM: Модели пытаются "зазубрить" всё в параметрах. Это работает для частых паттернов, но атипичные примеры (редкие, необычные комбинации признаков) запоминаются плохо — нейросеть просто "размазывает" их по весам. В few-shot сценариях (5-10 примеров) модель цепляется за поверхностные признаки вместо глубоких закономерностей.

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

Как метод использует это: Вместо попыток запомнить всё, модель оставляет "шпаргалку" из примеров снаружи. Когда приходит новая задача, ищет в шпаргалке похожие кейсы и использует их как дополнительные подсказки. Это разгружает параметры модели (не нужно зубрить редкие случаи) и даёт чёткий сигнал для решения (вот 3 похожих примера, действуй как в них).

Рычаги управления (для ручного применения): - Количество похожих примеров (_k_ в kNN) — для простых задач хватит 1-2, для сложных бери 5-7 - Критерий похожести — можешь попросить модель искать похожесть по разным признакам: по структуре, по теме, по tone of voice - Вес противоречивых примеров — если похожие примеры дают разные ответы, это сигнал edge case — проси модель обратить особое внимание - Обновление базы — периодически пересматривай свои примеры, убирай устаревшие, добавляй новые сложные случаи


📋

Шаблон промпта

У меня есть база примеров с решениями: {твоя_база_примеров}

Новая задача: {новая_задача}

Действуй по шагам:
1. Найди {k} самых похожих примеров из базы
2. Для каждого похожего примера объясни:
   - В чём сходство с новой задачей
   - Какое решение было в этом примере
   - Какой паттерн можно извлечь
3. Если похожие примеры имеют противоречивые решения — это сложный случай. Объясни детально почему новая задача ближе к одному решению, чем к другому.
4. Реши новую задачу, опираясь на паттерны из похожих примеров.

Плейсхолдеры: - {твоя_база_примеров} — список твоих прошлых задач с решениями (минимум 10-20 для эффекта) - {новая_задача} — задача, которую нужно решить - {k} — сколько похожих примеров искать (рекомендую 3-5)

🚀 Быстрый старт — вставь в чат:

Вот шаблон RetroPrompt для обучения по аналогии. Адаптируй под мою задачу: [опиши свою задачу и дай пример базы]. 
Задавай вопросы, чтобы настроить поиск похожих примеров.

[вставить шаблон выше]

LLM спросит какие критерии похожести важны для твоей задачи (структурные? семантические? по tone?) и сколько примеров искать — это нужно чтобы аналогии были релевантными. Она возьмёт паттерн поиска по аналогиям и адаптирует под твой домен.


🧠

Почему это работает (дополнительно)

Метафора "открытая книга": Обычный промптинг = экзамен по закрытой книге, где всё нужно держать в голове (параметрах модели). RetroPrompt = экзамен с открытым конспектом, где можно подглядеть в примеры. Исследование показало, что такой подход особенно эффективен для long-tail примеров — редких случаев, которые составляют меньшинство данных но важны для качества.

Эффект для атипичных примеров: Модель перестаёт пытаться "впихнуть" редкие случаи в общую функцию. Вместо этого она говорит: "Этот пример редкий, пойду посмотрю что делали в похожих ситуациях". Это снижает overfitting (переобучение на поверхностных признаках) в few-shot сценариях.

Комбинация параметрического и непараметрического: Модель учится общим паттернам (параметрически), но для финального решения смешивает своё предсказание с "голосованием соседей". Если модель уверена — вес её предсказания выше. Если кейс редкий/сложный — больше вес у похожих примеров. Это как совмещение интуиции (модель) и прецедентов (база примеров).


⚠️

Ограничения

⚠️ Требует достаточную базу примеров: Если у тебя меньше 10 примеров, поиск похожих не даст эффекта — нечего искать. Метод расцветает при наличии 50+ размеченных примеров.

⚠️ Ручной поиск похожести несовершенен: Ты или модель ищете похожие примеры "на глаз" по тексту, без точных embeddings. Можешь пропустить нетривиальные аналогии (например, структурно похожие, но с разными словами).

⚠️ Размер контекста: Вставка большой базы примеров в промпт съедает токены. При базе в 100+ примеров нужно либо выбирать подмножество, либо делать предварительную фильтрацию в отдельном запросе.

⚠️ Оригинальный метод требует код: Полная имплементация с embeddings, FAISS-индексами и kNN — это Python + API. Ручная адаптация проще, но менее точна.

⚠️ Может вредить на простых задачах: Если задача простая и модель уверенно знает ответ, поиск примеров и усложнение промпта только добавит шума. Используй для сложных, пограничных или редких случаев.


🔗

Ресурсы

"Retrieval-augmented Prompt Learning for Pre-trained Foundation Models" Оригинальная версия принята на NeurIPS 2022 (Spotlight) как "Decoupling Knowledge from Memorization: Retrieval-augmented Prompt Learning"

Исследователи: Xiang Chen, Yixin Ou, Quan Feng, Lei Li, Piji Li, Haibo Ye, Sheng-Jun Huang, Shuofei Qiao, Shumin Deng, Huajun Chen, Ningyu Zhang

Институты: Nanjing University of Aeronautics and Astronautics (MIIT Key Laboratory), Zhejiang University, National University of Singapore

Код и датасеты: https://github.com/zjunlp/PromptKG/tree/main/research/RetroPrompt

Связанные концепции из статьи: - kNN-LM — классический метод использования k ближайших соседей для языковых моделей - CLIP — архитектура для визуального понимания, которую адаптировали авторы - FAISS — библиотека для быстрого поиска ближайших соседей (используется в оригинальной имплементации)


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

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

LLM пытаются запомнить все примеры в параметрах — это работает для частых паттернов, но атипичные случаи просто размазываются по весам и теряются. Особенно проваливается в few-shot сценариях на 5-10 примерах. RetroPrompt позволяет решать задачи через поиск похожих кейсов из накопленной базы — модель не зубрит, а использует внешнюю шпаргалку. Фишка: база примеров остаётся снаружи модели. Когда приходит новая задача, модель ищет 3-5 самых похожих примеров из прошлого опыта и использует их паттерны для решения. Финальный ответ = предсказание модели + голосование похожих соседей.

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

Не заставляй модель держать все примеры в голове — дай открытый конспект. Принцип работы: перед решением задачи модель ищет похожие кейсы из базы и берёт оттуда паттерны. Если похожие примеры дают противоречивые ответы (один раз пометил «негативный», другой — «нейтральный») — это сигнал сложного случая, модель уделяет особое внимание критериям. Метафора: обычный промптинг = экзамен по закрытой книге, RetroPrompt = экзамен с конспектом перед глазами.

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

Модели отлично работают с контекстом в промпте, но плохо запоминают редкие случаи в параметрах. Разделение ролей: модель учит общие паттерны, а конкретные примеры хранятся снаружи. Это разгружает параметры (не нужно впихивать редкие кейсы в веса) и даёт чёткий сигнал для решения. Исследование показало особый эффект для long-tail примеров — редких случаев, которые составляют меньшинство данных. Вместо переобучения на поверхностных признаках модель говорит: "Этот пример редкий, посмотрю что делали в похожих ситуациях".

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

Задачи где накопилась база примеров с решениями → конкретно для классификации текстов (отзывы, обращения клиентов, модерация контента), подбора решений по кейсам, анализа нестандартных ситуаций, особенно когда встречаются пограничные случаи или редкие комбинации признаков. НЕ подходит для простых задач где модель и так уверенно знает ответ — поиск аналогий только добавит шума. Требует минимум 50+ размеченных примеров для эффекта.

Мини-рецепт

1. Собери базу: Возьми свои прошлые задачи с решениями (минимум 50 примеров, чем больше — тем лучше). Структурируй: пример → решение → критерий выбора.

2. Настрой поиск похожести: Реши по каким признакам искать аналогии — по структуре текста, по семантике, по tone of voice, по комбинации факторов. Для простых задач достаточно 1-2 примера, для сложных бери 5-7.

3. Создай промпт с шагами: Эксперт по аналогиям. Шаг 1: найди k похожих примеров из базы. Шаг 2: для каждого объясни сходство и решение. Шаг 3: если есть противоречия между похожими — это edge case, разбери детально. Шаг 4: реши новую задачу.

4. Обновляй базу: Периодически пересматривай примеры — убирай устаревшие, добавляй новые сложные случаи где модель ошиблась.

Примеры

[ПЛОХО] : Классифицируй отзыв: "Товар норм, но доставка жесть, курьер хамло" → позитивный/негативный/нейтральный
[ХОРОШО] : У меня база из 50 размеченных отзывов [вставить базу]. Новый отзыв: "Товар норм, но доставка жесть, курьер хамло". ШАГ 1: Найди 3 самых похожих отзыва из базы. ШАГ 2: Для каждого объясни: почему похож, какую метку я дал, есть ли противоречия между похожими. ШАГ 3: Если нашёл противоречия (похожие отзывы с разными метками) — это сигнал сложного случая, объясни подробно почему новый отзыв ближе к одной метке. ШАГ 4: Дай финальную классификацию с обоснованием через паттерны из похожих примеров.
Источник: Retrieval-augmented Prompt Learning for Pre-trained Foundation Models
ArXiv ID: 2512.20145 | Сгенерировано: 2026-01-09 00:36

Методы

МетодСуть
Поиск похожих примеров из базы перед решением — для атипичных и пограничных случаевПеред новой задачей: найди k=3-5 похожих примеров из своей базы (минимум 50+ примеров). Промпт: Найди N похожих примеров из базы объясни сходство с новой задачей извлеки паттерны реши по аналогии. Если похожие примеры дают разные ответы — сигнал сложного случая, проси детальное обоснование выбора. Работает: информация прямо в контексте > обобщение через параметры для редких/необычных комбинаций признаков. Для: классификация с накопленной базой, модерация контента, анализ обращений, повторяющиеся задачи. НЕ для: простые задачи где модель уверенно знает ответ (добавит шума), базы <10 примеров (нечего искать). Ограничение: ручной поиск похожести без embeddings менее точен; большая база (100+ примеров) ест много токенов контекста

Тезисы

ТезисКомментарий
Для редких случаев примеры в промпте работают надёжнее чем попытки обучить модельМодель плохо обобщает атипичные паттерны в параметрах — "размазывает" их по весам, получается overfitting на поверхностные признаки. External retrieval даёт конкретные прецеденты без зубрёжки. Применяй: для пограничных/необычных случаев держи базу размеченных примеров (50+) и ищи похожие через промпт вместо generic few-shot
📖 Простыми словами

RetroPrompt: обучение LLM по аналогии через поиск похожих примеров

arXiv: 2512.20145

Суть RetroPrompt в том, что нейросети, несмотря на всю свою мощь, на самом деле обладают довольно дырявой памятью. Когда модель учится, она пытается «зазубрить» мир целиком, превращая знания в статистические веса. Это отлично работает для стандартных ситуаций, но как только попадается атипичный пример или редкий случай, модель начинает «плыть» и выдавать галлюцинации. Она просто размазывает редкие данные по общему фону, теряя детали, которые и делают ответ правильным.

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

Что реально работает в этом методе: использование embeddings для поиска релевантности и добавление дополнительного контекста в промпт. Исследователи доказали, что даже 5–10 примеров, подобранных не абы как, а по принципу максимального сходства с текущей задачей, на голову разбивают стандартный подход. Модель перестает цепляться за поверхностные признаки и начинает видеть глубокую логику, потому что перед глазами есть живой пример того, как надо.

Тестировали это на классических задачах для LLM, но принцип универсален. Это работает везде: от написания кода до юридических консультаций. Если ты просишь нейронку составить договор, не надейся на её «общие знания». Найди три похожих договора, закинь их в промпт и скажи: «сделай по аналогии». Это и есть ручной RetroPrompt. Ты превращаешь модель из теоретика, который всё забыл, в практика с открытым справочником на нужной странице.

Короче: хватит верить в то, что нейросеть — это всезнающий оракул. Это просто очень мощный движок, которому нужны актуальные примеры здесь и сейчас. RetroPrompt доказывает, что внешняя память и точный подбор контекста важнее, чем размер самой модели. Хочешь качественный результат — не заставляй её вспоминать, а дай ей на что опереться. Иначе получишь уверенный бред вместо решения.

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

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

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