Память AI-агента: четыре уровня

👁 80 IVOL-Service

В первой части я рассказал, как собрал английского бота с памятью в Redis. Схема простая: копим 40 сообщений, сжимаем первые 20, обновляем центральный блок.

По идее, должно работать. На практике — сломалось через две недели.


Проблема: модель забывает

После двух недель общения заметил — работает коряво. Модель забывает то, о чём я рассказывал. Переспрашивает одно и то же.

Причина простая: информация попадала в центральную память и при следующем сжатии — затиралась.

Бывало так: в день у меня до 20 сообщений. Получается, все предыдущие дни просто пропадали.

Перепробовал разные подходы: суммаризацию, выдёргивание определённых фактов, безграничный промпт. Всё равно после сжатия и добавления основного промпта работало некорректно.

Каждый день подбирал разные промпты и разные варианты сжатия. В итоге одно и то же — какие-то вещи модель считала неважными и выбрасывала.

Это прям никуда не годилось.


Решение №1: Векторная память

Следующий этап — прикрутить векторную память.

Стал смотреть, как реализуется в n8n. План был: после выдёргивания ключевых фактов из 20 сообщений — запихивать в векторную базу.

Что получилось: немножко ошибся и сохранил просто все сообщения. Всё скопом — всё общение — запихнул в векторную базу.

Результат: охренеть как круто оказалось.

Модель теперь помнит вообще всё. Всё, о чём мы говорили. Можно спросить: «Слушай, мы там тогда о чём-то говорили, помнишь? Поищи». И всё лезет из векторной базы. Свободно находит.

Инфраструктура: Qdrant добавлен в тот же Docker-контейнер, где работает n8n. Всё поднимается вместе и работает максимально быстро.

Про объём данных: если загрузить в векторную базу «Войну и мир» — она будет весить около 80 мегабайт. Чтобы наговорить с моделью столько же текста, должно пройти очень много времени. Так что переживать за память вообще не обязательно.

Как это будет работать в дальнейшем — узнаю только через месяц-два-три.


Решение №2: Кратковременная память

Есть ключевые моменты, которые запихивать в системный промпт постоянно — не совсем удобно. Но и терять их нельзя.

Прикрутил к агенту кратковременную память.

Хранение: MySQL. Или можно использовать таблицы прямо в n8n.

Как работает:

  • Есть таблица, к которой имеет доступ сам агент
  • Агент может: удалить запись, изменить или вставить новую
  • Эта таблица подгружается сразу в системный промпт

Модель видит ключевые моменты и помнит контекст между сессиями.


Решение №3: Память промта

Буквально сегодня добавил ещё один блок — память промта.

Идея: агент может сам себе добавлять инструкции.

Как работает:

Допустим, я его прошу что-то сделать определённым образом. Говорю: «Запомни вот это». Агент добавляет это в свою таблицу инструкций.

В следующий раз — он уже знает, как действовать. Не нужно повторять.

Разница с кратковременной памятью:

  • Кратковременная память — факты и контекст (что происходило)
  • Память промта — инструкции и правила (как действовать)

По сути, агент сам себя обучает через диалог.


Итого: четыре уровня памяти

  1. Векторная память — всё общение, полный поиск по истории
  2. Кратковременная память — таблица с ключевыми фактами
  3. Память промта — инструкции, которые агент добавляет сам себе
  4. Контекстное окно — последние 40 сообщений в оперативке

Каждый уровень решает свою задачу. Вместе — дают ощущение, что модель реально помнит всё.


Продолжение: интеграция с LifeTrend, проблема с токенами и как я её решил через ассистента-помощника.


Время чтения: 3 мин
Всего слов: 565
Обновлено: