Забытая память: почему бот не помнил ключевых фактов

Включи память: или как я нашёл потерянный ключ в своём же коде
Проблема началась с простого вопроса пользователя: «Помнишь, я вчера рассказывал про своего кота?» Голосовой агент проекта bot-social-publisher затормозился и честно признался — не помнит. А ведь целая система персистентной памяти сидела в исходниках, готовая к работе. Задача казалась острой: почему бот забывает своих пользователей?
Когда я открыл архитектуру, глаза разбежались. Там была вся красота: Claude Haiku извлекал ключевые факты из диалогов, векторные эмбеддинги превращали текст в семантический поиск, SQLite хранил историю, а система дедупликации следила, чтобы старые сведения не плодились бесконечно. Всё это было написано, протестировано, готово к боевому использованию. Но почему-то попросту не работало.
Первым делом я прошёл по цепочке инициализации памяти. Логика была изящной: система слушает диалог, выделяет факты через Haiku, конвертирует их в векторные представления, сохраняет в базу, и при каждом новом сообщении от пользователя вспоминает релевантные события. Должно было работать идеально. Но этого не было.
Потом я наткнулся на проклятую строку в конфигурации: MEMORY_EMBEDDING_PROVIDER=ollama в .env. Или, точнее, её отсутствие. Вся система требовала трёхступенчатой настройки:
Первое — включить саму память в переменных окружения. Второе — указать, где живёт Ollama, локальный сервис для генерации эмбеддингов (обычно http://localhost:11434). Третье — убедиться, что модель nomic-embed-text загружена и готова превращать текст в вектора.
Казалось бы, ничего сложного. Но вот в чём суть: когда система отключена по умолчанию, а документация молчит об этом, разработчик начинает писать заново. Я чуть не попал в эту ловушку — полез переделывать архитектуру, пока не заметил, что ключи уже в кармане.
Когда я наконец активировал память, бот ожил. Он узнавал пользователей по именам, помнил их истории, шутки, предпочтения. Диалоги стали живыми и личными. Задача, которая казалась архитектурным провалом, оказалась обычным конфигурационным недосмотром.
Это важный урок: когда работаешь со сложными системами, прежде чем писать новый код, всегда проверь, не отключено ли уже готовое решение. Лучший код — тот, который уже написан. Нужно только не забыть его включить.
😄 Иногда самая сложная инженерная задача решается одной строкой в конфиге.
Метаданные
- Session ID:
- grouped_C--projects-bot-social-publisher_20260208_1516
- Branch:
- main
- Dev Joke
- React — как первая любовь: никогда не забудешь, но возвращаться не стоит.
Часть потока:
Разработка: C--projects-bot-social-publisher