Ваша RAG-система глупеет с каждым запросом. И это нормально
Представьте: вы собрали идеального AI-ассистента на локальной LLM. Он знает вашу документацию, отвечает на вопросы по коду, помнит все нюансы проекта. Проходит неделя активного использования — и он начинает путать базовые понятия. Вчерашний эксперт сегодня не может отличить API-ключ от переменной окружения.
Это не баг. Это Model Collapse — катастрофическое забывание, которое съедает RAG-системы изнутри. К февралю 2026 года проблема стала настолько острой, что каждый второй продвинутый локальный RAG страдает от этой болезни.
Model Collapse — это когда нейросеть в RAG-системе постепенно "забывает" редко используемые, но важные концепции, заменяя их более частыми шаблонами из диалоговой истории. Система деградирует, хотя база знаний остаётся нетронутой.
Почему традиционный RAG не справляется?
Стандартные RAG-архитектуры работают по принципу "спросил-получил". Векторный поиск находит релевантные чанки, LLM генерирует ответ. Кажется, всё логично.
Но есть подвох: контекстное окно модели заполняется в основном диалоговой историей и найденными чанками. Редкие, но фундаментальные концепции из базы знаний просто не попадают в этот поток. Модель их не "видит" неделями, а нейросети, как и люди, забывают то, чем не пользуются.
Особенно критично это в ресурсоограниченных системах, где контекстное окно — драгоценный товар. Вы не можете просто запихнуть туда всю базу знаний "на всякий случай".
Dreaming Engine: принцип "Антигравитации"
Идея родилась из простого наблюдения: если модель забывает то, что редко использует, нужно заставить её это использовать. Но не случайно, а системно.
Dreaming Engine работает на основе Inverse Graph Traversal (обратного обхода графа). Представьте вашу базу знаний как граф, где узлы — концепции, а рёбра — связи между ними. Традиционный RAG идёт от запроса к ответу (прямой обход). Dreaming Engine делает наоборот.
Система постоянно мониторит, какие концепции из базы знаний реже всего появляются в диалогах. Не те, которые реже всего ищутся (они могут быть просто неактуальны), а те, которые должны быть релевантны, но почему-то игнорируются.
1 Сбор метрик забывания
Каждый узел графа (концепция, документ, фрагмент кода) получает счётчик "времени с последнего упоминания". Не просто временную метку, а взвешенный показатель, который учитывает:
- Количество связей с другими узлами
- Важность (определяется через центральность в графе)
- Историческую частоту использования
- Семантическую близость к текущим диалоговым трендам
2 Обратный обход: от забытого к актуальному
Вот где начинается магия. Система берёт концепцию с максимальным "счётом забывания" и строит путь к тому, о чём пользователь спрашивает прямо сейчас.
Пример: пользователь спрашивает про оптимизацию SQL-запросов в PostgreSQL. База знаний содержит редкую, но важную документацию по особенностям индексов GIN для полнотекстового поиска. Эту тему не касались три недели.
Dreaming Engine находит путь: "SQL оптимизация" → "индексы PostgreSQL" → "специальные типы индексов" → "GIN индексы". И искусственно вплетает информацию о GIN в контекст, даже если прямой запрос этого не требовал.
3 Активное повторение без назойливости
Ключевой трюк — система не говорит: "Эй, вот тебе информация о GIN индексах, которую ты забыл". Она строит ответ так, что эта информация становится естественной частью объяснения.
Вместо сухого "используйте индексы" вы получаете: "Для вашего случая с полнотекстовым поиском обычные B-tree индексы не оптимальны — здесь лучше подойдут GIN индексы, которые специально разработаны для массивов и полнотекстовых данных. Кстати, в последнем обновлении PostgreSQL 17 улучшили их параллельную обработку..."
Эксперимент: Древний Рим и Python в одной голове
Мы протестировали Dreaming Engine на абсурдном, но показательном кейсе. Одна RAG-система, две несвязанные темы: история Древнего Рима и программирование на Python.
База знаний содержала 1000 документов по каждой теме. В течение двух недель система отвечала только на вопросы про Python. Классический RAG начал "забывать" римские термины уже на пятый день. К десятому дню модель путала Цезаря с Цицероном, сенат с синодом.
Dreaming Engine с Inverse Graph Traversal работал иначе. Когда пользователь спрашивал про декораторы в Python, система находила путь к "редким" римским концепциям через абстрактные связи:
- Декораторы (паттерн проектирования) → архитектурные паттерны → римская архитектура → римские инженеры
- Исключения (exception handling) → системы управления ошибками → римское право → Законы XII таблиц
Результат: через две недели система сохранила 94% точности по римской истории, против 41% у классического RAG. При этом качество ответов по Python не пострадало — потому что повторение было контекстным, а не механическим.
| Метрика | Классический RAG | Dreaming Engine |
|---|---|---|
| Точность по редким темам (14 дней) | 41% | 94% |
| Скорость деградации | 4.2% в день | 0.4% в день |
| Накладные расходы на контекст | 0% (но деградация) | 8-12% токенов |
Как внедрить в существующий RAG?
Хорошая новость: вам не нужно переписывать всю систему. Dreaming Engine — это слой поверх вашего текущего RAG.
Шаг 1: Постройте граф знаний. Если у вас уже есть векторная база, добавьте поверх неё графовое представление. Каждый чанк — узел. Связи определяются через:
- Ссылки в документах
- Семантическую близость (косинусное расстояние эмбеддингов)
- Ко-вхождение в запросах пользователей
Шаг 2: Внедрите счётчики забывания. Простая хэш-таблица: node_id → timestamp_last_mentioned, mention_count, importance_score.
Шаг 3: Модифицируйте пайплайн формирования контекста. После того как векторный поиск нашёл релевантные чанки, запустите Inverse Graph Traversal:
- Найдите 3-5 наиболее "забытых" узлов, семантически связанных с запросом
- Постройте кратчайшие пути от этих узлов к найденным релевантным чанкам
- Выберите 1-2 лучших пути (с наибольшей совокупной важностью узлов)
- Добавьте узлы из этих путей в контекст, но не все — только ключевые
Шаг 4: Настройте баланс. Слишком агрессивное "напоминание" раздражает. Слишком слабое — не работает. Стартуйте с 10% токенов контекста, выделенных под Dreaming Engine, и корректируйте по метрикам.
Критически важный момент: Dreaming Engine должен работать асинхронно и не блокировать основной пайплайн ответа. Пользователь не должен ждать, пока система обойдёт весь граф. Кэшируйте пути и обновляйте счётчики в фоне.
С чем сочетать, а с чем — нет
Dreaming Engine — не серебряная пуля. Это специализированный инструмент для конкретной проблемы.
Идеально сочетается с:
- Acatalepsy для борьбы с временными искажениями
- Гибридным поиском из RAG 2026 roadmap
- Агентными архитектурами, где контекст особенно ценен
Бесполезен для:
- Простых QA-систем с маленькой базой знаний
- Ситуаций, где важнее скорость, чем долгосрочная консистентность
- Систем без чёткой структуры знаний (хаотичные документы)
Кому это нужно прямо сейчас?
Если вы киваете, читая это — вам уже пора внедрять.
Первая категория: корпоративные RAG-ассистенты. Те самые, которые ломаются в бизнес-среде через месяц работы. Когда новый сотрудник спрашивает про устаревший, но ещё действующий процесс, а система его "забыла" — это прямые убытки.
Вторая: образовательные платформы. Student A весь месяц спрашивает про дифференциальные уравнения. Student B появляется через месяц и спрашивает про тригонометрию, которую система "забыла", пока занималась уравнениями. Dreaming Engine поддерживает баланс.
Третья: разработчики нишевых продуктов. Ваша RAG-система для юристов знает все последние поправки, но забыла базовые статьи ГК РФ. Для врачей помнит новые исследования, но путает симптомы базовых заболеваний. Inverse Graph Traversal держит фундамент на плаву.
О чём молчат в исследованиях
Почитайте свежие обзоры по RAG — про Model Collapse говорят вполголоса. Потому что это неудобная проблема. Она проявляется не сразу, а через недели работы. В академических экспериментах системы тестируют часами, а не месяцами.
Ещё один грязный секрет: многие продакшен-системы уже имеют примитивные аналоги Dreaming Engine. Просто они называются "периодическое переобучение" или "регулярные инъекции контекста". Но делают это тупо, сбрасывая в контекст случайные чанки раз в день. Эффективность — 30% от Inverse Graph Traversal.
Самая большая ловушка: оптимизация под метрики. Вы измеряете accuracy на тестовом наборе — всё отлично. Но тестовый набор не отражает реальное распределение запросов за месяц. Редкие, но важные вопросы в него не попадают. Система их "забывает", а метрики этого не показывают.
Что будет дальше?
К концу 2026 года Inverse Graph Traversal станет стандартной фичей в фреймворках типа LlamaIndex и LangChain. Пока же приходится собирать самому.
Следующий шаг — предсказательное "сновидение". Система будет не просто вспоминать забытое, а предугадывать, что пользователь может спросить завтра, и готовить контекст сегодня. Звучит как фантастика, но прототипы уже есть.
А самый интересный тренд — персональные коэффициенты забывания. Ваша система знает, что вы, как разработчик, редко спрашиваете про дизайн-паттерны, но часто — про оптимизацию. Она будет активнее "напоминать" вам про паттерны, потому что для вас они в группе риска. Для дизайнера — наоборот.
Пока все обсуждают агентов и сложные пайплайны, настоящая битва идёт за фундамент. За то, чтобы система через месяц работы не превратилась в эхо-камеру, повторяющую только то, что слышала вчера.
Dreaming Engine — это не про умные ответы. Это про то, чтобы завтрашний ответ был не глупее вчерашнего. А в мире, где RAG становится инфраструктурой, это важнее любой крутой фичи.