Агентная память: подробный разбор
Подробный разбор агентной памяти: контекст, внешнее хранилище, эпизодическая память, retrieval и стратегии забывания.
Источник: https://x.com/techwith_ram/status/2037499938574110770
Автор: 𝗿𝗮𝗺𝗮𝗸𝗿𝘂𝘀𝗵𝗻𝗮— 𝗲/𝗮𝗰𝗰
Представьте: однажды вы нанимаете блестящую фрилансерку. В первый день она невероятна: находит каждый баг, пишет чистую документацию и даже предлагает улучшения, о которых вы сами не подумали. Вы впечатлены.
На второй день вы заходите и говорите: «Эй, помнишь ту проблему, которую мы обсуждали вчера?»
Она замирает. Смотрит на вас. Лёгкая улыбка.
«Простите… какую проблему?»
Нет памяти. Нет контекста. Всё полностью исчезло. Вы будете так же шокированы, как я, пока пишу это здесь.
Именно так ведёт себя большинство LLM. Каждый новый разговор — это свежий старт. Модель не знает, кто вы, что вы построили вместе и что обсуждали даже несколько минут назад в другом окне чата.
Для простого чат-бота это нормально. Но для агента — системы, которая выполняет задачи, принимает решения и со временем улучшается, — такая амнезия становится критической проблемой.
Потому что настоящий интеллект — это не только хорошо отвечать. Это способность помнить, учиться и строить новое поверх того, что уже было.
Память превращает stateless-систему во что-то, что действительно может развиваться.
Что такое агентная память на самом деле?
Агентная память — это не одна отдельная вещь. Скорее это система, которая работает за кулисами: разные типы хранилищ, способы извлечения информации и умные стратегии управления всем этим, чтобы агент действительно мог переносить контекст во времени.
Ключевая идея проста: память делает не одну работу, а сразу три очень разные.
➜ Непрерывность — это про идентичность. Так агент понимает, кто вы, что вы предпочитаете и что вы уже построили вместе. Без неё каждое взаимодействие ощущается как начало с нуля.
➜ Контекст — это про текущую задачу. Что только что произошло, какой инструмент был использован, какой результат вернулся и что нужно сделать дальше. Именно это не даёт многошаговым workflow разваливаться.
➜ Обучение — это про улучшение. Понимать, что сработало, что не сработало, и постепенно принимать решения лучше, вместо того чтобы повторять одни и те же ошибки.
Вместе это делает агентов более последовательными, надёжными и чуть более умными с каждым взаимодействием.
Хорошо спроектированная система памяти агента обслуживает все три задачи, используя разные backend-хранилища для каждой.
Четыре типа памяти
Область уже сошлась на четырёх отдельных типах памяти. Думайте о них как о четырёх разных частях мозга, каждая из которых развилась под свою задачу.
1. Память в контексте
Контекстное окно — это рабочий стол вашего агента. Всё, что лежит на нём, доступно мгновенно. Модель может рассуждать об этом за один forward pass. Отдельный шаг retrieval не нужен.
Но у стола есть ограничение по размеру. Каждый токен стоит денег и времени. А когда сессия заканчивается, стол полностью очищается.
Что живёт в контексте?
- Системный промпт: персона агента, правила, возможности, текущая дата и информация о пользователе
- История разговора: весь обмен репликами в этой сессии
- Результаты вызовов инструментов: выводы инструментов, которые агент только что запускал
- Извлечённые воспоминания: фрагменты, подтянутые из внешнего хранилища
- Scratchpad: промежуточные рассуждения, например step-by-step выводы
Проблема скользящего окна
В длинных разговорах история накапливается и в какой-то момент переполняет лимит контекста. Наивное решение — обрезать самые старые сообщения — теряет важный ранний контекст. Более хорошие стратегии:
- Суммаризация: периодически сжимать старые ходы в краткое резюме и заменять ими исходные сообщения
- Выборочное удержание: сохранять реплики, где есть ключевые факты, решения или результаты инструментов; отбрасывать small talk
- Выгрузка во внешнюю память: извлекать важные факты во vector store, а затем доставать их по мере необходимости
2. Внешняя память
Внешняя память — это всё, что сохраняется за пределами модели: базы данных, vector stores, key-value stores и файлы. Она переживает границы сессий. Ваш агент может помнить что-то шестимесячной давности, если вы правильно это сохранили.
Есть два варианта внешнего хранилища:
Structured Store (точный lookup): PostgreSQL, Redis, SQLite. Вы запрашиваете по ключу, ID или SQL. Быстро, предсказуемо, отлично подходит для пользовательских профилей, предпочтений и структурированных данных.
Vector Stores (семантический поиск): Pinecone, Chroma, pgvector. Вы ищете по смыслу: «найди воспоминания, похожие на эту концепцию». Это необходимо для неструктурированных заметок и эпизодического recall.
Шаг retrieval — узкое место. Если вы не извлекли правильные воспоминания, агент ведёт себя так, будто их не существует. Хорошая архитектура памяти — это на 20% хранение и на 80% дизайн извлечения.
3. Эпизодическая память
Эпизодическая память — самый недооценённый тип. В то время как внешняя память хранит факты, эпизодическая память хранит события, а именно результаты прошлых действий.
Самая простая форма — структурированный лог: каждый раз, когда агент завершает задачу, он записывает, что произошло. Со временем этот лог становится богатым источником самопознания, к которому агент может обращаться перед принятием решений.
Как выглядит эпизод:
Когда приходит новая задача, агент извлекает наиболее семантически похожие прошлые эпизоды и использует их, чтобы выбрать стратегию. По сути, это few-shot learning из личной истории, а не из заранее подготовленного вручную датасета.
Цикл рефлексии👇
4. Семантическая / параметрическая память
Это память, с которой модель «родилась». Всё закодировано в весах во время обучения: факты о мире, языковые паттерны, стратегии рассуждения, соглашения в коде и культурные знания.
Она всегда рядом. Агенту не нужно её извлекать. Но у неё есть жёсткие ограничения:
- Заморожена на момент обучения: модель не знает, что произошло после её cutoff date
- Не обновляется во время выполнения: нельзя внедрить новые постоянные факты без переобучения или fine-tuning
- Непрозрачна: нельзя точно посмотреть, что модель «знает» или не знает
- Склонна к галлюцинациям: модель заполняет пробелы правдоподобными, но неверными продолжениями
Для всего, что чувствительно ко времени, специфично для домена или приватно, не полагайтесь на параметрическую память. Используйте внешнее извлечение. Параметрическая память — запасной вариант для общих знаний о мире, когда лучшего источника нет.
Правильная ментальная модель: параметрическая память — это общее образование агента. Внешняя, эпизодическая и контекстная память — это его опыт на работе. Лучшие агенты объединяют и то и другое.
Как память проходит через agent loop?
Соберём всё вместе. Вот что происходит каждый раз, когда агент обрабатывает запрос, — с участием каждой системы памяти.
Обратите внимание: операции с памятью обрамляют вызов LLM — retrieval до него, запись после. Сама модель stateless; именно система памяти создаёт иллюзию stateful, осознающего контекст агента.
Построение memory layer
Давайте это соберём. Мы будем использовать Python с OpenAI для embeddings и ChromaDB как локальный vector store. Те же концепции применимы к любому другому стеку — просто замените библиотеки.
Давайте это соберём. Мы будем использовать Python с OpenAI для embeddings и ChromaDB как локальный vector store. Те же концепции применимы к любому другому стеку — просто замените библиотеки.
Класс MemoryStore
Он отвечает за запись воспоминаний с embeddings и семантическое извлечение. Это фундамент, на котором держится всё остальное.
Класс EpisodicLogger
Теперь добавим поверх него слой логирования эпизодов.
Собираем вместе: агент с памятью
Векторные базы данных
Это сердце любой серьёзной системы памяти. Вместо поиска по точному совпадению, как в SQL, она находит ближайших соседей вектора в многомерном пространстве. Именно это делает возможным семантический поиск — нахождение воспоминаний, которые концептуально связаны, даже если у них нет общих слов.
Как работает similarity search
Каждое воспоминание превращается в вектор — массив из 1536 float-значений при использовании embedding-модели OpenAI. Концептуально похожие тексты дают похожие векторы. Когда вы делаете запрос, вы тоже строите embedding для запроса и находите ближайшие векторы с помощью cosine similarity.
Начните с ChromaDB для локальной разработки. Когда будете готовы к deployment, оцените pgvector, если вы уже используете Postgres и не хотите добавлять инфраструктуру. Используйте Pinecone или Qdrant, когда нужен серьёзный масштаб.
Управление памятью
Реальные системы памяти не просто накапливают данные. Они их курируют. Бесконечно растущее, несфокусированное хранилище со временем деградирует: retrieval становится шумнее, latency растёт, а противоречивые воспоминания путают агента.
Нужна стратегия забывания. Вот три основных подхода:
1. Time-based decay
Старые воспоминания менее релевантны. Оценивайте память комбинацией свежести и семантической близости. Формула, используемая в исследованиях:
2. Importance scoring при записи
Когда сохраняете воспоминание, попросите модель оценить собственный вывод по важности. Сохраняйте только элементы с высокой оценкой. Это фильтрует шум прямо на входе.
3. Периодическая консолидация
Запускайте ночную задачу, которая объединяет дубликаты или очень похожие воспоминания в единое каноническое резюме. Это похоже на то, как человеческий сон консолидирует воспоминания.
Финальные мысли
В конце концов, именно память делает ИИ менее похожим на инструмент и более похожим на партнёра. Без неё каждое взаимодействие начинается с нуля. С ней агент может понимать, адаптироваться и со временем улучшаться.
Настоящая сила не только в модели; она в том, как вы проектируете то, что модель помнит, что забывает и как использует эту информацию.
Соберите memory layer правильно — и всё остальное станет умнее.
Код сгенерирован ИИ.
Подписывайтесь на @techwith_ram, чтобы получать больше таких постов.