Основы

Контекстное окно LLM-агента: что в него попадает и почему агент забывает правила

Обновлено: · Skillaria.Top

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

Что такое контекстное окно LLM

Контекстное окно LLM — это весь текст, который модель получает на вход при генерации очередного ответа. У модели нет памяти в человеческом смысле: всё, что она «знает» о вашей задаче в данный момент, находится в этом окне. Чего в окне нет, для модели не существует.

Размер окна измеряется в токенах — кусочках слов. Для русского текста один токен в среднем короче, чем для английского, поэтому одна и та же инструкция на русском обычно стоит больше токенов. У современных моделей окна в сотни тысяч токенов, и кажется, что места хватит на всё. На практике у агента это место заканчивается быстрее, чем ожидаешь, а работать хуже он начинает ещё раньше.

Что попадает в контекстное окно агента

У агента для программирования ровно три источника информации: системный промпт с описанием задачи, содержимое файлов, которые он прочитал, и вывод инструментов, которые он вызвал. Все три живут в одном и том же окне и конкурируют за место.

ЧтоКогда попадаетСколько обычно стоит
Системный промпт агента и описания инструментовВ начале каждой сессииФиксированная плата, от вас почти не зависит
CLAUDE.md, AGENTS.md и другие файлы инструкцийВ начале сессии, целикомОт сотен до десятков тысяч токенов — зависит от вас
Ваши сообщения и ответы агентаНакапливаются весь диалогРастёт с каждой репликой
Прочитанные файлыКогда агент их открываетБольшой файл — тысячи токенов за раз
Вывод команд: тесты, логи, сборка, grepПосле каждого вызоваЧасто самая крупная и самая бесполезная часть

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

Почему агент забывает правила в длинной сессии

Частая жалоба: в начале сессии агент аккуратно соблюдает правила из CLAUDE.md, а через час работы начинает их нарушать. Он их не «забыл» в буквальном смысле — текст правил всё ещё в окне. Проблема в том, как модель распределяет внимание по длинному тексту.

Lost in the middle

Исследование Liu и соавторов 2023 года показало: языковые модели заметно лучше используют информацию из начала и конца длинного контекста, чем из середины. Файл инструкций загружается в начале сессии, но по мере диалога сверху и снизу нарастает всё больше текста. Правило, которое было на виду, постепенно оказывается в зоне, где модель «видит» хуже всего.

Доля правил в окне падает

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

Свежие примеры перевешивают старые правила

Модель сильно опирается на то, что происходило в диалоге недавно. Если агент несколько раз подряд сделал что-то в обход правила и это сошло ему с рук, этот паттерн в истории начинает весить больше, чем строка инструкции где-то в начале.

Context rot: деградация качества до предела окна

Context rot («гниение контекста») — так называют эффект, когда качество ответов модели падает по мере заполнения окна, хотя до технического лимита ещё далеко. Модель формально принимает 200 тысяч токенов, но на 150 тысячах работает хуже, чем на 20: чаще путает детали, повторяет уже отвергнутые решения, теряет инструкции.

Признаки, что сессия «прогнила»:

  • агент предлагает подход, от которого вы вместе отказались полчаса назад;
  • путает имена файлов и функций, которые уже обсуждались;
  • перестаёт запускать проверки, которые в начале запускал сам;
  • ответы становятся длиннее и расплывчатее, появляются лишние «заодно поправил».

Лечить это добавлением ещё одного правила бесполезно: новое правило тоже потеряется в том же шуме. Нужно уменьшать шум.

Компакция контекста

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

В Claude Code для этого есть команда /compact, которой можно передать подсказку, на чём сосредоточиться при сжатии. Когда окно близко к пределу, Claude Code выполняет компакцию и автоматически. Команда /clear очищает историю полностью и начинает с чистого листа, а /context показывает, чем сейчас занято окно.

/context
/compact сохрани: цель задачи, принятые решения с причинами, список изменённых файлов, что осталось проверить
/clear

Чем опасна компакция

Пересказ всегда теряет детали. В сжатое изложение может не попасть отвергнутый вариант и причина отказа, точная формулировка требования или нюанс, о котором вы договорились мимоходом. После компакции агент работает с чужим конспектом своей же сессии. Поэтому важные вещи надёжнее держать не в истории диалога, а в файлах, которые переживут любую компакцию.

Компакция или новая сессия

СитуацияЧто делать
Задача почти доделана, нужно ещё немного местаКомпакция с подсказкой, что сохранить
Закончили одну задачу, начинаете другуюНовая сессия, старая история только мешает
Сессия «прогнила», агент ходит по кругуЗаписать состояние в файл плана, начать новую сессию
Нужно долго исследовать код или логиОтдать исследование субагенту

Как экономить контекстное окно

Экономия контекста — это не про цену токенов, а про качество работы. Чем меньше шума в окне, тем больше внимания достаётся задаче и правилам.

1. Короткий файл инструкций-роутер

Входной CLAUDE.md или AGENTS.md читается целиком в каждой сессии. Файл на 600 строк — это порядка 10–20 тысяч токенов постоянной платы. Держите в нём команды проверки, жёсткие ограничения и карту проекта, а подробности по темам — в отдельных документах, которые агент открывает только при необходимости.

2. Знания, которые подгружаются по требованию

В Claude Code skills устроены так, что в контекст сначала попадает только их короткое описание, а полный текст инструкции загружается, когда skill нужен для задачи. Это удобный способ держать редкие процедуры — деплой, миграции, релиз — под рукой, не платя за них в каждой сессии.

3. Субагенты для шумной работы

Субагент работает в собственном контекстном окне и возвращает основной сессии только результат. Поиск по большому коду, разбор длинного лога, изучение незнакомого модуля — всё это можно отдать субагенту и получить в ответ несколько абзацев выводов вместо тысяч строк сырого вывода.

4. Тихий вывод инструментов

Вывод команд — главный пожиратель окна. Настройте команды проверки так, чтобы при успехе они печатали одну строку, а при ошибке — только суть: упавший тест и его сообщение, а не полный лог сборки.

# шумно: тысячи строк в окно на каждый прогон
pytest -v

# тихо: при успехе одна строка, при падении — только упавшие тесты
pytest -q --tb=short

# лог — не целиком, а только хвост и ошибки
tail -n 50 app.log | grep -i error

5. Одна задача — одна сессия

Не тяните одну сессию через три несвязанные задачи. История первой задачи бесполезна для третьей, но занимает место и путает агента. Закончили — зафиксировали результат — открыли новую сессию.

6. Состояние в файлах, а не в истории

Всё, что должно пережить компакцию и новую сессию, записывайте в репозиторий: цель, принятые решения с причинами, отвергнутые варианты, что сделано и как проверено, следующий шаг. Например, в PLAN.md и PROGRESS.md. Тогда новая сессия начинается не с пересказа, а с точного документа, и вы можете смело очищать историю.

# PROGRESS.md
## Цель
Перевести расчёт скидок на целые копейки

## Сделано (проверено)
- app/payments/discount.py: float → int, make test зелёный
- Миграция 041 добавлена, применена локально

## Решения
- Округление — банковское, как у платёжного провайдера

## Отвергнуто
- Decimal в модели: ломает сериализацию вебхуков

## Следующий шаг
Обновить e2e-сценарий оформления заказа и прогнать make e2e

Критичные правила — не только в окне

Даже идеально устроенный контекст не гарантирует соблюдения правил: текст в окне — это влияние на модель, а не исполняемый запрет. Если нарушение недопустимо, правило должно проверяться механически. В Claude Code для этого есть хуки — команды, которые запускаются на событиях агента и могут заблокировать действие, — и настройки прав, которые запрещают определённые инструменты или команды. Линтеры, тесты и CI работают независимо от того, что сейчас творится в окне агента.

Хорошее правило харнеса: всё, что можно проверить автоматически, проверяется автоматически, а в контексте остаётся только то, что требует суждения.

Итог

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

Частые вопросы

Сколько токенов в контекстном окне Claude?

Зависит от модели и тарифа, стандартный ориентир — около 200 тысяч токенов, у некоторых моделей и конфигураций больше. Точные значения смотрите в документации Anthropic для конкретной модели.

Помогает ли модель с большим окном решить проблему забытых правил?

Частично: места больше, но эффект lost in the middle и context rot никуда не деваются. Большое окно не заменяет короткие инструкции и чистую сессию.

Нужно ли повторять важное правило в сообщении, если агент его нарушает?

Разовое напоминание помогает, потому что свежий текст в конце контекста модель видит лучше. Но если приходится напоминать постоянно, правило стоит закрепить проверкой или хуком.

Как понять, чем занято контекстное окно в Claude Code?

Команда /context показывает, сколько места занимают системный промпт, инструменты, файлы памяти и история сообщений. Это быстрый способ увидеть, что раздутый CLAUDE.md или длинная история съедают окно.

Что теряется при компакции в первую очередь?

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