Контекстная инженерия внутри оболочки: 4 механизма, которые предотвращают переполнение контекста и потерю цели в задачах с длинным горизонтом
Агент в своей простейшей форме — это LLM, вызывающая инструменты в цикле. Для коротких задач этот цикл работает. Но если дать ему задачу, которая выполняется час и требует 200 вызовов инструментов, он ломается двумя предсказуемыми способами. В руководстве AWS Samples по проектированию автономных облачных агентов для программирования они названы напрямую: поверхностные агенты сталкиваются с переполнением контекста, отвлекаются (теряют цель) и не поддерживают состояние в течение длительного времени. Слой, который это исправляет, — не модель. Это оболочка (harness), которая, по описанию AWS, управляет всем, кроме модели.
Эта статья рассматривает этот слой изнутри. Компактизация, стратегия памяти, бюджетирование контекста и состояние списка задач — вот механизмы, превращающие поверхностный цикл в глубокого агента. Мы рассмотрим, как LangChain Deep Agents, Claude Code, Manus, OpenAI Codex и Amazon Bedrock AgentCore реализуют каждый из них, включая фактические пороговые значения, с которыми они поставляются.
Почему увеличение окна не решает проблему
Очевидное решение — увеличить окно контекста. Но данные показывают, что это помогает меньше, чем можно было бы ожидать. В отчёте Chroma о деградации контекста оценивались 18 LLM, включая GPT-4.1, Claude 4, Gemini 2.5 и Qwen3, и было установлено, что по мере роста длины входных данных результаты становятся всё менее надёжными даже в простых задачах поиска. В руководстве Anthropic по эффективному проектированию контекста объясняется механизм: внимание создаёт n² попарных связей для n токенов, поэтому каждый добавленный токен расходует конечный «бюджет внимания». Контекст — это ресурс с убывающей отдачей, а не контейнер.
Для агентского цикла всё ещё хуже. Manus сообщает, что типичная задача требует около 50 вызовов инструментов, а соотношение входных и выходных токенов составляет примерно 100:1. Каждое наблюдение попадает в контекст и остаётся там. Исходная инструкция смещается к середине окна — именно там способность к извлечению информации снижается. Потеря цели — не только ошибка модели. Это ожидаемый результат неуправляемого контекста, если задача достаточно продолжительна.
Механизм 1: бюджетирование контекста и выгрузка
Первая задача оболочки — определить, что вообще не должно попадать в окно. Deep Agents поставляется с двумя правилами выгрузки и жёстко заданными числовыми порогами. Если ответ инструмента превышает 20 000 токенов, он записывается в файловую систему и заменяется путём к файлу с предварительным просмотром первых 10 строк. Когда контекст сессии пересекает отметку в 85% окна модели, старые вызовы инструментов записи и редактирования, полное содержимое файлов которых уже находится на диске, усекаются до указателя. Только после того, как выгрузка перестаёт справляться, оболочка переходит к суммаризации.
Claude Code применяет такое же бюджетирование к данным, загружаемым ещё до первого запроса. Автоматическая память ограничена первыми 200 строками или 25 КБ. Схемы инструментов MCP по умолчанию остаются отложенными: перечисляются только имена инструментов, а полные схемы загружаются по требованию через поиск инструментов. После компактизации любой повторно прочитанный файл размером более 5 000 токенов возвращается как ссылка на путь, а не как содержимое. Симуляция окна контекста в документации Claude Code наглядно показывает результат: исследовательский субагент читает 6 100 токенов файлов и возвращает родительскому агенту результат объёмом 420 токенов.
Такой паттерн субагентов — это бюджетирование на уровне архитектуры. В руководстве Anthropic отмечается, что каждый субагент может потратить десятки тысяч токенов на исследование, но возвращает сжатое резюме, часто объёмом от 1 000 до 2 000 токенов. В пошаговом руководстве AWS по AgentCore реализован именно такой подход: координатор параллельно запускает 3 браузерных субагента, каждый в собственной MicroVM, а субагент-аналитик получает только их структурированные результаты. AWS сообщает об ожидаемом времени выполнения от 4 до 6 минут и отмечает, что последовательная обработка заняла бы до 3 раз больше времени.
Механизм 2: компактизация
Когда выгрузки недостаточно, оболочка выполняет суммаризацию. Компактизация — это процесс, при котором диалог, приближающийся к пределу окна, суммируется, после чего запускается новый контекст с этим резюме. Именно здесь чаще всего происходит потеря цели, поскольку резюме с потерями может исключить единственное важное ограничение.
Реализации различаются тем, что именно они обещают сохранить. Промпт компактизации Claude Code сохраняет архитектурные решения, нерешённые ошибки и детали реализации, отбрасывая избыточные результаты работы инструментов. Сразу после компактизации он заново читает до 5 файлов, изменённых последними, повторно загружает правила, соответствующие этим файлам, и повторно внедряет тела вызванных навыков — не более 5 000 токенов на навык и 25 000 токенов суммарно. В документации прямо указано, что подробные инструкции из начала диалога могут быть утрачены, поэтому постоянные правила следует хранить в CLAUDE.md в корне проекта: этот файл повторно загружается с диска. Пользователь может направить этот процесс с помощью /compact сосредоточься на исправлении ошибки авторизации или изменить точку запуска с помощью /autocompact.
Deep Agents сделала сохранение цели структурной функцией. Её резюме представляет собой структурированный документ с отдельными полями для намерения сессии, созданных артефактов и следующих шагов. Команда LangChain добавила эти поля после экспериментов с принудительной суммаризацией, которые показали улучшение результатов. Полная исходная расшифровка также записывается в файловую систему, поэтому факт, исключённый при суммаризации, можно позднее восстановить с помощью read_file.
Компактизация перешла и на уровень API. Responses API от OpenAI предлагает серверную компактизацию через context_management с параметром compact_threshold, а также отдельную конечную точку /responses/compact, которая возвращает сжатое окно контекста с непрозрачным зашифрованным элементом компактизации; OpenAI рекомендует разработчикам передавать это возвращённое окно без изменений в следующий вызов. OpenAI сообщает, что Codex использует этот механизм для поддержки длительных задач программирования. Платформа разработчика Claude предоставляет редактирование управления контекстом compact_20260112 с пользовательскими инструкциями и параметром pause_after_compaction, позволяющим вставить содержимое до продолжения работы модели. При добавлении пользовательских инструкций они полностью заменяют стандартный промпт, поэтому промпт компактизации — это полноценный инженерный артефакт, а не настройка.
Механизм 3: состояние списка задач и повторное проговаривание
Компактизация защищает цель в момент суммаризации. Состояние списка задач защищает её на каждом промежуточном шаге. Manus просто описывала этот приём: агент создаёт файл todo.md и переписывает его шаг за шагом, отмечая выполненные пункты. Переписывание списка повторяет цели в конце контекста, возвращая общий план в область недавнего внимания модели и уменьшая дрейф из-за эффекта «потери в середине». Изменения архитектуры не требуются. Это естественный язык, используемый для смещения собственного внимания модели.
Данные о состоянии списка задач неоднозначны. Deep Agents поставляла инструмент write_todos по умолчанию до версии 0.7 в июле 2026 года, когда LangChain сделала TodoListMiddleware опциональным после того, как её оценочные тесты по 3 категориям задач показали немного более высокую награду и меньшую стоимость при отключённых списках задач. LangChain по-прежнему рекомендует включать его для длинных многоэтапных задач, менее способных моделей и интерфейсов, отображающих прогресс. Claude Code поддерживает список задач и после компактизации повторно внедряет план, записанный в режиме планирования, с диска. В руководстве Anthropic этот общий паттерн назван структурированным ведением заметок: агент записывает файл NOTES.md или TODO за пределами окна и повторно загружает его. В примере Anthropic с игрой Claude Plays Pokémon велись подсчёты на протяжении тысяч игровых шагов, после чего агент читал собственные заметки после каждого сброса контекста и продолжал многочасовые последовательности.
Общий принцип всех этих подходов заключается в том, что цель существует как изменяемый артефакт, а не только как сообщение в истории. Сообщения устаревают и суммируются. Файл, который переписывается каждые несколько шагов, всегда остаётся свежим, всегда краток и переживает любой сброс. Оправданность затрат токенов на каждом шаге зависит от модели и продолжительности задачи — именно это и измеряли оценочные тесты Deep Agents.
Механизм 4: стратегия памяти между сессиями
Последняя часть — это данные, сохраняющиеся после завершения задачи. Claude Code после каждой компактизации повторно загружает с диска CLAUDE.md из корня проекта и автоматическую память. AgentCore Memory сохраняет события и запускает настроенные стратегии извлечения в фоновом режиме, поэтому при следующем запуске координатор может вызвать инструмент поиска, вместо того чтобы заново проводить исследование. AWS предупреждает, что без настройки хотя бы одной стратегии извлечения необработанные события сохраняются, но ничего не извлекается для последующего поиска. Файловый инструмент памяти Anthropic выполняет ту же функцию на платформе Claude.
Ограничение заключается в том, что постоянный контекст не бесплатен. Исследование ETH Zurich, о котором мы рассказывали в феврале, показало, что такие файлы контекста репозитория, как AGENTS.md, как правило, не повышают успешность выполнения задач, но увеличивают стоимость вывода: файлы, созданные LLM, повысили стоимость на 20% и 23% в 2 тестах, а файлы, добавленные разработчиками, — до 19%. Память, загружаемая в каждой сессии, представляет собой постоянный налог на бюджет внимания. В документации Claude Code содержится соответствующая рекомендация: ограничивать CLAUDE.md 200 строками, а справочные материалы переносить в навыки или правила, привязанные к путям и загружаемые только при необходимости.
Интерактивное объяснение: наблюдаем за заполнением окна в 200 тысяч токенов
Приведённый ниже симулятор запускает задачу миграции из 60 шагов через окно объёмом 200 тысяч токенов. Переключите 4 механизма, задайте порог компактизации и нажмите «Запустить». Если всё отключить, окно переполнится ещё до завершения половины задачи. Если включить выгрузку, компактизацию, повторное проговаривание списка задач и делегирование субагентам, та же задача завершится, а цель всё ещё будет находиться в области недавнего внимания. Количество токенов приведено для иллюстрации; пороговые значения соответствуют настройкам Deep Agents по умолчанию.
Проверка того, действительно ли оболочка удерживает цель
Управление контекстом полезно только в том случае, если агент по-прежнему способен завершить задачу и восстановить детали, которых больше не видит. LangChain поддерживает целевые оценочные тесты именно для этого: тесты, запускающие суммаризацию в середине задачи и проверяющие, продолжает ли агент двигаться к цели, а также сценарии «иголка в стоге сена», в которых факт был исключён при суммаризации и должен быть восстановлен через поиск в файловой системе. Чтобы сгенерировать достаточно событий для сравнения вариантов промптов, команда запускает суммаризацию на уровне от 10 до 20% окна вместо значения по умолчанию в 85% и использовала порог 25% с Claude Sonnet 4.5 на terminal-bench-2 для изучения эффекта.
Согласно LangChain, следует следить за таким сбоем, как дрейф цели: агент запрашивает уточнения сразу после суммаризации или ошибочно объявляет задачу выполненной. В AgentCore Evaluations есть оценщик успешности достижения цели, который может оценивать те же трассировки. Если вы запускаете оболочку и ещё ни разу не принудительно выполняли компактизацию в тесте, вы пока не знаете, что именно теряет ваш промпт суммаризации.
Ключевые выводы
- Поверхностные агенты терпят неудачу из-за переполнения контекста и потери цели; исправление находится в оболочке, а не в модели.
- Сначала определите бюджет: Deep Agents выгружает результаты инструментов объёмом более 20 000 токенов и удаляет старые изменения при заполнении 85% окна.
- В компактизации необходимо явно указать, что сохраняется; Deep Agents добавляет поля намерения сессии и следующих шагов, а Claude Code повторно читает 5 последних файлов.
- Повторное проговаривание списка задач удерживает цель в конце контекста, однако оценочные тесты Deep Agents v0.7 показывают, что это не гарантированно даёт выигрыш.
- Постоянная память расходует внимание: ETH Zurich зафиксировал увеличение стоимости вывода на 20–23% из-за контекстных файлов, созданных LLM.
Переведено автоматически с английского. Оригинал статьи — по ссылке ниже.