Self-Recall Thinking: как LLM учатся вспоминать, а не заучивать
Представьте разговор с клиентской поддержкой, который длится сорок минут. Вы назвали номер заказа в третьей реплике, уточнили адрес доставки в двенадцатой, а в тридцать пятой спрашиваете: «А когда же привезут?» Большинство современных чат-ботов либо запрашивают номер заказа заново, либо тратят время на обработку всей истории — включая ваши пять «спасибо» и три уточнения о погоде. Исследователи из Университета электронных наук и технологий Китая предложили решение, которое лишено обеих проблем. Self-Recall Thinking (SRT) — это фреймворк, который учит языковую модель самостоятельно выбирать, какие реплики из прошлого стоит вспомнить, и использовать их для точного ответа.
Что такое Self-Recall Thinking
SRT — это метод обучения многоходового диалога, который не требует ни внешней базы памяти, ни итеративной суммаризации истории. Вместо этого модель обучается внутренней политике указателей: во время chain-of-thought рассуждения она может «вспомнить» конкретную историческую реплику, скопировав её дословно в свой процесс мышления через специальный тег <HIS>. Эта скопированная реплика напрямую участвует в формировании ответа, но при этом не требует ни векторного поиска, ни графа знаний, ни дополнительной латентности.
Ключевая инновация — в механизме обучения. Авторы используют трёхстадийный пайплайн. На нулевой стадии Claude 3.7 Sonnet строит структуру зависимостей в диалоге: какие исторические реплики необходимы для ответа на каждый текущий вопрос. На первой стадии модель проходит supervised fine-tuning, учась генерировать теги <HIS> с правильными репликами. На второй стадии применяется GRPO — Group Relative Policy Optimization — с верифицируемой наградой, которая оценивает точность вспоминания и качество ответа как единую оптимизационную задачу.
Результат — модель, которая не просто «видит» историю, а активно выбирает из неё релевантные фрагменты. Это принципиально отличается от стандартного attention, где все токены истории обрабатываются равномерно и шум от нерелевантных реплик размывает сигнал.
Почему длинный контекст и RAG не спасают диалог
Существующие подходы к памяти в диалоговых системах делятся на два лагеря, и у обоих серьёзные ограничения. Первый — внешнее кэширование: векторные базы, графы знаний, иерархические индексы вроде DH-RAG или агентные системы вроде A-MEM. Они работают, но добавляют латентность на каждый запрос: сначала ретрив, потом ранжирование, потом вставка в контекст. Для клиентской поддержки, где ответ должен приходить за секунды, это критично. Кроме того, внешние системы требуют инфраструктуры — индексации, синхронизации, масштабирования — и плохо справляются с неявными зависимостями, когда нужная информация размазана по нескольким репликам.
Второй лагерь — латентная эволюция состояния: методы вроде Coconut или OPRO, которые учат модель поддерживать компактное скрытое состояние, эволюционирующее вместе с диалогом. Это элегантно, но теряет детали. Когда модель сжимает двадцать реплик в вектор фиксированного размера, номер заказа и адрес доставки конкурируют за одни и те же параметры. Итеративная суммаризация решает проблему частично, но каждый раунд рефрейминга добавляет искажения — и через пять итераций точные детали превращаются в приблизительные.
SRT занимает промежуточную позицию: он не хранит память вне модели и не сжимает её в латентный вектор. Вместо этого модель обучается указывать на конкретные реплики в истории и дословно копировать их в своё рассуждение. Это даёт точность внешнего ретривала без его латентности и гибкость латентного состояния без потери деталей.
Почему внимание само по себе не справляется
Стандартный механизм внимания в Transformer обрабатывает все токены входной последовательности равномерно. Теоретически attention может присвоить высокий вес релевантным токенам и низкий — нерелевантным. На практике в длинных диалогах это работает плохо по трём причинам. Во-первых, размывание внимания: когда история содержит сотни токенов, softmax по всему контексту даёт очень плоские распределения, и ни один токен не получает доминирующего веса. Во-вторых, позиционное смещение: более ранние реплики получают экспоненциально меньше внимания, потому что градиенты при обратном распространении затухают с расстоянием. В-третьих, шумовые ассоциации: модель начинает связывать текущий запрос с недавними, но семантически близкими репликами, даже если ответ требует факта из начала разговора.
SRT решает эти проблемы через явное вспоминание. Вместо того чтобы надеяться, что attention «найдёт» нужную реплику, модель генерирует операцию recall — тег <HIS> — который дословно вставляет выбранную реплику в рассуждение. Это превращает неявный поиск в явный выбор, исключая конкуренцию за внимание и позиционное затухание. Вспомненная реплика становится частью chain-of-thought и напрямую влияет на генерацию ответа, независимо от того, на каком расстоянии она находилась в оригинальном диалоге.
Как работает трёхстадийное обучение
Первая стадия — построение зависимостей — критична для качества обучающих данных. Авторы отбирают диалоги, где текущий вопрос зависит от исторических реплик, используя двумерную функцию скоринга: 60% семантическое сходство между вопросом и исторической репликой плюс 40% экспоненциальное затухание по расстоянию в_turnах. Порог — 0.6. Это означает, что реплика десятиходовой давности должна быть семантически очень релевантной, чтобы попасть в обучающую выборку. Затем Claude 3.7 Sonnet генерирует целевые рассуждения: какие реплики нужно вспомнить и почему.
Вторая стадия — supervised fine-tuning с прунингом. Чтобы модель не тонула в длинном контексте на ранних этапах обучения, авторы сначала обучают на «обрезанных» историях: в контекст оставляют только те реплики, которые действительно нужны для ответа. Модель учится генерировать <HIS> теги и ответы на этих упрощённых примерах. Затем происходит трансфер на полные контексты: модель применяет выученную стратегию вспоминания к диалогам с полной историей, включая шум и нерелевантные реплики. Этот двухфазный подход предотвращает overfitting на поверхностные паттерны.
Третья стадия — GRPO-выравнивание с верифицируемой композитной наградой. Награда состоит из двух частей: точности вспоминания (Jaccard Index между предсказанным и золотым множеством реплик, масштабированный в диапазон [−1.25, 1.25]) и точности ответа (бинарная: правильно или нет). GRPO оптимизирует политику, сравнивая несколько сэмплов из одного батча и усиливая те, которые дают лучшее соотношение награды к вероятности. KL-дивергенция регуляризует политику, не позволяя ей слишком далеко отклоняться от SFT-базовой модели.
Цифры: где SRT выигрывает и почему
Основные эксперименты проводились на трёх бенчмарках: SRQA (диалоговый QA с длинной историей), CoQA (конversational question answering) и SimpleQA. Во всех случаях SRT показал оптимальный баланс точности и скорости. На SRQA — 78.4 F1 при 9.1 секундах латентности. На CoQA — 84.0 F1 при 8.8 секундах. На SimpleQA — 56.1 F1 при 8.7 секундах. Для сравнения, сильнейший бейзлайн Coconut набрал 75.0 F1 на SRQA, но при этом потребовал 10.5 секунд. RQ-RAG на SimpleQA остановился на 53.6 F1 и 14.8 секундах — почти вдвое медленнее SRT.
Абляционное исследование подтверждает вклад каждого компонента. Удаление RL-стадии снизило точность вспоминания с 92.5% до 85.3% и точность ответа с 78.9% до 74.1% — падение на 7.2 и 4.8 процентных пункта соответственно. Отключение CoT-модуля ухудшило результат на 3.4 пункта. Даже удаление SFT-стадии — переход к обучению с нуля на RL — дало 81.0% точности вспоминания и 72.2% точности ответа, что всё ещё выше многих бейзлайнов, но заметно ниже полной версии. Это говорит о том, что SFT задаёт правильную инициализацию, а GRPO доводит политику до оптимума.
Анализ распределения внимания показывает, что SRT действительно перераспределяет фокус модели. Визуализация attention maps демонстрирует: когда модель генерирует <HIS> тег, её декодерное внимание концентрируется на вспомненных репликах, а не размывается по всей истории. Это подтверждает, что механизм работает не как декларативная инструкция, а как реальная когнитивная операция — выборочное извлечение релевантной памяти.
Почему диалоги длиннее — ошибки меняют характер
Один из самых интересных результатов — анализ ошибок в зависимости от длины диалога. Авторы разбили неудачные случаи на четыре категории: Missing Recall (не вспомнили нужную реплику), Over Recall (вспомнили лишнее), Wrong Recall (вспомнили не ту реплику) и Failure Answer (вспомнили правильно, но ответили неверно). При увеличении длины диалога с 8 до 32 реплик доля Missing Recall растёт с 23.5% до 35.9%, а доля Failure Answer падает с 56.1% до 38.8%.
Это означает, что основная проблема длинных диалогов — не в генерации ответа, а в поиске нужной информации. Когда диалог короткий, модель часто находит релевантную реплику, но ошибается в интерпретации. Когда диалог длинный, модель просто не находит реплику среди шума. Именно здесь SRT даёт максимальный выигрыш: его механизм самовспоминания устойчиво выбирает нужные реплики даже при 32+_turnах истории, тогда как бейзлайны либо теряются в контексте, либо тратят время на обработку всей истории.
Авторы также отмечают типичный сценарий провала: номер заказа или аккаунт сообщают в ранних репликах, а запрашивают десятки реплик спустя, после того как разговор ушёл в сторону — мелкие уточнения, светская беседа, уточнение деталей. Стандартные модели «забывают» эти ранние факты, потому что они тонут в паразитном контексте. SRT сохраняет способность извлекать их через механизм указателей.
SRT как плагин: работает даже с закрытыми API
Возможно, самый практически важный эксперимент — внешняя оценка стратегии SRT как плагина (SRT-P). Авторы взяли три закрытые модели — Claude 3.5 Sonnet, DeepSeek-V3 и Qwen-Max — и заставили их использовать SRT-стратегию через промптинг, без дообучения. Результат: улучшение на 1.7–2.7% в многоходовых сценариях (24+ реплик) для всех трёх моделей. DeepSeek-V3 получил +2.7%, Qwen-Max +2.3%, Claude 3.5 Sonnet +1.7%.
Это критически важно для продакшена. Не нужно ждать, пока провайдер API встроит SRT в свою модель. Достаточно добавить в системный промпт инструкцию: «При ответе на вопросы в длинном диалоге вспоминайте релевантные исторические реплики, используя тег
Для разработчиков чат-ботов это означает, что можно прямо сейчас улучшить качество обработки длинных диалогов без смены модели, без дообучения и без добавления внешней инфраструктуры. Стоимость — лишь небольшое увеличение длины промпта и, возможно, небольшой рост латентности из-за генерации тегов
Часто задаваемые вопросы
Чем SRT отличается от обычного RAG в диалоге?
RAG извлекает релевантные фрагменты через векторный поиск и вставляет их в контекст. SRT не использует внешний поиск: модель сама решает, какие реплики вспомнить, и копирует их дословно в процесс рассуждения. Это устраняет латентность ретривала и ошибки ранжирования, но требует дообучения модели на диалоговых данных.
Можно ли применить SRT к существующей модели без дообучения?
Частично. Авторы показали, что стратегия SRT-P — простое промптирование с инструкцией использовать тег
Какие сценарии выигрывают от SRT больше всего?
Клиентская поддержка, медицинские консультации, юридические интервью — любые сценарии, где диалог длится десятки реплик и ответ на текущий вопрос зависит от фактов, упомянутых в начале разговора. Чем длиннее диалог и чем более разрознен контекст, тем больше выигрыш от селективного вспоминания.
Почему SRT снижает латентность, если модель всё ещё обрабатывает всю историю?
Модель действительно видит всю историю, но не обрабатывает её одинаково. В стандартном режиме attention распределяется по всем токенам, и модель тратит вычисления на релевантные и нерелевантные фрагменты поровну. В SRT модель сначала генерирует краткое рассуждение с тегами
Может ли SRT заменить внешнюю память в агентных системах?
Нет полностью. SRT эффективен для внутридиалогового вспоминания — когда все релевантные реплики находятся в текущей сессии. Для межсессионной памяти, когда агент должен помнить факты из разговоров недельной давности, всё ещё нужны внешние механизмы. Однако SRT можно комбинировать с внешней памятью: внешний модуль извлекает релевантные сессии из прошлого, а SRT выбирает конкретные реплики внутри каждой сессии. Это гибридная архитектура, которая сохраняет преимущества обоих подходов.
Итог
Self-Recall Thinking предлагает элегантное решение проблемы, которую многие считали неизбежной: как сохранять точность в длинных диалогах без внешней памяти и без линейного роста вычислений. Вместо гонки за миллионами токенов контекста или гигантскими векторными хранилищами авторы показывают, что можно научить модель самой выбирать, что вспомнить. Результаты — 78.4 F1 на SRQA, 84.0 F1 на CoQA, снижение латентности на 11–15% — говорят сами за себя.
Для инженеров это означает, что качество диалоговых систем можно улучшить не только масштабом, но и архитектурой обучения. Для исследователей SRT открывает направление «обучаемого вспоминания»: вместо того чтобы проектировать сложные механизмы ретривала, можно учить модель внутренней политике указателей на собственную историю. Это проще, быстрее и, как показывают эксперименты, эффективнее.