Agent Memory

Модуль 07 · Урок 7.1

Урок 7.1. Основные failure modes памяти

На этой странице
  1. Цель лекции
  2. Ожидаемый результат
  3. Зачем это нужно
  4. Основная идея
  5. Ключевые термины
  6. Карта failure modes
  7. Lost in the middle
  8. Context rot
  9. Retrieval noise
  10. Stale memory
  11. Contradictory memory
  12. Summarization drift
  13. Over-personalization
  14. Under-retrieval
  15. Over-retrieval
  16. Memory feedback loop
  17. Диагностическая схема
  18. Мини-кейс: написание лекции
  19. Мини-кейс: support agent
  20. Типичные ошибки
  21. Краткое резюме
  22. Вопросы для самопроверки
  23. Что дальше

Цель лекции

Собрать типичные ошибки и деградации memory systems.

Ожидаемый результат

Читатель узнает основные способы, которыми память может ухудшить поведение агента, и понимает, какие архитектурные меры помогают заранее снижать риск: write policy, retrieval quality, context assembly, update, forgetting, scopes и evaluation.

Зачем это нужно

Память делает агента сильнее: он может помнить пользователя, проект, прошлые ошибки, workflows, источники и решения. Но та же память может ухудшить систему.

Плохая память опаснее отсутствия памяти, потому что агент начинает действовать уверенно на основе старого, шумного или неверного контекста.

Примеры:

  • агент вспоминает старое предпочтение пользователя и игнорирует новое;
  • retrieval достает похожий, но нерелевантный episode;
  • summary постепенно искажает историю;
  • в prompt попадает слишком много памяти, и модель теряет текущую задачу;
  • конфликтующие facts активны одновременно;
  • ошибка агента сохраняется как lesson learned и повторяется;
  • память одного проекта применяется к другому.

Failure modes нужны не для пессимизма. Они помогают проектировать memory layer не только по happy path.

Основная идея

Память усиливает возможности агента, но также может усиливать ошибки, если retrieval, обновление и контекстная сборка работают плохо.

Memory failure обычно возникает не в одном месте. Это цепочка:

text
bad write -> bad retrieval -> bad injection -> bad action -> bad memory update

Например:

  1. Агент сохранил временную просьбу как постоянное предпочтение.
  2. Retrieval достал эту запись в новой задаче.
  3. Context assembly вставил ее без scope.
  4. Модель изменила стиль ответа неправильно.
  5. Пользователь исправил агента, но update не обработал конфликт.

Значит, защита должна быть сквозной: write policy, metadata, scopes, retrieval filters, reranking, context budget, conflict detection, decay и user correction.

Ключевые термины

Термин Короткое определение
Failure mode Типовой способ, которым система деградирует или ошибается.
Lost in the middle Модель игнорирует важную информацию, размещенную в середине длинного контекста.
Context rot Большой или шумный контекст ухудшает качество reasoning.
Retrieval noise Retrieved memory похожа на запрос, но не полезна для текущего шага.
Stale memory Устаревшая память продолжает влиять на действия агента.
Contradictory memory В active memory одновременно есть конфликтующие записи.
Summarization drift Summary постепенно искажает исходную историю.
Over-personalization Агент слишком сильно полагается на старые preferences.
Under-retrieval Агент не достал важную память.
Over-retrieval Агент достал слишком много памяти.
Memory feedback loop Ошибка сохраняется в память и усиливается будущим retrieval.

Карта failure modes

Failure mode Где возникает Симптом
Lost in the middle Context assembly Важное есть в prompt, но модель его игнорирует.
Context rot Prompt/context Ответ хуже из-за слишком большого контекста.
Retrieval noise Retrieval/reranking Вспомнилось похожее, но не полезное.
Stale memory Update/forgetting Агент использует старые facts.
Contradictory memory Update/conflict policy Модель получает конфликтующие instructions/facts.
Summarization drift Summaries/consolidation История меняется при каждом сжатии.
Over-personalization Profile memory Агент навязывает старые preferences.
Under-retrieval Read policy/query Агент не вспомнил нужный контекст.
Over-retrieval Retrieval/context assembly В prompt слишком много memory.
Feedback loop Write/update/reflection Ошибка закрепляется как правило.

Lost in the middle

Lost in the middle возникает, когда важная информация находится в длинном контексте, но модель ее фактически не использует.

Пример:

text
Prompt:
- System instructions
- Long history
- 15 retrieved memories
- Important constraint in the middle:
  "Do not edit generated files."
- More tool logs
- User request

Агент редактирует generated file, хотя constraint был в prompt.

Причины:

  • слишком длинный context;
  • важное не выделено;
  • плохой порядок блоков;
  • много похожего текста;
  • constraint спрятан среди logs;
  • нет grouping by type.

Защита:

  • помещать critical policies ближе к началу или в отдельный блок;
  • группировать constraints;
  • сокращать raw logs;
  • использовать explicit labels;
  • не перегружать prompt retrieved memories;
  • тестировать context assembly.

Context rot

Context rot - деградация качества ответа из-за большого, старого или шумного контекста.

Симптомы:

  • агент отвечает не на текущий запрос, а на старую тему;
  • смешивает несколько задач;
  • повторяет устаревший план;
  • становится чрезмерно осторожным из-за старых warnings;
  • игнорирует свежие tool results;
  • использует стиль из другой сессии.

Пример:

text
User:
"Исправь опечатку."

Context:
- long architecture discussion
- old debugging attempts
- unrelated reflection notes
- stale frontend workflow

Агент начинает предлагать большой refactor.

Защита:

  • session summaries вместо полной истории;
  • current-task working set;
  • context budget;
  • negative injection;
  • TTL для task state;
  • demotion старых records;
  • разделение current state и history.

Retrieval noise

Retrieval noise - это память, похожая на запрос, но бесполезная или вредная для текущего действия.

Пример:

text
Query:
"memory retrieval"

Retrieved:
- все упоминания слова retrieval в курсе;
- старые заметки про RAG;
- unrelated support examples;
- точный план нужного урока потерялся среди шума.

Причины:

  • слишком широкий query;
  • только vector search;
  • нет metadata filters;
  • нет reranking;
  • top-k слишком высокий;
  • scopes не применены;
  • old low-confidence records не снижены.

Защита:

  • hybrid retrieval;
  • query construction;
  • scope filters;
  • reranking;
  • context budget;
  • source priority;
  • negative retrieval.

Stale memory

Stale memory - память, которая была правильной раньше, но больше не актуальна.

Примеры:

  • проект перешел с Jest на Vitest;
  • пользователь изменил preference;
  • policy обновилась;
  • API изменил behavior;
  • ticket закрылся;
  • customer plan изменился;
  • файл переехал.

Опасность stale memory в том, что она часто выглядит уверенно.

Защита:

  • last_confirmed_at;
  • valid_from / valid_until;
  • source freshness;
  • decay;
  • update policy;
  • contradiction detection;
  • preference confirmation;
  • проверка current source для volatile facts.

Пример:

text
Old memory:
- Project uses Jest.

Current source:
- package.json uses Vitest.

Action:
- Use current source.
- Mark old memory superseded/stale.

Contradictory memory

Contradictory memory возникает, когда active context содержит несовместимые записи.

Пример:

text
- User prefers detailed final answers.
- User prefers concise final reports after edits.

Это может быть настоящий конфликт, а может быть scope issue.

Лучшее представление:

text
- Detailed explanations: architecture discussions.
- Concise final reports: file edit summaries.

Причины:

  • нет conflict detection;
  • нет scoped update;
  • add-only без active view;
  • summaries не обновляются;
  • weak source записан как high-confidence fact.

Защита:

  • contradiction detection;
  • status: active/stale/superseded/conflicted;
  • scoped records;
  • source priority;
  • human review для high-impact conflicts;
  • не inject unresolved conflicts как facts.

Summarization drift

Summarization drift - искажение памяти при многократном сжатии.

Пример:

text
Original:
"Сегодня отвечай кратко."

Summary v1:
"User wants concise answers today."

Summary v2:
"User prefers concise answers."

Summary v3:
"Always answer briefly."

Временная просьба стала постоянной policy.

Причины:

  • summary без source;
  • исчезают qualifiers;
  • model fills gaps;
  • repeated compaction;
  • facts и hypotheses смешиваются;
  • нет validation.

Защита:

  • сохранять source links;
  • не терять scope/time qualifiers;
  • periodic drift checks;
  • human correction;
  • structured summaries;
  • различать session summary и long-term memory.

Over-personalization

Over-personalization - агент слишком сильно опирается на сохраненные preferences или profile.

Симптомы:

  • игнорирует текущий запрос;
  • отвечает слишком кратко, когда нужна детализация;
  • применяет старый стиль к новой задаче;
  • делает предположения о пользователе;
  • не спрашивает уточнение, потому что "помнит".

Пример:

text
Memory:
- User prefers short final reports.

Task:
- User asks for detailed architecture explanation.

Bad:
- Agent gives tiny answer.

Защита:

  • current request priority;
  • scoped preferences;
  • confidence and recency;
  • user-visible memory;
  • ask when uncertain;
  • avoid sensitive inferences.

Under-retrieval

Under-retrieval - агент не достал важную память.

Пример:

text
Project memory:
- Do not edit generated files.

Task:
- User asks to change generated output.

Failure:
- Agent does not retrieve project rule and edits generated file.

Причины:

  • read policy слишком узкая;
  • query construction слабый;
  • missing index;
  • wrong scope;
  • memory not indexed;
  • retrieval disabled to reduce latency.

Защита:

  • task-type based retrieval;
  • critical policies always hot/warm;
  • index health checks;
  • regression tests;
  • explicit project instruction loading;
  • fallback to files/source of truth.

Over-retrieval

Over-retrieval - агент достает слишком много памяти.

Симптомы:

  • context window перегружен;
  • важное теряется среди retrieved chunks;
  • модель становится verbose;
  • старые episodes влияют на текущий ответ;
  • latency растет.

Причины:

  • большой top-k;
  • нет reranking;
  • нет context budget;
  • retrieval "на всякий случай";
  • no negative retrieval;
  • дубли не объединены.

Защита:

  • smaller top-k;
  • diversity-aware reranking;
  • context budget;
  • summaries instead of raw logs;
  • negative injection;
  • active view вместо всей истории.

Memory feedback loop

Memory feedback loop возникает, когда ошибка сохраняется и начинает усиливать будущие ответы.

Пример:

text
1. Агент ошибочно решил, что для frontend задач тесты не нужны.
2. Reflection сохранила: "CSS changes do not require running app."
3. В следующей frontend задаче retrieval достал этот lesson.
4. Агент снова не проверил UI.
5. Ошибка подтвердилась как "повторяющийся pattern".

Проблема: memory начинает ссылаться сама на себя.

Защита:

  • не сохранять weak inference как strong rule;
  • evidence requirements;
  • confidence;
  • human review для procedural promotion;
  • external validation;
  • track source vs derived records;
  • decay unconfirmed lessons.

Диагностическая схема

flowchart TD A[Bad agent behavior] --> B{Was relevant memory retrieved?} B -->|No| U[Under-retrieval / missing index / bad read policy] B -->|Yes| C{Was retrieved memory correct and fresh?} C -->|No| S[Stale / contradictory / poisoned memory] C -->|Yes| D{Was context assembled well?} D -->|No| R[Over-retrieval / context rot / lost in middle] D -->|Yes| E{Was memory interpreted correctly?} E -->|No| P[Over-personalization / wrong priority] E -->|Yes| F[Check model/tool/action logic]

Эта схема помогает отлаживать memory failures. Не вся плохая работа агента вызвана моделью. Часто проблема в том, что memory layer дал плохой context.

Мини-кейс: написание лекции

Задача:

text
"Напиши лекцию в модуле 7."

Возможные failure modes:

  • under-retrieval: агент не читает план урока;
  • over-retrieval: агент вставляет все прошлые лекции целиком;
  • stale memory: использует старый template;
  • context rot: начинает писать про Module 06;
  • summarization drift: думает, что TODO нужно обновлять всегда;
  • over-personalization: делает финальный ответ слишком подробным, хотя пользователь обычно хочет кратко.

Защита:

  • читать target lesson plan;
  • читать relevant content plan;
  • использовать соседний финал для перехода;
  • не inject весь курс;
  • держать writing workflow scoped;
  • проверять TODO/FIXME как markers, но не обновлять tracking без просьбы.

Мини-кейс: support agent

Запрос:

text
"Почему export недоступен?"

Failure modes:

  • retrieval noise: похожие tickets других клиентов;
  • stale memory: старый plan клиента;
  • contradictory memory: docs говорят Pro, CRM говорит Business;
  • over-retrieval: в prompt попали internal notes;
  • under-retrieval: не достали current entitlement;
  • feedback loop: старое неправильное explanation сохраняется в account summary.

Защита:

  • account scope filters;
  • current CRM as high-priority source;
  • source labels;
  • conflict policy;
  • permission-aware context assembly;
  • human review для customer-facing commitments.

Типичные ошибки

Ошибка 1: считать memory failure ошибкой модели.

Иногда модель использовала именно тот плохой контекст, который ей дали.

Ошибка 2: не измерять retrieval noise.

Если retrieved context похож, но бесполезен, качество будет падать скрыто.

Ошибка 3: не хранить source и time.

Без source и time нельзя отличить fresh fact от stale memory.

Ошибка 4: не иметь active view.

Append-only память без статусов создает conflicts.

Ошибка 5: доверять summaries без проверки.

Summary может быть удобным, но не всегда reliable source of truth.

Ошибка 6: не тестировать long-term scenarios.

Многие failure modes видны только через несколько сессий.

Ошибка 7: не давать пользователю исправлять память.

User correction - важнейший сигнал для update.

Краткое резюме

Память может ухудшить агента, если write, retrieval, update и context assembly работают плохо. Главные failure modes: lost in the middle, context rot, retrieval noise, stale memory, contradictory memory, summarization drift, over-personalization, under-retrieval, over-retrieval и memory feedback loop.

Защита строится не одним приемом, а сквозной дисциплиной: metadata, scopes, source, timestamps, confidence, read/write policies, reranking, context budget, conflict detection, decay, forgetting и evaluation.

Вопросы для самопроверки

  1. Почему плохая память может быть опаснее отсутствия памяти?
  2. Чем retrieval noise отличается от over-retrieval?
  3. Как summarization drift может превратить временную просьбу в постоянную preference?
  4. Почему stale memory требует timestamps и source?
  5. Что такое memory feedback loop?

Что дальше

В следующей лекции мы разберем security-аспект памяти: memory poisoning, prompt injection через документы и tool results, secret leakage, cross-user leakage, trust levels, sanitization, permission-aware retrieval и audit trail.

Обновлено 08.08.2026