За два дня почти пересобрал память для своей AI Nova
Продолжаю делать своего локального AI-ассистента Nova. Это не просто чат-бот, а попытка собрать помощника, который умеет помнить важные вещи, понимать контекст и постепенно становиться чем-то более живым, чем обычная обёртка над моделью.
Последние два дня я занимался одним из самых важных блоков - памятью.
Раньше память у Nova была довольно простой. Всё хранилось в обычном JSON-файле. Для первых тестов этого хватало, но чем дальше развивается проект, тем больше становится понятно: такая память быстро превращается в свалку.
Появляются дубли, старые записи мешают новым, сложно нормально искать нужное, неудобно делать фильтры, бэкапы и управление через интерфейс. В общем, для прототипа норм, для живого ассистента уже нет.
Поэтому я перевёл память на SQLite.
Теперь у Nova есть нормальная Memory 3.0. Это уже не просто файл с набором строк, а полноценная база, с которой можно нормально работать. Она умеет сохранять факты о пользователе, вытаскивать нужное в контекст, не тащить в prompt всё подряд и не засорять ответ лишней информацией.
Самое приятное - память уже подключена к ядру Nova.
То есть пользователь пишет сообщение, Nova отвечает, а потом отдельный модуль аккуратно вытаскивает из диалога важные факты и сохраняет их. Например, имя, предпочтения, рабочие моменты, заметки по проекту или важные решения.
При этом я разделил разные типы памяти. Одно дело - запомнить, как зовут пользователя или что он не любит. Другое - сохранить итог сессии, важное решение по проекту или эмоционально значимый момент. Теперь этим занимаются разные части системы, и из-за этого память стала намного чище.
Ещё важный момент - Nova теперь не просто “помнит всё”, а пытается доставать именно то, что нужно под текущий вопрос.
Если спросить что-то обычное, она не будет тащить в контекст половину базы. А если спросить “что ты обо мне помнишь?” или заговорить про конкретный проект, она достанет больше релевантных воспоминаний.
Параллельно я обновил веб-интерфейс. Теперь память можно смотреть, редактировать, архивировать, восстанавливать и удалять уже через UI. Плюс добавил нормальную подгрузку по страницам, чтобы база не вываливалась целиком, когда записей станет много.
Отдельно сделал нормальные бэкапы. С SQLite нельзя просто копировать файл базы как попало, особенно если используется WAL. Поэтому бэкап теперь делается правильным способом, через SQLite backup API.
Старую память я полностью не выкинул. Она осталась как legacy-слой, чтобы старые части проекта не сломались. Но активной памятью теперь считается уже новая система.
В итоге Memory 3.0 можно считать рабочим закрытым блоком. Nova уже пишет в новую память, читает из неё, использует её в prompt, показывает в веб-интерфейсе и умеет обслуживать её без ручного ковыряния файлов.
Следующий крупный этап - модульная архитектура.
Хочу, чтобы Nova не была комбайном, где всё включено всегда. Голос, экран, аватар, музыка, генерация картинок, Telegram, Discord, VK и другие тяжёлые функции должны быть отдельными модулями. Нужно - включил. Не нужно - выключил, и оно не ест ресурсы.
Так проект постепенно превращается из набора экспериментов в более нормальную систему.
За эти два дня ощущение такое: память наконец перестала быть костылём и стала фундаментом, на котором уже можно строить дальше.



Лига программистов
2.2K поста12K подписчик
Правила сообщества
- Будьте взаимовежливы, аргументируйте критику
- Приветствуются любые посты по тематике программирования
- Если ваш пост содержит ссылки на внешние ресурсы - он должен быть самодостаточным. Вариации на тему "далее читайте в моей телеге" будут удаляться из сообщества