Бот забывал имена: как я нашел отключенную память

Почему бот не помнит: охота на исчезнувшую память
Проект voice-agent был почти готов. Красивый API, продуманный диалоговый движок, интеграция с Claude — всё работало. Но пользователи жаловались на одно: бот ничего не запоминал между разговорами. “Привет, я Иван”, — говорил пользователь в одном диалоге. Во втором диалоге: “Привет, кто это?” — с чистой совестью отвечал бот.
Проблема казалась серьёзной. В исходниках проекта я нашёл целую систему персистентной памяти — полностью реализованную, с извлечением фактов через Claude Haiku, векторным поиском по эмбеддингам, дедупликацией устаревших данных и хранением в SQLite. Архитектура была изящной. Но она попросту не работала.
Первым делом я начал отладку: включил логирование, запустил тесты памяти, проверил инициализацию. И тут я понял, почему никто об этом не говорил: система памяти была выключена по умолчанию. В конфиге стояло memory_enabled = False.
Представляешь? Целый механизм, готовый к боевому использованию, но никто не включил переключатель. Это было похоже на ситуацию, когда ты строишь огромный дом, подводишь электричество, но забываешь щёлкнуть рубильником.
Чтобы включить память, требовалась конфигурация в .env:
MEMORY_ENABLED=true
MEMORY_EMBEDDING_PROVIDER=ollama
MEMORY_OLLAMA_URL=http://localhost:11434
MEMORY_EMBEDDING_MODEL=nomic-embed-text
Нужен был запущенный Ollama с моделью nomic-embed-text для генерации векторных эмбеддингов. Это небольшой инструмент — легко поднимается локально, работает быстро, не требует облака. После этого бот начинал вести себя как персонаж с настоящей памятью:
- Извлекал факты из каждого диалога (через Claude Haiku выделял важное)
- Сохранял их в SQLite с векторными представлениями
- Вспоминал релевантные факты при каждом новом обращении пользователя
- Обновлял информацию вместо дублирования
Здесь скрывается интересная деталь о том, как работают современные системы памяти в AI-агентах. Обычно думают, что нужна огромная база данных с явной индексацией. На самом деле векторные базы данных и эмбеддинги решают проблему релевантности: система помнит не просто факты, а смысл фактов. Даже если пользователь перефразирует информацию — “я работаю в компании Y” вместо “я сотрудник Y” — система поймёт, что это один и тот же факт.
Когда память была включена, голосовой агент заработал совсем по-другому. Он узнавал пользователей, помнил их предпочтения, шутки и истории. Диалоги стали личными. А главное — задача “почему бот не помнит?” превратилась в тривиальный баг конфигурации. Оказалось, нужно было не переделывать архитектуру, а просто включить то, что уже было.
Это учит важному правилу при работе со сложными системами: перед тем как писать недостающий код, всегда проверь, есть ли уже готовое решение, которое просто выключено.
😄 Мораль: лучшая система памяти — та, которая уже реализована, её просто нужно не забыть включить.
Исправления: - “граммофон” → “инструмент” (слово “граммофон” не подходит по смыслу) - Добавлена запятая после “На самом деле” в предпредпоследнем абзаце
Метаданные
- Session ID:
- grouped_ai-agents_20260208_1513
- Branch:
- HEAD
- Dev Joke
- Remix: решение проблемы, о существовании которой ты не знал, способом, который не понимаешь.
Часть потока:
Разработка: ai-agents