Módulo NGT Memory mostra como dar memória persistente a LLM sem banco de dados vetorial
NGT Memory é um módulo de memória open-source para LLM que armazena fatos sobre o usuário entre sessões e os injeta nas respostas do modelo. Internamente: busca

Open-source проект NGT Memory предлагает более практичный ответ на старую проблему LLM: как не забывать важные факты о пользователе между сессиями. Вместо бесконечного расширения контекста модуль сохраняет факты, собирает профиль и подмешивает память в ответ модели.
Как устроена память
Автор проекта исходит из простой мысли: хранить всю историю диалога в контекстном окне удобно только до первого лимита токенов. Дальше начинаются обрезка старых сообщений, суммаризация с потерей деталей или подключение внешней векторной базы с лишней инфраструктурой. NGT Memory предлагает другой путь: память живёт прямо в Python-процессе, поднимается через REST API и Docker и не требует отдельной БД на старте. Идея в том, чтобы извлекать не весь разговор, а только факты, которые реально нужны модели в текущем запросе.
- Косинусное сходство ищет близкие по смыслу факты * Ассоциативный граф связывает концепты вроде «вегетарианец» и «рестораны»
- Иерархическая консолидация продвигает часто используемые факты в долгую память * Структурированный профиль выносит возраст, город, диету и аллергию в отдельные слоты Поверх текстовой памяти модуль строит ещё и профиль пользователя. Если человек пишет разрозненно, система может склеить фрагменты вроде «мне» + «30» + «лет» в один осмысленный факт и сохранить его с пониженной уверенностью. Если позже возникает конфликт, например возраст внезапно уменьшается, обновление блокируется до явного исправления вроде «я ошибся». За счёт этого память ведёт себя не как пассивный лог, а как слой валидации, который пытается отличать реальные пользовательские данные от случайного шума.
Результаты тестов
Самое интересное в статье — не архитектура сама по себе, а проверка на практических сценариях. В одном эксперименте с медицинским помощником, персональным ассистентом и техподдержкой режим с памятью поднял фактуальную точность с 1.22 до 2.44 балла из 3. В более жизненном A/B-тесте память выиграла 17 из 18 оценок, а средняя оценка ответа составила 0.889 против 0.056 без памяти. Отдельно автор прогнал 54 проверки на краевых случаях и получил 51 успешный результат, то есть около 94%.
«Ответ на мусор — тоже мусор».
Эта формула хорошо объясняет ещё один важный слой системы: фильтр качества. В память не попадают короткие бессмысленные сообщения, чистые числа, спецсимволы и даже ответы ассистента на такой мусор. Иначе полезные факты быстро утонут в шуме. Такой фильтр особенно важен для чат-ботов и агентных систем, где пользователь часто пишет обрывками, а сама модель склонна генерировать вежливые, но пустые фразы, которые только засоряют выдачу при следующем поиске по памяти.
Главные ограничения
Несмотря на хорошие результаты, NGT Memory пока нельзя назвать готовой универсальной памятью для production без оговорок. Текущая версия хранит всё в оперативной памяти одного процесса, поэтому после перезапуска контейнера состояние теряется. При запуске нескольких воркеров возникает ещё одна проблема: каждый держит собственное хранилище сессий, и запрос на сохранение может попасть в один процесс, а запрос на извлечение — в другой.
В тестах локальная память работает быстро — около 2–3 мс на CPU, но основную задержку всё равно дают внешние вызовы эмбеддингов и чата, которые занимают сотни миллисекунд. Автор отдельно описывает и более приземлённые баги. Слишком мягкий system prompt приводил к тому, что модель видела память, но игнорировала её как необязательную подсказку.
После ужесточения инструкции ответы стали стабильнее. Ещё один неприятный кейс дал regex для извлечения имени: шаблон вида I’m + name начинал принимать за имя слова вроде allergic. Такие детали хорошо показывают, что память для LLM упирается не только в retrieval, но и в массу мелких правил, без которых демо быстро разваливается в реальном диалоге.
Что это значит NGT
Memory показывает полезный сдвиг в подходе к LLM-приложениям: памяти недостаточно быть «умной», ей нужно быть проверяемой, дешёвой и устойчивой к мусору. Для разработчиков ботов и AI-агентов это хороший сигнал, что слой долговременного контекста уже можно собирать как отдельный инженерный модуль, а не как набор разрозненных костылей.