Agent Memory (память ИИ-агента): что это и как агенты помнят между сессиями
Agent Memory (память ИИ-агента) — механизм, который сохраняет состояние агента между сессиями: факты о пользователе, принятые решения, состояние задачи. В отличие от контекстного окна, которое живёт только в пределах одного запроса, память хранится во внешнем хранилище и подгружается в контекст, когда она нужна.
Модель сама ничего не помнит: каждый запрос к API начинается с чистого листа, а контекстное окно ограничено. Поэтому ИИ-агент без памяти в каждой сессии заново изучает проект, переспрашивает договорённости и перечитывает код. Память убирает эту «слепоту между сессиями»: агент начинает работу с готовыми заметками. В документации Claude Code это описано прямо: каждая сессия начинается с чистого контекстного окна, а знания между сессиями переносят два механизма — файлы CLAUDE.md и auto memory.
Виды памяти
- Кратковременная — история диалога и промпт в пределах одной сессии. Исчезает вместе с контекстом.
- Рабочая (scratchpad) — черновик агента для текущей задачи: план, промежуточные выводы, список шагов. В Letta для этого заводят отдельный блок памяти.
-
Долговременная — хранится вне контекста: файлы-заметки, векторная база, git-репозиторий. Делится на два подвида:
- эпизодическая — что происходило: конкретные сессии, действия, ошибки;
- семантическая — что известно: факты о пользователе, проекте, предпочтениях.
Как это работает
У конкретных продуктов реализация отличается, но общий цикл похож:
- Извлечение. Агент или отдельный процесс выделяет из диалога и вызовов инструментов то, что стоит запомнить: решение, поправку пользователя, предпочтение.
- Запись. Факт сохраняется в хранилище: строкой в файле, записью в базе или вектором эмбеддинга.
- Консолидация. История сжимается: похожие записи объединяются, длинные сессии превращаются в краткие сводки (суммаризация).
- Поиск при чтении. В начале сессии подгружается индекс заметок, а детали достаются по запросу — по ключевым словам или по сходству эмбеддингов (ретрив).
- Забывание. Устаревшее и дублирующее удаляется или помечается. Без этого шага память разрастается, а старые факты начинают противоречить новым.
Как это выглядит в продуктах
-
Claude Code. Постоянные инструкции лежат в
CLAUDE.md— его пишет человек. Кроме того, Claude Code ведёт auto memory: заметки о ваших поправках и предпочтениях сохраняются в~/.claude/projects/<project>/memory/, а индексMEMORY.mdзагружается в начале каждой сессии (первые 200 строк или 25 КБ). -
claude-mem. Плагин для Claude Code: хуки жизненного цикла фиксируют наблюдения о работе агента, сводки хранятся в SQLite, а поиск идёт гибридно, с векторной базой Chroma. Чтобы не раздувать контекст, поиск устроен в три шага: компактный индекс (
search), хронология (timeline) и полные записи только по отобранным id (get_observations). Чувствительный текст можно исключить из хранилища тегом<private>. -
Letta. Блоки памяти (memory blocks) — структурированные секции контекста с полями
label,description,valueиlimit; они всегда видны модели. Отдельно есть archival memory — хранилище с семантическим поиском, к которому агент обращается через инструменты. В новых версиях Letta переходит на MemFS — память в виде git-репозитория, которую агент правит обычными файловыми инструментами; фоновая «консолидация» (dreaming) обновляет её без участия пользователя. -
nanobot. Долговременные факты лежат в рабочей папке:
memory/MEMORY.mdиmemory/history.jsonl, недавняя переписка — в базе сессий. Периодическая задача Dream читает накопленную историю и обновляет память. -
Memory tool у Anthropic. Модель создаёт, читает, обновляет и удаляет файлы в каталоге
/memories; путь — это префикс, который ваш обработчик сопоставляет с реальным хранилищем: папкой, базой или ключами.
Риски
- Приватность. Память хранит данные пользователя, поэтому важно знать, где она лежит (локально или в облаке) и можно ли исключить чувствительное.
- Рост контекста и цены. Всё, что подгружено из памяти, оплачивается как входные токены в каждом запросе. Подробнее — в статье про расчёт стоимости токенов.
- Залипание на устаревших фактах. Агент уверенно опирается на запись, которая давно неверна. Помогают даты в записях, ревизия и удаление.
- Промпт-инъекции через память. Если в заметку попал текст из недоверенного источника (веб-страница, письмо), он вернётся в контекст как инструкция. Записи из внешних источников стоит помечать и проверять.
Отличие от RAG, дообучения и кэширования
| Память агента | RAG | Дообучение (fine-tuning) | Prompt caching | |
|---|---|---|---|---|
| Что это | заметки и состояние самого агента | поиск по внешней базе знаний | изменение весов модели | повторное использование обработанного префикса промпта |
| Что хранит | факты о пользователе, решения, прогресс задачи | документы, статьи, код | навыки и стиль, зашитые в модель | ничего нового: только ускоряет и удешевляет повтор |
| Кто пополняет | сам агент по ходу работы | разработчик, индексируя источники | разработчик, обучением | не пополняется |
| Обновляется | в любой момент, записью в файл или базу | переиндексацией | только новым обучением | на время жизни кэша |
Память и RAG часто используют общую технику (эмбеддинги, поиск по сходству), но решают разные задачи: RAG отвечает «что написано в документах», память — «что мы уже обсуждали и решили».
Память и RouterAI
Память живёт на стороне клиента: в файлах, базе или самом инструменте. RouterAI в её хранении не участвует и по-прежнему принимает обычные запросы к OpenAI-совместимому API https://routerai.ru/api/v1 (или Anthropic Messages API https://routerai.ru/api). Это означает, что заметки можно подставлять в промпт и работать с любой моделью из каталога, меняя её без потери памяти. Оплата идёт за токены, включая подгруженные заметки; работа из России без VPN, оплата в рублях.
from pathlib import Path
from openai import OpenAI
client = OpenAI(
base_url="https://routerai.ru/api/v1",
api_key="sk-xxxxxxxxxxxxxxxx",
)
memory = Path("MEMORY.md").read_text(encoding="utf-8")
resp = client.chat.completions.create(
model="anthropic/claude-sonnet-5.5",
messages=[
{"role": "system", "content": f"Заметки о проекте: {memory}"},
{"role": "user", "content": "Продолжим с того места, где остановились."},
],
)
print(resp.choices[0].message.content)
Обновление заметок после сессии — отдельный вызов: можно поручить его более дешёвой модели из каталога, например anthropic/claude-haiku-5.5. Стоимость зависит от модели и объёма заметок.
Связанные термины
- Удержание контекста диалога — как модель «помнит» разговор внутри одной сессии
- Управление контекстом — что оставить в окне, а что вынести
- Контекст-инжиниринг — подбор данных для каждого шага агента
- Agent Harness — обвязка, в которой работает память агента
- Agent Skills — другой способ передавать агенту знания: навыки
Что почитать
- How Claude remembers your project — CLAUDE.md и auto memory в Claude Code
- Memory tool — документация Anthropic
- Memory blocks и Memory & dreaming — документация Letta
- claude-mem на GitHub — README плагина
- nanobot: concepts — память, сессии и Dream