Контекстное окно LLM: что это и почему модель забывает
Что такое контекстное окно?
Контекстное окно - максимальное число токенов, которое модель обрабатывает за один запрос: инструкции, история диалога, документы, описания tools и сам ответ. Модель не помнит ничего за пределами окна: между запросами «память» создаёт приложение, повторно присылая историю.
TL;DR
- -Окно считает вход и выход вместе: system prompt, историю, файлы, описания tools, результаты их вызовов, рассуждения модели и сам ответ.
- -На 8 ноября 2026 у флагманов Anthropic, OpenAI, Google и DeepSeek окно около 1M токенов, лимит выхода по умолчанию от 64K до 384K.
- -Цена зависит от длины: у Claude Haiku 5.5 промпт больше 100K токенов стоит в 5 раз дороже, у GPT-6 вход больше 272K вдвое дороже, у остальных Claude тариф единый на всё окно.
- -При переполнении облачный API отвечает ошибкой 400, а локальный Ollama в замере автора молча обрезал вход и ответил без начала текста.
- -В диалоге каждый ход заново отправляет и оплачивает всю историю: за 10 ходов вход вырос с 20 до 1 134 токенов.
Контекстное окно - это максимальное число токенов, которое языковая модель обрабатывает за один запрос. В него входят системные инструкции, вся история диалога, вложенные документы, описания tools и сам ответ модели. Всё, что не поместилось в окно, для модели не существует.
Окно - не обучающие данные и не долговременная память. Модель между запросами ничего не хранит: «память» в чате создаёт приложение, которое на каждом ходу заново присылает историю. Отсюда два частых сюрприза. Модель с окном в 1M токенов «забывает» начало разговора, а длинный диалог стоит дороже короткого, хотя вы задаёте такие же короткие вопросы.
Статья о том, как устроено окно, какие у него размеры на ноябрь 2026, что происходит на пределе и почему длинный контекст дорог. Числа о росте и переполнении окна - из замеров автора 8 ноября 2026 через OpenRouter и Ollama 0.40.14.
Что такое контекстное окно нейросети
Документация Anthropic называет окно «рабочей памятью» модели: это весь текст, к которому модель может обращаться при генерации ответа, включая сам ответ (Context windows). Окно измеряется в токенах, а не в словах или символах.
Токен - кусок текста: слово, часть слова или знак. На такие куски токенизатор режет вход. По документации Anthropic, 1M токенов на текущем токенизаторе Claude (введён с Opus 4.7) это примерно 555 тысяч слов или 2,5 млн символов, на прежних моделях было около 750 тысяч слов (Models overview). Русский текст того же смысла занимает больше токенов: в замерах из статьи о токенах у Claude Haiku 5.5 разница на прозе составила 1,19-1,28 раза.
Из чего складывается окно
В окно попадает всё, что есть в запросе. Последнее сообщение пользователя - лишь одна из частей. Полный список из документации Anthropic:
| Что занимает окно | Откуда берётся | Комментарий |
|---|---|---|
| System prompt | приложение, агент, CLAUDE.md | отправляется в каждом запросе |
История messages | все прошлые реплики | растёт с каждым ходом |
| Файлы, изображения, PDF | вложения пользователя | в одном запросе до 600 изображений или страниц PDF |
| Определения tools | MCP-серверы, функции | схемы инструментов тоже текст |
| Результаты tools | чтение файлов, поиск, логи | вывод инструмента попадает в окно целиком |
| Рассуждения (thinking) | модель | у Opus 4.5+, Sonnet 4.6+, Haiku 5.5 и Fable прошлые блоки по умолчанию остаются в окне |
| Ответ модели | модель | считается в окно того же запроса |
Prompt cache место не освобождает. Поля input_tokens, cache_read_input_tokens и cache_creation_input_tokens все считаются в окно: кэш меняет цену токенов, но не их количество.
Выход тоже занимает место
Окно делится между входом и ответом. Если вход занял 990K из 1M, на ответ осталось 10K, даже если max_tokens выставлен в 128K. Рассуждения модели входят в max_tokens и оплачиваются как выходные токены.
У Google это записано прямо в карточке модели: окно Gemini 4 Argon в 1 048 576 токенов - общий лимит на вход и выход (Gemini 4 Argon).
Размеры контекстных окон на ноябрь 2026
Снимок на 8 ноября 2026, по страницам вендоров. Цены в долларах за 1M токенов, стандартный тариф без кэша и batch.
| Модель | Окно | Макс. выход | Вход / выход | Длинный контекст |
|---|---|---|---|---|
| Claude Fable 5.1 | 1M | 128K | $10 / $50 | единый тариф |
| Claude Opus 5.5 | 1M | 128K | $4 / $20 | единый тариф |
| Claude Sonnet 5.5 | 1M | 128K | $2 / $10 | единый тариф |
| Claude Haiku 5.5 | 1M | 128K | $0,10 / $0,50 | промпт больше 100K: $0,50 / $2,50 |
| GPT-6 Astra | 1,05M | 128K | $10 / $50 | вход больше 272K: вход x2, выход x1,5 |
| GPT-6.1 Sol | 1,05M | 128K | $2 / $10 | то же |
| GPT-6.1 Terra | 1,05M (вход до 922K) | 128K | $1 / $5 | то же |
| GPT-6 Luna | 1,05M | 128K | $0,10 / $0,50 | то же |
| Gemini 4 Argon | 1 048 576 на вход и выход | 65 536 по умолчанию | $2 / $10 до 30.11.2026, $4 / $20 с 01.12.2026 | отдельного тарифа нет |
DeepSeek deepseek-flash | 1M | до 384K | $0,15 / $0,60 вне пика | в пиковые часы x2 |
DeepSeek deepseek-v4-pro | 1M | до 384K | $0,66 / $1,98 вне пика | в пиковые часы x2 |
| Qwen3.8-27B (открытые веса) | 262 144 | - | локально | зависит от памяти машины |
Источники: цены Anthropic, модели OpenAI и карточка GPT-6.1 Terra, цены Gemini, цены DeepSeek, Qwen по гайду о локальных LLM. У DeepSeek пиковые часы 01:00-04:00 и 06:00-10:00 UTC по будням; лимит выхода в таблице вендора указан одной ячейкой на обе модели.
Сравнивать «1M» у разных вендоров напрямую нельзя: токенизаторы режут один и тот же текст на разное число токенов. По документации Anthropic, модели с Opus 4.7 и новее дают примерно на 30% больше токенов на тот же текст, чем прежние модели Claude (Token counting).
Окно в API и окно в приложении
Окно в чат-приложении может отличаться от окна в API. На платных планах Claude у Fable 5.1, Opus 5.5, Sonnet 5.5, Haiku 5.5, Opus 5 и Sonnet 5 окно 1M, у Fable 5 и части моделей поколения 4 - 500K, у остальных 200K (справка Claude).
Для приложения ChatGPT эта статья цифр не приводит: первичный источник проверить не удалось. Окно API из таблицы на чат не переносите.
Что происходит, когда окно заканчивается
Поведение на пределе зависит от того, где работает модель: в облачном API, в локальном раннере или в приложении поверх API.
Облачный API: ошибка 400
У Anthropic правило простое. Если один только вход больше окна, API на всех моделях возвращает HTTP 400 invalid_request_error с текстом «prompt is too long». Если вход помещается, но вход плюс max_tokens больше окна, модели Claude 4.5 и новее принимают запрос, а генерация останавливается со stop_reason: "model_context_window_exceeded" (Context windows). Молча ничего не обрезается.
В замере автора облачный эндпоинт с окном 32 768 токенов (mistral-small-24b-instruct-2501 через OpenRouter) на вход около 41 080 токенов вернул HTTP 400 с точными числами:
This endpoint's maximum context length is 32768 tokens. However, you requested
about 41090 tokens (41080 of text input, 10 in the output).
Ошибка неприятна, но честна: клиент знает, что запрос не выполнен и сколько нужно срезать.
Локальный Ollama: тихое усечение
С локальным раннером в том же замере вышло иначе. В начало текста на ~4 600 токенов автор поставил кодовое слово PELICAN-47, в конец вопрос о нём, и отправил в Ollama 0.40.14 с num_ctx 2048.
| Модель | num_ctx | Вход | Ответ сервера | prompt_eval_count | Кодовое слово |
|---|---|---|---|---|---|
| qwen3:8b | 2048 | ~4 592 | HTTP 200 | 1026 | не найдено, ответ «Note» |
| gemma4:e4b | 2048 | ~4 400 | HTTP 200 | 1027 | не найдено: «The text does not mention a secret code word at the very beginning.» |
| qwen3:8b | 8192 | 4 592 | HTTP 200 | 4592 | найдено |
| gemma4:e4b | 8192 | 4 399 | HTTP 200 | 4399 | найдено |
Ошибки не было. Ollama обрезала промпт примерно до половины num_ctx, начало текста вместе с кодовым словом пропало, и модель уверенно ответила, что слова в тексте нет. Предупреждение появилось только в логе сервера:
level=WARN msg="truncating input prompt" limit=1026 prompt=4592 keep=4 new=1026
Клиент этого лога не видит. Единственный признак в самом ответе - поле prompt_eval_count: если оно заметно меньше ожидаемого размера промпта, вход обрезан. Проверить можно тем же запросом, что в замере, в форме curl:
curl -s http://localhost:11434/api/chat -d '{
"model": "qwen3:8b",
"stream": false,
"think": false,
"options": {"num_ctx": 2048, "num_predict": 20},
"messages": [{"role": "user", "content": "<длинный текст и вопрос>"}]
}' | jq '{prompt_eval_count, answer: .message.content}'
Это важно для агентов на локальных моделях. По документации Ollama, на машинах, где GPU видит меньше 24 GiB, контекст по умолчанию 4K токенов (Context length), и длинный системный промпт агента может обрезаться без единой ошибки. Как выставить контекст и проверить его в ollama ps, описано в гайде по Ollama. Замер сделан на одной версии Ollama и двух моделях; другие локальные раннеры в замере не участвовали и могут вести себя иначе.
Чат и Claude Code: сжатие истории
Приложения поверх API обычно не показывают ошибку, а управляют окном сами. Документация Anthropic отмечает, что чат-интерфейсы вроде claude.ai могут вести окно по принципу «первым вошло, первым вышло». На платных планах Claude с включённым code execution при приближении к пределу работает автоматическое управление контекстом: Claude суммирует ранние сообщения, а полная история остаётся доступной для просмотра. Без code execution этот механизм не работает (справка Claude).
В Claude Code то же делает авто-компакция: она суммирует историю при приближении к лимиту окна (Manage costs). Управлять этим можно вручную:
/contextпоказывает, что занимает окно;/compact Focus on code samples and API usageсжимает историю и говорит, что сохранить; постоянные указания можно положить в раздел# Compact instructionsв CLAUDE.md;/clearначинает чистую сессию при переходе к несвязанной задаче.
У сжатия есть цена: /compact читает весь разговор, который суммирует, поэтому сжатие большого контекста само по себе большой запрос. /clear ничего не стоит. Подробнее о работе с сессиями в полном гайде по Claude Code.
Почему модель «забывает»
«Забывание» почти всегда объясняется одной из четырёх причин, и только последняя связана с самой моделью.
| Причина | Как выглядит | Что делать |
|---|---|---|
| Новый диалог | модель не знает того, что обсуждали в прошлой сессии | перенести нужные факты в первое сообщение или файл; продуктовая «память» - отдельный слой без гарантий |
| Приложение сжало или отбросило старое | общая линия разговора сохранилась, детали из начала пропали | сжимать с инструкцией, принятые решения держать в отдельном файле |
| Вход больше окна | API: ошибка 400; локальный раннер: ответ без начала текста | считать токены заранее, сокращать вход, поднимать num_ctx |
| Модель видит всё, но использует хуже | факт из середины длинного документа проигнорирован | сокращать контекст, класть важное ближе к началу или концу |
Модель stateless, и всё, что выглядит как память диалога, - история, которую приложение каждый раз присылает в окне заново. Поэтому уточнение в том же диалоге работает лучше: прошлые реплики лежат в окне, а в новом диалоге их там нет.
Последняя строка таблицы описана в работе Lost in the Middle (Liu et al., 2023, TACL): модели лучше использовали информацию из начала и конца контекста и заметно хуже из середины, даже модели, рассчитанные на длинный вход. Исследование сделано на моделях 2023 года, на текущих поколениях картина может быть другой. Anthropic в документации пишет прямо: с ростом числа токенов точность и полнота извлечения падают, и называет это context rot. Отсюда практическое правило: окно - вместимость, а не гарантия, что каждый факт будет использован.
Почему длинный контекст дорогой
Длинный контекст стоит дороже по трём причинам: каждый ход оплачивает всю историю, у части моделей длинный промпт тарифицируется по повышенной ставке, а внутри модели вычисления и память растут вместе с длиной.
Каждый ход оплачивает всю историю
Модель не помнит прошлый ход, поэтому приложение на каждом шаге отправляет весь диалог целиком. Документация Claude Code формулирует это так: Claude Code отправляет полный разговор с каждым запросом (Manage costs).
Замер автора: 10 ходов короткого диалога с Claude Haiku 5.5 через OpenRouter, рассуждение выключено, max_tokens 120, на каждом ходу отправляется вся история.
| Ход | Входные токены | Выходные токены | Оплачено всего |
|---|---|---|---|
| 1 | 20 | 91 | 111 |
| 2 | 127 | 120 | 358 |
| 3 | 262 | 120 | 740 |
| 4 | 399 | 120 | 1 259 |
| 5 | 535 | 65 | 1 859 |
| 6 | 616 | 120 | 2 595 |
| 7 | 754 | 94 | 3 443 |
| 8 | 858 | 120 | 4 421 |
| 9 | 994 | 120 | 5 535 |
| 10 | 1 134 | 95 | 6 764 |
Вход десятого хода в 57 раз больше первого. За 10 ходов оплачено 6 764 токена, хотя сами вопросы и ответы вместе занимают около 1 230. На этом масштабе это $0,0011 за весь диалог. Это одна модель и короткий учебный диалог, но механика общая: на агенте, который каждый ход возвращает в окно содержимое файлов и логи, та же арифметика работает с сотнями тысяч токенов.
Prompt cache удешевляет повтор неизменного начала, но не отменяет его. Чтение из кэша у Opus 5.5 и Sonnet 5.5 стоит 5% от цены входа, у Fable 5.1 2,5%, у Haiku 5.5 10% (Pricing). Место в окне кэшированные токены занимают по-прежнему.
Цена одного длинного запроса
Расчёт по прайсам на 8 ноября 2026, без кэша: вход 50K, 150K и 300K токенов плюс 2 000 токенов ответа.
| Модель | 50K | 150K | 300K |
|---|---|---|---|
| Claude Haiku 5.5 (порог 100K) | $0,006 | $0,080 | $0,155 |
| GPT-6.1 Terra (порог 272K) | $0,060 | $0,160 | $0,615 |
| Claude Sonnet 5.5 (без порога) | $0,120 | $0,320 | $0,620 |
Пороги работают на весь запрос, а не на токены сверх порога. У Haiku 5.5 запрос с промптом больше 100 000 токенов платит повышенную цену целиком, причём в длину промпта входят и токены из кэша. Поэтому промпт на 100 000 токенов стоит по входу $0,01, а на 100 001 около $0,05. Переход с 50K на 150K утраивает число токенов, а цену увеличивает в 13 раз.
У GPT-6.1 Terra промпт больше 272K входных токенов тарифицируется по ставке x2 на вход и кэш и x1,5 на выход «for the full request» (GPT-6.1 Terra). На 300K Terra почти догоняет Sonnet 5.5, хотя на коротком контексте вдвое дешевле. Прайсы меняются: у Gemini 4 Argon тариф удваивается 1 декабря 2026, поэтому перед своим расчётом сверьтесь с текущими ценами. Общие приёмы снижения расходов собраны в статье про оптимизацию стоимости AI.
Внимание и память
Внутри модели длинный контекст дорог по вычислениям. В классическом трансформере сложность слоя self-attention O(n²·d), где n - длина последовательности, d - размерность представления (Attention Is All You Need, таблица 1): каждый токен сравнивается со всеми остальными. Современные модели используют оптимизации вроде скользящих окон и гибридного внимания, поэтому на практике рост мягче, но бесплатным длинный контекст не становится.
Вторая статья расходов - KV-кэш, промежуточные данные внимания, которые хранятся в памяти для каждого токена контекста. Это хорошо видно на локальных моделях. По замеру в гайде о локальных LLM, у qwen3:8b KV-кэш занимает 144 KiB на токен, при контексте 32 768 это 4,5 ГиБ, и в Ollama модель заняла 9,9 ГБ при файле весов 5,2 ГБ. Длинное окно на локальной машине упирается в память раньше, чем в заявленный лимит модели.
Как держать контекст коротким
Короткий и чистый контекст дешевле и надёжнее. Приёмы ниже описаны в документации Anthropic и OpenAI; у каждого своя цена.
| Приём | Когда применять | Чем платите |
|---|---|---|
| RAG: класть в окно только найденные фрагменты | база знаний больше окна или часто меняется | качество зависит от поиска (RAG или context engineering) |
| Сжатие истории (compaction) | длинный диалог или агентный цикл подходит к пределу | детали теряются, сжатие само стоит запроса |
| Очистка старых tool results | агент много читает файлов и логов | prompt cache перестраивается |
| Внешняя память | факты должны пережить сессию | нужна своя логика хранения (память агентов) |
| Субагенты | объёмный вывод: тесты, логи, поиск по коду | субагент тратит свои токены (субагенты Claude Code) |
/clear между задачами | переход к несвязанной работе | контекст прошлой задачи уходит из сессии |
| Отложенная загрузка tools, skills вместо длинного CLAUDE.md | много MCP-серверов и инструкций | часть инструкций подгружается по требованию (MCP и контекст) |
На уровне API часть этих приёмов уже встроена. У Anthropic серверная compaction в beta для Claude 4.6 и новее: ранние части диалога суммируются на сервере, и разговор продолжается дальше лимита окна. Context editing очищает старые tool results и блоки рассуждений. Memory tool работает на стороне клиента: модель просит файловые операции в каталоге /memories, а ваш код их выполняет. Документация советует для долгих агентов связку: compaction держит активный контекст маленьким, memory сохраняет то, что не должно потеряться при суммаризации (Memory tool).
У OpenAI в Responses API серверная компакция включается через context_management с порогом compact_threshold, есть и отдельный stateless-эндпоинт /responses/compact; результат приходит как зашифрованный compaction item (Compaction).
В Claude Code те же идеи доступны без кода. По документации, определения MCP-инструментов загружаются отложенно, skills подгружаются только при вызове, а hook может отфильтровать лог до строк с ошибками, прежде чем Claude его прочитает (Manage costs).
Как посчитать токены до отправки
Считать токены надёжнее заранее, чем узнавать о переполнении по ошибке или обрезанному ответу.
У Anthropic для этого есть бесплатный эндпоинт /v1/messages/count_tokens. Он принимает те же model, system, messages и tools, что и основной запрос, и возвращает input_tokens. Пример по документации (Token counting):
curl -s https://api.anthropic.com/v1/messages/count_tokens \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2026-10-21" \
-H "content-type: application/json" \
-d '{
"model": "claude-haiku-5-5",
"system": "You are a code reviewer",
"messages": [{"role": "user", "content": "<история и новый вопрос>"}]
}'
# {"input_tokens": ...}
Документация оговаривает, что это оценка: фактическое число в основном запросе может немного отличаться. Считайте под той моделью, которую будете вызывать, потому что токенизаторы разных поколений дают разные числа.
Другие источники цифр:
- поле
usageв ответе API: у Anthropicinput_tokens,cache_read_input_tokens,cache_creation_input_tokens,output_tokens, у OpenAI-совместимых APIprompt_tokensиcompletion_tokens; stop_reasonв ответе Anthropic:model_context_window_exceededзначит, что ответ упёрся в окно;/contextи/usageв Claude Code: что занимает окно и сколько токенов ушло за сессию;prompt_eval_countиeval_countв ответе Ollama: сколько токенов модель реально прочитала и сгенерировала.
Что дальше
Внутри окна качество не постоянно: чем больше токенов, тем выше шанс, что модель пропустит нужный факт. Это отдельная тема со своими замерами, здесь хватит вывода: заполненное окно не гарантирует, что модель использует всё, что в нём лежит.
Когда устройство окна понятно, следующий вопрос - что именно в него класть: какие источники, в каком порядке, как сжимать и как проверять сборку. Это разобрано в гайде по context engineering.
С чего начать:
- Посчитайте, сколько занимает ваш типичный запрос:
count_tokens, полеusageили/context. - Сверьте результат с порогами тарифов: 100K у Haiku 5.5, 272K у GPT-6.
- Для локальных моделей проверьте
num_ctxи сравнивайтеprompt_eval_countс размером промпта. - Начинайте новую сессию на новую задачу, а решения держите в файле, а не в истории чата.
Первоисточники
Все страницы открыты 8 ноября 2026.
- Anthropic: Context windows
- Anthropic: Pricing
- Anthropic: Models overview
- Anthropic: Token counting
- Anthropic: Memory tool
- Claude Help Center: context window on paid plans
- Claude Code: Manage costs effectively
- OpenAI: Models, GPT-6.1 Terra, Pricing, Compaction
- Google AI Studio: Gemini 4 Argon, Pricing
- DeepSeek: Models & Pricing
- Ollama: Context length
- Liu et al. Lost in the Middle: How Language Models Use Long Contexts
- Vaswani et al. Attention Is All You Need