Глава 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 попадает гораздо больше, чем кажется по слову «история диалога». Перечень типичных потребителей токенов на старте сессии:

Окно заполняется до первого слова пользователя: у зрелого агента 5–10% бюджета уже занято инструкциями и схемами — это видно на шкале выше.

Что вытесняется первым

Когда история подбирается к лимиту, наивный харнесс просто падает. Зрелый — применяет каскадную стратегию: на каждой итерации цикла сверху вниз пробует всё более «дорогие» и разрушительные операции, пока что-то не освободит достаточно места. В claude-cli эта каскадная политика выглядит как четыре проактивных уровня плюс реактивный fallback:

  1. Snip — выкинуть самые старые целые сообщения, не сжимая их. Самая дешёвая операция: ничего не пересчитывается, история просто становится короче с одного конца.
  2. Microcompact — почистить старые tool_result-блоки, оставив плейсхолдеры вроде «здесь был результат чтения файла X». Тонкость: операция использует cache_edits API, чтобы не сбивать prompt cache.
  3. Context-collapse — спроецировать на старые блоки диалога заранее сгенерированные краткие выжимки. Гранулярность хорошая, но это уже потеря информации.
  4. 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»

Источники главы