Context Engineering Framework

Эффективное хранение контекста AI-агентов

Как избавить агента от амнезии, не превращая его контекст в свалку на миллион токенов. Синтез 20 источников — Anthropic, LangChain, Google ADK, Weaviate, Manus и др.

16 разделов 6 техник 20 источников февраль 2026
Оглавление
01 Фундаментальная модель: контекст как RAM
┌─────────────────────────────────────────────────┐ AI-АГЕНТ LLM = CPU (вычисления) Контекстное окно = RAM (оперативная память) Внешнее хранилище = Диск (долгосрочная) Инструменты = Периферия (ввод/вывод) └─────────────────────────────────────────────────┘

Ключевое ограничение

Transformer-архитектура создаёт n² парных связей между n токенами. Удвоение контекста — четырёхкратный рост вычислений. Но проблема не только в скорости:

Context Rot — при заполнении окна модель постепенно теряет способность точно «вспоминать» информацию. Это не обрыв, а градиентная деградация. Исследование Stanford/Meta «Lost in the Middle» доказало: модели лучше всего обрабатывают начало и конец контекста, а середина — слепая зона.

Найди минимальный набор высокосигнальных токенов, максимизирующий вероятность нужного результата. — Anthropic, «Context Engineering for AI Agents»

Больше контекста ≠ лучше. Каждый токен расходует бюджет внимания.

02 Пять уровней памяти агента
УровеньАналогияГде живётВремя жизниРазмер
МгновеннаяРегистры CPUТекущий промпт1 вызов~1K токенов
КраткосрочнаяRAMКонтекстное окно1 сессия10-200K
РабочаяSwap-файлScratchpad/файлы1 задачаБез лимита
СреднесрочнаяSSD-кешСжатые резюмеДни-недели~5-20K/сессия
ДолгосрочнаяHDD/БДVector DB / файлыПостоянноБез лимита
ЗАПРОС ПОЛЬЗОВАТЕЛЯ │ ▼ ┌──────────────────────────┐ Мгновенная память ← system prompt + текущий ввод (всегда в контексте) ├──────────────────────────┤ Краткосрочная память ← последние 5-10 ходов (raw) (sliding window) ├──────────────────────────┤ Рабочая память ← scratchpad, план задачи (загружается по JIT) ├──────────────────────────┤ Среднесрочная память ← сжатые резюме прошлых ходов (compacted summaries) ├──────────────────────────┤ Долгосрочная память ← факты, предпочтения, знания (vector search / RAG) └──────────────────────────┘
Худшая система памяти — та, которая честно сохраняет всё.

Эффективный агент: оценивает важность перед сохранением, регулярно очищает устаревшее, заменяет транскрипты компактными резюме, использует сигналы — давность, частота обращений, релевантность.

03 Четыре стратегии управления: WSCI

Модель из LangChain, подтверждённая Anthropic, Google ADK и Manus:

Write — Запись вовне

Сохранение информации за пределы контекстного окна для будущего использования.

ЧтоКакКогда
ScratchpadФайл/поле в stateПромежуточные результаты
CheckpointsSnapshot состоянияПосле ключевых этапов
Long-term memoriesVector DB / файлыПредпочтения, факты

Select — Извлечение нужного

Вытаскивание в контекст только релевантной информации. Три типа:

  • Эпизодическая — примеры прошлого поведения (few-shot)
  • Процедурная — инструкции и правила (system prompt, CLAUDE.md)
  • Семантическая — факты и знания (RAG, vector search)

Паттерны: «Always-pull» — маленький набор всегда в контексте. «On-demand» — большие коллекции через embeddings + reranking. При 50+ tools — RAG для инструментов даёт 3x улучшение точности выбора.

Compress — Сжатие

Два метода в порядке приоритета:

  1. Compaction (обратимое) — приоритет
  2. Summarization (с потерями) — когда compaction исчерпана

Isolate — Изоляция

Разделение контекста между независимыми процессами:

  • Sub-agents — отдельные контекстные окна для подзадач
  • Sandbox — тяжёлые операции в изолированной среде
  • State isolation — модульный state, видны только нужные поля
04 Техника 1 — Compaction (обратимое сжатие)
Compaction — это momentum для обучения агента в контексте. — Jason Liu

Удаление информации, которая существует в окружении и может быть восстановлена через инструменты. Ноль потери данных.

До compactionПосле compactionВосстановление
500 строк кода из файлаФайл /src/main.py — прочитанread_file("/src/main.py")
Полный grep (200 результатов)grep: 200 совпадений в 15 файлахgrep("pattern")
Raw JSON API (2000 токенов)API: 45 записей, ключевые: id=7, id=12api_call(...)
Содержимое веб-страницыexample.com — основные тезисы: ...fetch_url(...)

Когда запускать

Порог: 70-80% контекстного окна │ ▼ ┌─────────────────┐ 1. Tool Result ← Заменить raw-выводы на ссылки Clearing Безопасно, минимальный риск ├─────────────────┤ 2. Duplicate ← Убрать повторяющиеся сообщения Removal дублирующиеся чтения файлов ├─────────────────┤ 3. Deep History ← Старые tool results → ссылки Compaction Только если >20 ходов назад └─────────────────┘

Реализация

def compact_context(messages, threshold=0.75): token_count = count_tokens(messages) max_tokens = MODEL_CONTEXT_LIMIT if token_count / max_tokens < threshold: return messages # ещё не пора compacted = [] for msg in messages: if msg.role == "tool_result" and msg.age > 10: compacted.append(Message( role="tool_result", content=f"[Результат {msg.tool}: {msg.summary}. " f"Повторить: {msg.tool}({msg.args})]" )) else: compacted.append(msg) return compacted
Правило Manus: сохраняй последние tool calls в raw формате для сохранения «ритма» модели. Сжимай только старые (>20 ходов назад).
05 Техника 2 — Summarization (lossy-сжатие)

Когда compaction исчерпана и контекст всё ещё переполнен.

Алгоритм

1. Определить порог (~60-70% от лимита, НЕ ждать 95%) 2. Отделить последние 3-5 ходов (оставить raw) 3. Передать остальную историю LLM для суммаризации 4. В summary СОХРАНИТЬ: - Архитектурные решения - Нерешённые баги и задачи - Ключевые факты и зависимости - Имена файлов и пути - Предпочтения пользователя 5. В summary ОТБРОСИТЬ: - Промежуточные рассуждения - Дублирующиеся чтения файлов - Неуспешные попытки (если зафиксирован урок) - Raw данные, доступные через инструменты 6. Заменить: [system] + [summary] + [последние 3-5 raw]

Промпт для суммаризации

Ты — архивист AI-агента. Сожми историю диалога в компактное резюме, сохранив: ОБЯЗАТЕЛЬНО СОХРАНИТЬ: - Все принятые решения и их обоснования - Текущее состояние задачи (сделано / осталось) - Пути файлов, которые были изменены - Обнаруженные проблемы и их решения - Предпочтения и ограничения пользователя МОЖНО ОПУСТИТЬ: - Промежуточные рассуждения и самоисправления - Содержимое файлов (доступно через инструменты) - Повторяющиеся действия (только финальный результат) Формат: структурированный JSON.

Двухфазная настройка (Anthropic)

  1. Фаза recall — сначала максимизируй полноту (не потерять важное)
  2. Фаза precision — затем убирай избыточное

Порядок именно такой. Потерять критичный факт хуже, чем оставить лишний абзац.

06 Техника 3 — Just-in-Time загрузка

Не загружай всё заранее. Храни лёгкие ссылки, загружай данные динамически по мере необходимости.

В контексте (постоянно)За пределами (JIT)
Пути файловСодержимое файлов
Имена таблиц/коллекцийДанные из БД
URL-ы ресурсовСодержимое веб-страниц
Схема APIОтветы API
Названия функций + сигнатурыТела функций
Структура директорийФайлы проекта

Progressive Disclosure

Шаг 1: Агент видит структуру проекта src/ auth/ api/ models/ Шаг 2: Пользователь спрашивает про авторизацию → агент загружает ls src/auth/ → видит: login.py, middleware.py, tokens.py Шаг 3: Агент решает, что нужен middleware → загружает read("src/auth/middleware.py") Шаг 4: Задача выполнена → содержимое при compaction → ссылка

Когда НЕ использовать JIT

  • Юридические/финансовые документы — лучше предзагрузить
  • Критически важные инструкции — всегда в system prompt
  • Малые конфигурации — если файл <50 токенов, проще держать в контексте
07 Техника 4 — Structured Note-Taking

Агент периодически пишет заметки в persistent storage вне контекстного окна. После сброса контекста — читает свои заметки и продолжает.

Пример: Claude Pokemon (Anthropic)

Агент вёл тысячи шагов в игре. Между compaction-сбросами сохранял: карты регионов, стратегии боёв, достижения, текущие цели. После каждого сброса контекста — читал свои заметки и продолжал без потери прогресса.

Формат заметок

# Состояние задачи — [дата/время] ## Цель Добавить систему авторизации в API ## Решено - Выбран JWT (не session-based) — причина: stateless API - Токены: access (15 мин) + refresh (7 дней) - Хранение refresh: Redis ## Сделано - [x] Модель User (src/models/user.py) - [x] JWT генерация (src/auth/tokens.py) - [ ] Middleware проверки токенов - [ ] Эндпоинт /refresh ## Проблемы - bcrypt медленный (~400ms) — рассмотреть argon2 ## Ключевые файлы - src/auth/tokens.py — генерация JWT - src/models/user.py — модель пользователя

Когда использовать

  • Итеративная разработка с чёткими вехами
  • Задачи, длящиеся дольше одного контекстного окна
  • Многосессионная работа (часы/дни)
08 Техника 5 — Sub-Agent изоляция
Делитесь памятью через коммуникацию, а не коммуникацией через разделяемую память. — Manus (адаптация принципа Go concurrency)
┌──────────────────────────────────┐ ГЛАВНЫЙ АГЕНТ Контекст: план + координация (~5-10K токенов) Задача 1 ──► Sub-agent A Свой контекст Возвращает: ~1-2K Задача 2 ──► Sub-agent B (параллельно) Возвращает: ~1-2K Задача 3 ──► Sub-agent C (параллельно) Возвращает: ~1-2K Синтез результатов ◄──────── └──────────────────────────────────┘

Два режима передачи контекста (Google ADK)

РежимЧто передаётсяКогда
None modeТолько целевой промптДискретная задача: «Найди все TODO в коде»
Full modeВесь рабочий контекстСложная отладка, нужен полный контекст

Каждый sub-agent может потратить десятки тысяч токенов на исследование, но возвращает главному агенту только 1-2K сжатого резюме.

Multi-agent может потреблять до 15x больше токенов суммарно. Используй, когда сложность задачи это оправдывает.
09 Техника 6 — Иерархия инструментов

100+ инструментов в контексте → context confusion, галлюцинации параметров.

Трёхуровневое решение (Manus / Philipp Schmid)

Level 1: ЯДРО (~15-20 инструментов) Всегда в контексте. Стабильны, cache-friendly. file_read, file_write, bash, browser, search, memory Level 2: CLI-ОБЁРТКИ Вызываются через bash/shell, определения ВНЕ контекста. git, docker, npm, pip, curl → через tool: bash("git status") Level 3: ДИНАМИЧЕСКИЕ СКРИПТЫ Агент пишет код для сложных операций. Вместо 3 tool calls (get_city → get_id → get_weather) → один скрипт, делающий всё за один вызов

Антипаттерн: RAG для tool definitions

НЕ используй semantic search для динамической подгрузки описаний инструментов:

  • Создаёт shifting context — KV-cache ломается
  • Инструмент есть в ходу 1, пропадает в ходу 2 → галлюцинации
  • Решение: статический, курированный набор
10 Архитектура контекстного окна

Стабильный префикс + переменный суффикс

┌─────────────────────────────────────────────────────┐ СТАБИЛЬНЫЙ ПРЕФИКС (кешируется, не меняется) ┌───────────────────────────────────────────────┐ System Prompt │ - Роль и identity агента │ │ - Базовые правила поведения │ ├───────────────────────────────────────────────┤ Tool Definitions (Level 1) │ │ - 15-20 ядерных инструментов │ ├───────────────────────────────────────────────┤ Always-Pull Context │ - CLAUDE.md / rules │ └───────────────────────────────────────────────┘ ├─────────────────────────────────────────────────────┤ ПЕРЕМЕННЫЙ СУФФИКС (меняется каждый ход) ┌───────────────────────────────────────────────┐ Compacted Summary ├───────────────────────────────────────────────┤ JIT Memories (extracted on demand) │ ├───────────────────────────────────────────────┤ Recent Messages (raw, 3-7 последних) │ ├───────────────────────────────────────────────┤ Current User Input └───────────────────────────────────────────────┘ └─────────────────────────────────────────────────────┘
Правило Lost in the Middle: критически важная информация → начало (system prompt) или конец (последние ходы). Середина контекста — зона пониженного внимания.

Бюджет распределения токенов

Компонент% от окнаПри 200K
System prompt + tools5-10%10-20K
Always-pull context2-5%4-10K
Compacted summaries10-20%20-40K
JIT memories5-10%10-20K
Recent raw messages30-50%60-100K
Текущий ввод + tool results10-20%20-40K
Резерв (запас)10-20%20-40K
11 Четыре болезни контекста и их лечение
БолезньСимптомыПричинаЛечение
Context Poisoning Агент повторяет ошибки, фиксируется на ложных фактах Галлюцинация попала в контекст Валидация tool results; compaction; explicit correction
Context Distraction Повторяет прошлые действия, «застревает» Слишком много истории Агрессивное сжатие; summarization с фокусом
Context Confusion Неправильный выбор инструментов Много несвязанных инструментов Иерархия Level 1/2/3; sub-agent изоляция
Context Clash Противоречивые ответы, паралич Конфликтующая информация Приоритизация источников; override rules
12 Алгоритм принятия решений
НАЧАЛО: Новый ход агента │ ▼ Контекст > 70% лимита? │ │ НЕТ ДА │ │ ▼ ▼ Работаем Есть raw tool results как обычно старше 10 ходов? │ │ ДА НЕТ │ │ ▼ ▼ COMPACTION Контекст > 85%? (обратимая) │ │ │ НЕТ ДА │ │ │ ▼ ▼ ▼ Проверяем Работаем SUMMARIZATION снова % дальше (lossy-сжатие) │ ▼ Контекст > 90%? │ │ НЕТ ДА │ │ ▼ ▼ Работаем SUB-AGENT SPLIT дальше или NOTE-TAKING + НОВАЯ СЕССИЯ

Выбор техники по задаче

ЗадачаЛучшая техникаПочему
Долгий разговорCompaction → SummarizationConversational flow
Итеративная разработкаStructured Note-TakingЧёткие вехи, прогресс
Сложный researchSub-Agent изоляцияПараллельное исследование
Большая кодовая базаJIT-загрузкаКодовая база > контекста
Мультишаговый pipelineState isolationКаждый шаг = свои данные
13 Чеклист для реализации

Этап 1: Базовая архитектура

  • [ ] Разделить контекст на prefix/suffix — system prompt и tools в стабильный кешируемый блок
  • [ ] Настроить token counting — мониторинг заполнения окна на каждом ходу
  • [ ] Реализовать sliding window — последние N ходов в raw, остальное — по стратегии
  • [ ] Always-pull context — CLAUDE.md / rules всегда в начале контекста

Этап 2: Compaction

  • [ ] Tool Result Clearing — заменять raw tool outputs ссылками после N ходов
  • [ ] Порог compaction — 70% заполнения окна
  • [ ] Сохранять последние 3-5 raw ходов — для «ритма» модели

Этап 3: Summarization

  • [ ] Промпт для суммаризации — структурированный, с явными правилами
  • [ ] Порог — 85% заполнения, когда compaction исчерпана
  • [ ] Двухфазная настройка — сначала recall, потом precision
  • [ ] Формат — JSON с полями: decisions, progress, issues, files

Этап 4: Внешняя память

  • [ ] Scratchpad — файл для заметок внутри сессии
  • [ ] Долгосрочная память — vector DB или structured files
  • [ ] JIT-загрузка — инструменты для динамического чтения
  • [ ] Типизация памяти — episodic / procedural / semantic

Этап 5: Масштабирование

  • [ ] Sub-agents — для задач, требующих глубокого погружения
  • [ ] Иерархия инструментов — ≤20 ядерных, остальные через CLI
  • [ ] State isolation — модульный state с selective exposure
14 Антипаттерны: чего не делать

1. «Свалить всё в контекст»

Проблема: Полная история + все документы + все инструменты = context rot.

Решение: Минимальный эффективный контекст. Каждый токен оправдан.

2. RAG для tool definitions

Проблема: Динамическая подгрузка → shifting context → KV-cache поломка → галлюцинации.

Решение: Статический, курированный набор. Tools не меняются между ходами.

3. todo.md как persistent plan

Проблема: Перезапись файла плана на каждом ходу → ~30% waste токенов.

Решение: Agent-as-Tool — отдельный Planner sub-agent, инъекция плана только когда нужно.

4. Ждать 95% контекста для compaction

Проблема: Модель уже деградировала. Эффективный контекст часто <256K даже при лимите 1M.

Решение: Pre-Rot Threshold — compaction на 70%, summarization на 85%.

5. «Org Chart» мультиагентность

Проблема: Manager → Designer → Coder → Reviewer — агенты «общаются», раздувая контекст.

Решение: Плоская архитектура. Sub-agents = функции, не собеседники.

6. Fine-tuning модели под контекст

Проблема: Локальный оптимум. Каждая новая модель делает fine-tuning устаревшим.

Решение: Context engineering как гибкий интерфейс, адаптирующийся к любой frontier-модели.

15 Метрики эффективности

Операционные метрики

МетрикаФормулаЦель
Token efficiencyполезные / общие>60%
Compaction ratioпосле / до0.3-0.5
Context utilizationсреднее / лимит50-75%
JIT hit rateуспешные / все>80%
Memory recallнайденные / нужные>90%

Метрики качества

МетрикаКак измеритьЦель
Task completionЗадача выполнена? (binary)>85%
Post-compaction coherenceАгент продолжает без потери?Без регрессии
Hallucination rate% ложных фактов<5%
Context recoveryВосстановился из notes?>90%
Manus: не используй LLM-as-Judge. Используй computationally verifiable metrics — скомпилировался ли код? Существует ли файл? Прошли ли тесты?
16 Источники (20)
Самые эффективные системы (Manus, Claude Code) выигрывали не добавлением контекста, а его УДАЛЕНИЕМ.
Простота побеждает сложность. Минимальный эффективный контекст для следующего шага.