Глава 04 · Память текущего диалога
Context Window — единственная память модели
Модель помнит ровно то, что вы передали в messages этим запросом — и ничего больше. Окно контекста — это не «думающий процесс», а жёсткий бюджет токенов, и он кончается быстрее, чем кажется.
Что такое окно контекста
Окно контекста — это весь текст, который модель «видит» при генерации одного ответа: system prompt, описания инструментов, история сообщений, текущий вопрос и место под сам ответ. У актуальных моделей Anthropic — Claude Mythos Preview, Opus 4.7, Opus 4.6 и Sonnet 4.6 — окно 1 000 000 токенов. У моделей постарше (Sonnet 4.5 и Sonnet 4) — 200 000. Один токен — это примерно три-четыре символа на английском или один-два на русском; миллион токенов — это книга средней толщины или весь monorepo среднего стартапа.
Звучит как «безлимит» — но это иллюзия. Anthropic в гайде по context engineering пишет напрямую: контекст — это конечный ресурс с убывающей отдачей. Чем длиннее окно, тем хуже модель удерживает фокус и теряет факты из середины — эффект называется context rot. Курировать содержимое окна оказывается важнее, чем растягивать его размер.
Что забивает окно
В messages попадает гораздо больше, чем кажется по слову «история диалога». Перечень типичных потребителей токенов на старте сессии:
- system prompt — инструкции харнесса, описание роли, правила безопасности. Обычно от пары сотен до нескольких тысяч токенов.
- tools schemas — JSON-схемы всех зарегистрированных инструментов. Если у агента есть полтора десятка функций (читать файл, бить в shell, ходить в API, ставить todo), легко набегает 10–20k токенов до первого сообщения пользователя.
- история сообщений — все user/assistant-сообщения с прошлых поворотов цикла, включая
tool_use-блоки иtool_result-блоки целиком. Один результат чтения файла — это содержимое файла, без сжатия. - thinking blocks — если включён extended thinking, рассуждения модели тоже занимают токены. Anthropic автоматически выкидывает их из будущих входов, но в текущем повороте они считаются.
- output reserve — место, которое нужно оставить под ответ. Если в окне нет минимум
max_output_tokensсвободных, модель просто не сможет ответить.
Окно заполняется до первого слова пользователя: у зрелого агента 5–10% бюджета уже занято инструкциями и схемами — это видно на шкале выше.
Что вытесняется первым
Когда история подбирается к лимиту, наивный харнесс просто падает. Зрелый — применяет каскадную стратегию: на каждой итерации цикла сверху вниз пробует всё более «дорогие» и разрушительные операции, пока что-то не освободит достаточно места. В claude-cli эта каскадная политика выглядит как четыре проактивных уровня плюс реактивный fallback:
- Snip — выкинуть самые старые целые сообщения, не сжимая их. Самая дешёвая операция: ничего не пересчитывается, история просто становится короче с одного конца.
- Microcompact — почистить старые
tool_result-блоки, оставив плейсхолдеры вроде «здесь был результат чтения файла X». Тонкость: операция используетcache_editsAPI, чтобы не сбивать prompt cache. - Context-collapse — спроецировать на старые блоки диалога заранее сгенерированные краткие выжимки. Гранулярность хорошая, но это уже потеря информации.
- Autocompact — последний рубеж: позвать саму модель, попросить её сделать summary всего диалога, и заменить историю на эту выжимку плюс пять последних сообщений. Самая разрушительная операция, потому что детали уходят.
В API Anthropic есть серверный аналог последнего шага — server-side compaction (beta-заголовок compact-2026-01-12, стратегия compact_20260112 в context_management.edits). API сам отслеживает приближение к лимиту, генерирует compaction-блок с summary, и на следующих запросах автоматически выкидывает всё, что было до этого блока. Поддерживается на Mythos Preview, Opus 4.7/4.6 и Sonnet 4.6.
Для точечных задач есть context editing (beta context-management-2025-06-27): clear_tool_uses_20250919 чистит старые tool_result по порогу, clear_thinking_20251015 — старые thinking-блоки. Серверная микрокомпакция без полного summary.
PTL — prompt_too_long
Если прогнозы не сработали и в окно не помещается, новые модели Anthropic (с Sonnet 3.7) не урезают вход молча. Они возвращают ошибку с причиной prompt_too_long — в коде харнесса это сокращают до PTL. Это не overloaded_error (перегрузка API): PTL значит, что ваш запрос конкретно сейчас не влез, и пока вы не уберёте что-то из контекста, повторный запрос провалится так же.
Рядом — max_output_tokens: модель уткнулась в потолок выходных токенов. Зрелые харнессы обрабатывают оба отдельно. claude-cli на PTL запускает реактивный compact (тот же autocompact, но после ошибки), а на max_output_tokens повышает лимит до 64k, потом подкладывает системную подсказку «продолжи без извинений». Подробнее про восстановление — в главе 10.
Context engineering — четыре принципа Anthropic
Applied AI team Anthropic в посте «Effective context engineering for AI agents» формулирует мысль одной фразой: «найти наименьший набор высокосигнальных токенов, который максимизирует вероятность нужного результата». Расшифровывается это в четыре практических правила.
1. Right tokens — минимальный, но достаточный объём. System prompt должен быть на правильной «высоте»: не if-else-простыня с захардкоженными ветками и не размытое «будь полезным». Tools — без перекрытий по функциональности; если человек-инженер не может сказать, какой из двух инструментов нужен в конкретной ситуации, агент тем более не сможет. Минимум — это не обязательно коротко, это без избыточности.
2. Just-in-time retrieval — подтягивать данные по необходимости. Вместо того чтобы заранее запихнуть в контекст всё, что может пригодиться, агент держит лёгкие идентификаторы (пути, URL, ID запросов) и подгружает содержимое инструментами уже на лету. Это поведение Claude Code: он не индексирует репозиторий в начале сессии, а ходит по нему через glob и grep, читая только нужные файлы.
3. Sub-agent isolation — тяжёлые задачи в подагентов. Когда нужен глубокий проход по большой области (десятки тысяч токенов поиска), его делает суб-агент с чистым окном, а в основной диалог возвращается только сжатый результат — 1–2k токенов. Главный агент остаётся сфокусированным. Подробнее — в главе 7.
4. Summarization — компактить, а не выбрасывать. Когда диалог уходит за лимит, summary лучше потери концов. Искусство — что сохранить (архитектурные решения, нерешённые баги) и что выбросить (повторяющиеся tool-результаты). Anthropic советует калибровать промпт сначала на recall, потом подрезать precision.
Файловая система как контекст: трюк Manus
Команда Manus в посте «Lessons from Building Manus» формулирует приём, который не вписывается в каскад выше: filesystem-as-context. Идея простая. Современные модели поддерживают 128k+ токенов, но для долгого агента этого мало: одна большая веб-страница или PDF сжирает контекст за раз, а длинный вход остаётся дорогим даже с prefix-кэшем.
Вместо агрессивного сжатия — которое необратимо теряет информацию — Manus делает файловую систему «окончательным контекстом»: безграничным, персистентным и доступным через инструменты. Агент пишет промежуточные результаты в файлы и читает их обратно по необходимости. Сжатие остаётся восстановимым: URL сохраняется, а содержимое страницы — нет; путь к документу остаётся, а содержимое — выкидывается. Контекст коротеет, но информация не теряется. Это мост к главе 5: память агента живёт не в окне, а на диске.
Кэш как побочный эффект
Последнее: контекст можно не перепосылать целиком каждый поворот. Через prompt caching стабильный префикс — system prompt, tools schemas, ранние сообщения — кэшируется на стороне Anthropic, и последующие запросы платят за него по сильно сниженному тарифу. У Manus соотношение входных и выходных токенов примерно 100:1, поэтому KV-cache hit rate они называют «самой важной метрикой production-агента». Главное правило — append-only контекст: не модифицируйте старые сообщения, иначе кэш инвалидируется. Подробный разбор — в главе 11.
Context must be treated as a finite resource with diminishing marginal returns. Like humans, who have limited working memory capacity, LLMs have an "attention budget" that they draw on when parsing large volumes of context.
— Applied AI team, Anthropic · «Effective context engineering for AI agents»Источники главы
- [ant] Context windows — Anthropic Docs (1M/200k токенов, context awareness,
budget:token_budget, validation error вместо silent truncation) - [ant] Effective context engineering for AI agents — Anthropic Engineering (context rot, attention budget, четыре стратегии: right tokens / just-in-time / sub-agents / summarization)
- [ant] Compaction — Anthropic Docs (beta-заголовок
compact-2026-01-12, стратегияcompact_20260112, поддерживаемые модели) - [ant] Context editing — Anthropic Docs (beta-заголовок
context-management-2025-06-27,clear_tool_uses_20250919,clear_thinking_20251015) - [man] Context Engineering for AI Agents — Yichao Ji, Manus (filesystem-as-context, KV-cache hit rate, attention recitation через
todo.md) - [cli] Конспект: Context Management (четырёхуровневый каскад snip → microcompact → context-collapse → autocompact, реактивный путь на
prompt_too_long, circuit breaker)