Архитектура памяти ИИ-агентов: как трёхэтапная структура защищает от галлюцинаций и экономит токены
Представьте сценарий: ИИ-агент выполняет сложную задачу. На третьем шаге из-за сбоя он теряет контекст и начинает все заново, что приводит к повторному расходу токенов (единиц учета текста в API) и потере времени.
Настройка памяти — фундамент стабильности ИИ-агента. Ошибки проектирования приводят к двум крайностям: либо агент подгружает лишнюю историю диалога и сжигает бюджет, либо страдает от «амнезии», выполняя действия как впервые. Надежная архитектура разделяет данные по времени их жизни.
Ключевые термины и экономика токенов
Для понимания принципов работы памяти важно знать базовые ИТ-понятия:
- Контекстное окно (Context Window) — объем оперативной памяти модели для одного ответа. Его можно сравнить со стаканом: при переполнении старые данные вымываются.
- Эффект вымывания контекста (Context Rot) — деградация внимания модели при переполнении окна, ведущая к потере фокуса.
- Галлюцинация (Hallucination) — генерация моделью ложных фактов из-за потери нити разговора.
- API против веб-подписок: веб-чаты ограничены ~200 тыс. токенов. Через API доступны окна до 1 млн токенов (модели Claude на Anthropic API, Bedrock, Vertex AI), но каждый запрос тарифицируется.
- Компактизация (Compaction) — автосжатие истории сообщений в краткое резюме.
- Чекпоинт (Checkpoint) — сохранение состояния работы (что сделано, какие решения приняты, что осталось).
- Скользящий лог (Rolling Log) — внешний файл дневной переписки для защиты от сбоев.
Четыре уровня памяти ИИ-систем
Чтобы агент работал стабильно, память разделяют на четыре слоя:
- Уровень 0: Защитный скользящий лог. Внешний файл, куда действие записывается перед отправкой запроса к LLM. При перезапуске агент берет последние 20 сообщений, чтобы понимать недавний контекст без чтения всего лога.
- Уровень 1: Активная сессия. Текущий чат, базовые правила и файлы задачи. Базовый файл правил проекта (аналог
CLAUDE.md) загружается в стартовый контекст при каждой сессии. Его объем не должен превышать 200–300 строк. - Уровень 2: Чекпоинты. Фиксируют итоги. Чекпоинты создаются автоматически при переполнении контекстного окна или каждые 10–30 сообщений. При сбое агент видит статус выполнения предыдущих шагов и продолжает работу со следующего, экономя время и бюджет.
- Уровень 3: Долгосрочная память. Инструкции и навыки, нужные редко (например, ежемесячные отчеты). Временные элементы удаляются через 30 дней. Полезен паттерн самообучения (Dream): агент анализирует сессии, извлекает 3–7 паттернов и предлагает перенести их в долгосрочную память.
| Слой памяти | Что хранится | Время жизни | Чтение | Какую проблему решает |
|---|---|---|---|---|
| Уровень 0: Лог | Шаги работы, 20 реплик | 1 день | При сбоях | Потеря состояния при краше |
| Уровень 1: Сессия | Системный промпт, чат | Время задачи | При запросе | Контроль текущего диалога |
| Уровень 2: Чекпоинт | Статус, решения | До конца проекта | При сбоях | Повторная трата токенов |
| Уровень 3: База знаний | Шаблоны, навыки, n8n | Постоянно | По запросу | Раздувание контекста |
Пошаговое руководство по настройке памяти
1. Проектные инструкции в Claude Code
Файл стандартов удерживает агента в рамках правил проекта. Описание дано в документации Claude Code по памяти.
- Где выполняется: Терминал в корневом каталоге проекта.
- Порядок настройки:
- Создайте файл
CLAUDE.mdв корне проекта или скрытой папке.claude/CLAUDE.md. - Запишите туда стандарты: команды сборки, запуска тестов, правила именования.
- Для автоматического создания структуры выполните команду инициализации
/init. - Сократите размер файла: Anthropic рекомендует укладывать
CLAUDE.mdстрого в пределы 200 строк, так как он считывается на старте сессии и расходует токены. - Локальные настройки вынесите в
CLAUDE.local.mdи добавьте в.gitignore.
- Создайте файл
- Проверка: Откройте сессию Claude Code и спросите: «Summarize project build and test commands». Агент должен вывести точные команды из файла
CLAUDE.md.
2. Автоматическая компактизация в API Claude
Настройка серверного сжатия контекста при приближении к лимитам. Описание дано в документации Claude API по лимитам контекста и инструкции по компактизации.
- Где выполняется: Серверный код вашего приложения, отправляющий запросы к API Anthropic.
- Порядок настройки:
- Добавьте в HTTP-заголовки запроса параметр:
anthropic-beta: compact-2026-01-12. - В теле запроса внутри объекта
context_managementукажите тип редактирования:"type": "compact_20260112". - Задайте пороговое значение
trigger(лимит входящих токенов, по умолчанию 150 000, минимум — 50 000). При необходимости приостановить работу установите флаг"pause_after_compaction": true. - При превышении порога API сгенерирует блок
compactionсо сжатым саммари всей предыдущей беседы. Передавайте его в массиве сообщений. Сервер автоматически отбросит сырые сообщения, предшествующие точке сжатия.
- Добавьте в HTTP-заголовки запроса параметр:
- Проверка: Отправьте тестовый диалог через API, превысив лимит триггера, и убедитесь, что в ответе появился объект
compaction.
3. Оптимизация кэширования промптов (Prompt Caching) in OpenAI
Снижает задержку ответов до 80% и затраты на токены до 90%. Описание дано в руководстве OpenAI по кэшированию.
- Где выполняется: Код интеграции с API OpenAI (настройка структуры отправляемого промпта).
- Порядок настройки:
- Разделите промпт на статическую (инструкции, схемы) и динамическую (конкретный вопрос) части.
- Поместите статическую часть в начало промпта. Кэширование выполняется по точному совпадению префикса (Exact Prefix Matching). Любое изменение в начале текста (например, добавление текущего времени) сбросит кэш.
- Размещайте динамические данные строго в конце запроса, после статического блока.
- Убедитесь, что объем статического префикса составляет не менее 1024 токенов — кэширование OpenAI активируется только для запросов этого объема и выше.
- Учитывайте время жизни кэша: в оперативной памяти он живет от 5 до 10 минут при неактивности (максимум до 1 часа).
- Проверка: Отправьте два запроса с интервалом в 1 минуту. В объекте
usageJSON-ответа второго запроса проверьте полеcached_tokens.
4. Создание безопасного скользящего лога и чекпоинтов
Сохранение состояния на уровне базы данных или файловой системы.
- Где выполняется: Модуль управления состоянием (State Management) в кодовой базе вашего ИИ-агента.
- Порядок настройки:
- Реализуйте pre-logging: перед каждым вызовом LLM или запуском инструмента записывайте в базу данных или файл JSON текущий запрос пользователя и планируемое действие агента.
- Настройте автоматическую архивацию или удаление файлов логов (например,
log_20260614.json) старше 30 дней. - Реализуйте сохранение чекпоинтов в виде структурированного JSON-объекта, фиксирующего завершенные шаги (completed_steps), текущее действие (current_step), принятые операционные решения (decisions) и измененные файлы (touched_files).
- Безопасность: Настройте функцию фильтрации перед записью в лог или чекпоинт. Регулярные выражения должны автоматически вырезать из текста API-ключи (например, строки, начинающие с
sk-), пароли и персональные данные клиентов.
- Проверка: Принудительно завершите процесс агента во время выполнения задачи. Запустите агента снова и убедитесь, что он восстановил состояние из файла чекпоинта и продолжил работу, а логи не содержат приватных ключей.
Ограничения и риски архитектуры памяти
Внедрение сложной памяти связано с рядом ограничений. Во-первых, точность извлечения информации падает к середине контекстного окна (lost in the middle). Располагайте ключевые факты ближе к краям промпта. Во-вторых, ведение подробных логов без фильтрации приведет к утечке паролей или тайн в файлы на сервере, поэтому автоматическая очистка секретов обязательна. В-третьих, неверные настройки компактизации могут удалить важные технические параметры, лишив агента способности завершить проект.

