Agent memory architecture: working memory + long-term stores (vector/episodic/graph/procedural). Mem0/Letta/Zep patterns: cross-session semantic recall, episodic timeline queries, contradiction resolution by recency, sleep-time consolidation, TTL/decay, GDPR forgetting. Failure modes: hallucinated extraction, compaction loss, cross-tenant privacy leaks.
LLM забывает всё между сессиями — context window это RAM, а не disk. Agent memory — слой, который извлекает факты из разговоров, хранит их вне контекста и подмешивает обратно при следующем запросе. Без неё ассистент каждый раз спрашивает «какой у тебя стек?», «на каком языке писать?» и не помнит вчерашних решений. С ней — Cursor/Devin/ChatGPT-Memory ведут себя как коллега, у которого есть блокнот.
Memory layer для агента — это
retrieval + summarization + injection. Working memory = открытое окно браузера (последние N turns в context). Long-term = база на диске: vector store для semantic фактов, episodic log с timestamps для «когда?»-запросов, knowledge graph для связей между сущностями, procedural — для скриптов/playbooks. Магии нет — это RAG для разговоров плюс фоновая консолидация.
Четыре типа памяти не взаимозаменяемы:
(user, prefers, Python), retrieval by concept..cursorrules, reusable templates.Три группы (/s/agent-memory):
user → orchestrator → working-mem → compactor → llm. Compactor суммаризирует transcript при overflow (>30 turns).router-svc принимает recall-запрос, tenant-filter ставит WHERE user_id = first, фан-аут в 4 store-а, reranker (cross-encoder) сортирует кандидатов перед инжекцией. Отдельно extractor (Haiku) на write-path вытаскивает facts из ответов LLM.vector (Qdrant), episodic (Postgres + timestamps), graph (Neo4j), procedural (playbooks). Две фоновые job-ы: ttl-job (forgetting policy) и sleep-job (nightly consolidation).Edges делятся на три потока: agent loop (user→orchestrator→llm), router fan-out (router→tenant-filter→[stores]→reranker), write-back (llm→extractor→stores). Обратная анимация по тем же рёбрам — ответы и recall-результаты возвращаются reverse.
Кросс-сессионный recall фактов о пользователе. Tenant filter scope by user_id=u_177, Qdrant отдаёт top-5 facts с cosine>0.78 (prefers Python, works at fintech, no async libs), cross-encoder boost'ит prefers Python до 0.94 для запроса про CSV parsing, system prompt получает блок user preferences. LLM генерит Python+pandas без вопроса «какой язык?». Стоимость +$0.015/turn, UX gain огромный.
Timeline-запрос — «когда мы обсуждали мой AWS migration?». Classifier видит «когда/when/last time» → episodic mode (не semantic). Postgres SELECT FROM events WHERE user_id AND content @@ tsquery('aws & migrat') ORDER BY ts DESC отдаёт 3 hits (Apr 12, Apr 19, May 2), recency-weighted ranking, LLM отвечает «12 дней назад (May 2) решил пойти с EKS». Episodic ≠ semantic — здесь важна последовательность, а не релевантность.
Разрешение противоречий по recency. User в Q1: «I live in Moscow», в Q4: «moved to Berlin». Vector match даёт оба facts → conflict. Recency-weight: newer (Berlin Δt=14d) overrides older (Moscow Δt=90d). Graph triple update: (user, lives_in, Moscow) → stale, (user, lives_in, Berlin) → active. Старый факт не удаляется — tombstone сохраняется для audit и «когда переехал?». Policy: newer wins, но история не теряется.
Sleep-time consolidation + forgetting. Post-session Haiku extractor читает 12-turn transcript → fact candidates (cat name=Tom, team=alpha), parallel writes в vector/episodic/graph. Nightly 03
Tom + Tom (cat) → single (similarity >0.92). TTL: episodic events >18 месяцев → cold storage, vector decay weight *= 0.95/мес. GDPR right-to-be-forgotten: hard delete propagate во все stores.
Контекст. Нужна memory layer для multi-session agent. Два полярных подхода: (a) хранить сырые транскрипты и retrievать куски по embedding, (b) экстрактить structured facts в vector+graph и забывать raw.
Опции.
(subject, predicate, object, ts, confidence). Маленький context, дешёвый retrieval, легко мерджить дубликаты и тушить устаревшие facts. Минусы: hallucinated extraction (LLM «вытаскивает» то, чего user не говорил), теряем nuance/тон, нельзя ответить на «когда я это сказал?».Decision. Hybrid (option 3) — то, что делают Mem0/Letta/Zep.
Consequences.
contradiction).tenant_id filter — иначе privacy утечки..cursorrules = procedural memory, recent diffs = episodic, embedding repo = semantic.read_memory()/write_memory() через tool calls.tenant_id first WHERE = privacy disaster (одна баг-фича = утечка по всем).works at Google, факт уходит в store, через месяц LLM уверенно врёт.Moscow vs Berlin, newer-wins policy не работает.deadline = 2026-05-20). Tier-ed: verbatim последние 10, facts из 20+.last N turns в working memory + summarizer. Vector/graph stores ставь когда есть >100 active users и проблема recall измерима.