# Контекстное окно LLM: что это и почему модель забывает

> Что такое контекстное окно нейросети, из чего оно состоит, размеры у Claude, GPT-6, Gemini и DeepSeek, что бывает при переполнении и чем дорог длинный контекст.
> Author: Roman Belov · Published: 2026-10-24 · Source: https://futurecraft.pro/ru/blog/context-window/

**Контекстное окно - это максимальное число токенов, которое языковая модель обрабатывает за один запрос.** В него входят системные инструкции, вся история диалога, вложенные документы, описания tools и сам ответ модели. Всё, что не поместилось в окно, для модели не существует.

Окно - не обучающие данные и не долговременная память. Модель между запросами ничего не хранит: «память» в чате создаёт приложение, которое на каждом ходу заново присылает историю. Отсюда два частых сюрприза. Модель с окном в 1M токенов «забывает» начало разговора, а длинный диалог стоит дороже короткого, хотя вы задаёте такие же короткие вопросы.

Статья о том, как устроено окно, какие у него размеры на ноябрь 2026, что происходит на пределе и почему длинный контекст дорог. Числа о росте и переполнении окна - из замеров автора 8 ноября 2026 через OpenRouter и Ollama 0.40.14.

## Что такое контекстное окно нейросети

Документация Anthropic называет окно «рабочей памятью» модели: это весь текст, к которому модель может обращаться при генерации ответа, включая сам ответ ([Context windows](https://platform.claude.com/docs/en/build-with-claude/context-windows)). Окно измеряется в токенах, а не в словах или символах.

Токен - кусок текста: слово, часть слова или знак. На такие куски токенизатор режет вход. По документации Anthropic, 1M токенов на текущем токенизаторе Claude (введён с Opus 4.7) это примерно 555 тысяч слов или 2,5 млн символов, на прежних моделях было около 750 тысяч слов ([Models overview](https://platform.claude.com/docs/en/models/overview)). Русский текст того же смысла занимает больше токенов: в замерах из статьи [о токенах](https://futurecraft.pro/ru/blog/tokens-explained/) у 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](https://aistudio.google.com/docs/models/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](https://platform.claude.com/docs/en/about-claude/pricing), [модели OpenAI](https://developers.openai.com/api/docs/models) и [карточка GPT-6.1 Terra](https://developers.openai.com/api/docs/models/gpt-6.1-terra), [цены Gemini](https://aistudio.google.com/docs/pricing), [цены DeepSeek](https://api-docs.deepseek.com/quick_start/pricing/), Qwen по [гайду о локальных LLM](https://futurecraft.pro/ru/blog/local-llm-guide/). У DeepSeek пиковые часы 01:00-04:00 и 06:00-10:00 UTC по будням; лимит выхода в таблице вендора указан одной ячейкой на обе модели.

Сравнивать «1M» у разных вендоров напрямую нельзя: токенизаторы режут один и тот же текст на разное число токенов. По документации Anthropic, модели с Opus 4.7 и новее дают примерно на 30% больше токенов на тот же текст, чем прежние модели Claude ([Token counting](https://platform.claude.com/docs/en/build-with-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](https://support.claude.com/en/articles/8606394-how-large-is-the-context-window-on-paid-claude-plans)).

Для приложения 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](https://platform.claude.com/docs/en/build-with-claude/context-windows)). Молча ничего не обрезается.

В замере автора облачный эндпоинт с окном 32 768 токенов (`mistral-small-24b-instruct-2501` через OpenRouter) на вход около 41 080 токенов вернул HTTP 400 с точными числами:

```text
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`, начало текста вместе с кодовым словом пропало, и модель уверенно ответила, что слова в тексте нет. Предупреждение появилось только в логе сервера:

```text
level=WARN msg="truncating input prompt" limit=1026 prompt=4592 keep=4 new=1026
```

Клиент этого лога не видит. Единственный признак в самом ответе - поле `prompt_eval_count`: если оно заметно меньше ожидаемого размера промпта, вход обрезан. Проверить можно тем же запросом, что в замере, в форме curl:

```bash
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](https://docs.ollama.com/context-length)), и длинный системный промпт агента может обрезаться без единой ошибки. Как выставить контекст и проверить его в `ollama ps`, описано в [гайде по Ollama](https://futurecraft.pro/ru/blog/ollama-guide/). Замер сделан на одной версии Ollama и двух моделях; другие локальные раннеры в замере не участвовали и могут вести себя иначе.

### Чат и Claude Code: сжатие истории

Приложения поверх API обычно не показывают ошибку, а управляют окном сами. Документация Anthropic отмечает, что чат-интерфейсы вроде claude.ai могут вести окно по принципу «первым вошло, первым вышло». На платных планах Claude с включённым code execution при приближении к пределу работает автоматическое управление контекстом: Claude суммирует ранние сообщения, а полная история остаётся доступной для просмотра. Без code execution этот механизм не работает ([справка Claude](https://support.claude.com/en/articles/8606394-how-large-is-the-context-window-on-paid-claude-plans)).

В Claude Code то же делает авто-компакция: она суммирует историю при приближении к лимиту окна ([Manage costs](https://code.claude.com/docs/en/costs)). Управлять этим можно вручную:

- `/context` показывает, что занимает окно;
- `/compact Focus on code samples and API usage` сжимает историю и говорит, что сохранить; постоянные указания можно положить в раздел `# Compact instructions` в CLAUDE.md;
- `/clear` начинает чистую сессию при переходе к несвязанной задаче.

У сжатия есть цена: `/compact` читает весь разговор, который суммирует, поэтому сжатие большого контекста само по себе большой запрос. `/clear` ничего не стоит. Подробнее о работе с сессиями в [полном гайде по Claude Code](https://futurecraft.pro/ru/blog/claude-code-complete-guide/).

## Почему модель «забывает»

«Забывание» почти всегда объясняется одной из четырёх причин, и только последняя связана с самой моделью.

| Причина | Как выглядит | Что делать |
|---|---|---|
| Новый диалог | модель не знает того, что обсуждали в прошлой сессии | перенести нужные факты в первое сообщение или файл; продуктовая «память» - отдельный слой без гарантий |
| Приложение сжало или отбросило старое | общая линия разговора сохранилась, детали из начала пропали | сжимать с инструкцией, принятые решения держать в отдельном файле |
| Вход больше окна | API: ошибка 400; локальный раннер: ответ без начала текста | считать токены заранее, сокращать вход, поднимать `num_ctx` |
| Модель видит всё, но использует хуже | факт из середины длинного документа проигнорирован | сокращать контекст, класть важное ближе к началу или концу |

Модель stateless, и всё, что выглядит как память диалога, - история, которую приложение каждый раз присылает в окне заново. Поэтому уточнение в том же диалоге работает лучше: прошлые реплики лежат в окне, а в новом диалоге их там нет.

Последняя строка таблицы описана в работе [Lost in the Middle](https://arxiv.org/abs/2307.03172) (Liu et al., 2023, TACL): модели лучше использовали информацию из начала и конца контекста и заметно хуже из середины, даже модели, рассчитанные на длинный вход. Исследование сделано на моделях 2023 года, на текущих поколениях картина может быть другой. Anthropic в документации пишет прямо: с ростом числа токенов точность и полнота извлечения падают, и называет это context rot. Отсюда практическое правило: окно - вместимость, а не гарантия, что каждый факт будет использован.

## Почему длинный контекст дорогой

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

### Каждый ход оплачивает всю историю

Модель не помнит прошлый ход, поэтому приложение на каждом шаге отправляет весь диалог целиком. Документация Claude Code формулирует это так: Claude Code отправляет полный разговор с каждым запросом ([Manage costs](https://code.claude.com/docs/en/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](https://platform.claude.com/docs/en/about-claude/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](https://developers.openai.com/api/docs/models/gpt-6.1-terra)). На 300K Terra почти догоняет Sonnet 5.5, хотя на коротком контексте вдвое дешевле. Прайсы меняются: у Gemini 4 Argon тариф удваивается 1 декабря 2026, поэтому перед своим расчётом сверьтесь с текущими ценами. Общие приёмы снижения расходов собраны в статье про [оптимизацию стоимости AI](https://futurecraft.pro/ru/blog/ai-cost-optimization/).

### Внимание и память

Внутри модели длинный контекст дорог по вычислениям. В классическом трансформере сложность слоя self-attention O(n²·d), где n - длина последовательности, d - размерность представления ([Attention Is All You Need](https://arxiv.org/abs/1706.03762), таблица 1): каждый токен сравнивается со всеми остальными. Современные модели используют оптимизации вроде скользящих окон и гибридного внимания, поэтому на практике рост мягче, но бесплатным длинный контекст не становится.

Вторая статья расходов - KV-кэш, промежуточные данные внимания, которые хранятся в памяти для каждого токена контекста. Это хорошо видно на локальных моделях. По замеру в [гайде о локальных LLM](https://futurecraft.pro/ru/blog/local-llm-guide/), у qwen3:8b KV-кэш занимает 144 KiB на токен, при контексте 32 768 это 4,5 ГиБ, и в Ollama модель заняла 9,9 ГБ при файле весов 5,2 ГБ. Длинное окно на локальной машине упирается в память раньше, чем в заявленный лимит модели.

## Как держать контекст коротким

Короткий и чистый контекст дешевле и надёжнее. Приёмы ниже описаны в документации Anthropic и OpenAI; у каждого своя цена.

| Приём | Когда применять | Чем платите |
|---|---|---|
| RAG: класть в окно только найденные фрагменты | база знаний больше окна или часто меняется | качество зависит от поиска ([RAG или context engineering](https://futurecraft.pro/ru/blog/context-engineering-vs-rag/)) |
| Сжатие истории (compaction) | длинный диалог или агентный цикл подходит к пределу | детали теряются, сжатие само стоит запроса |
| Очистка старых tool results | агент много читает файлов и логов | prompt cache перестраивается |
| Внешняя память | факты должны пережить сессию | нужна своя логика хранения ([память агентов](https://futurecraft.pro/ru/blog/ai-agent-memory/)) |
| Субагенты | объёмный вывод: тесты, логи, поиск по коду | субагент тратит свои токены ([субагенты Claude Code](https://futurecraft.pro/ru/blog/claude-code-subagents/)) |
| `/clear` между задачами | переход к несвязанной работе | контекст прошлой задачи уходит из сессии |
| Отложенная загрузка tools, skills вместо длинного CLAUDE.md | много MCP-серверов и инструкций | часть инструкций подгружается по требованию ([MCP и контекст](https://futurecraft.pro/ru/blog/mcp-for-ai-agents/)) |

На уровне API часть этих приёмов уже встроена. У Anthropic серверная compaction в beta для Claude 4.6 и новее: ранние части диалога суммируются на сервере, и разговор продолжается дальше лимита окна. Context editing очищает старые tool results и блоки рассуждений. Memory tool работает на стороне клиента: модель просит файловые операции в каталоге `/memories`, а ваш код их выполняет. Документация советует для долгих агентов связку: compaction держит активный контекст маленьким, memory сохраняет то, что не должно потеряться при суммаризации ([Memory tool](https://platform.claude.com/docs/en/agents-and-tools/tool-use/memory-tool)).

У OpenAI в Responses API серверная компакция включается через `context_management` с порогом `compact_threshold`, есть и отдельный stateless-эндпоинт `/responses/compact`; результат приходит как зашифрованный compaction item ([Compaction](https://developers.openai.com/api/docs/guides/compaction)).

В Claude Code те же идеи доступны без кода. По документации, определения MCP-инструментов загружаются отложенно, skills подгружаются только при вызове, а hook может отфильтровать лог до строк с ошибками, прежде чем Claude его прочитает ([Manage costs](https://code.claude.com/docs/en/costs)).

## Как посчитать токены до отправки

Считать токены надёжнее заранее, чем узнавать о переполнении по ошибке или обрезанному ответу.

У Anthropic для этого есть бесплатный эндпоинт `/v1/messages/count_tokens`. Он принимает те же `model`, `system`, `messages` и `tools`, что и основной запрос, и возвращает `input_tokens`. Пример по документации ([Token counting](https://platform.claude.com/docs/en/build-with-claude/token-counting)):

```bash
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: у Anthropic `input_tokens`, `cache_read_input_tokens`, `cache_creation_input_tokens`, `output_tokens`, у OpenAI-совместимых API `prompt_tokens` и `completion_tokens`;
- `stop_reason` в ответе Anthropic: `model_context_window_exceeded` значит, что ответ упёрся в окно;
- `/context` и `/usage` в Claude Code: что занимает окно и сколько токенов ушло за сессию;
- `prompt_eval_count` и `eval_count` в ответе Ollama: сколько токенов модель реально прочитала и сгенерировала.

## Что дальше

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

Когда устройство окна понятно, следующий вопрос - что именно в него класть: какие источники, в каком порядке, как сжимать и как проверять сборку. Это разобрано в [гайде по context engineering](https://futurecraft.pro/ru/blog/context-engineering-guide/).

С чего начать:

1. Посчитайте, сколько занимает ваш типичный запрос: `count_tokens`, поле `usage` или `/context`.
2. Сверьте результат с порогами тарифов: 100K у Haiku 5.5, 272K у GPT-6.
3. Для локальных моделей проверьте `num_ctx` и сравнивайте `prompt_eval_count` с размером промпта.
4. Начинайте новую сессию на новую задачу, а решения держите в файле, а не в истории чата.

## Первоисточники

Все страницы открыты 8 ноября 2026.

- [Anthropic: Context windows](https://platform.claude.com/docs/en/build-with-claude/context-windows)
- [Anthropic: Pricing](https://platform.claude.com/docs/en/about-claude/pricing)
- [Anthropic: Models overview](https://platform.claude.com/docs/en/models/overview)
- [Anthropic: Token counting](https://platform.claude.com/docs/en/build-with-claude/token-counting)
- [Anthropic: Memory tool](https://platform.claude.com/docs/en/agents-and-tools/tool-use/memory-tool)
- [Claude Help Center: context window on paid plans](https://support.claude.com/en/articles/8606394-how-large-is-the-context-window-on-paid-claude-plans)
- [Claude Code: Manage costs effectively](https://code.claude.com/docs/en/costs)
- [OpenAI: Models](https://developers.openai.com/api/docs/models), [GPT-6.1 Terra](https://developers.openai.com/api/docs/models/gpt-6.1-terra), [Pricing](https://developers.openai.com/api/docs/pricing), [Compaction](https://developers.openai.com/api/docs/guides/compaction)
- [Google AI Studio: Gemini 4 Argon](https://aistudio.google.com/docs/models/gemini-4-argon), [Pricing](https://aistudio.google.com/docs/pricing)
- [DeepSeek: Models & Pricing](https://api-docs.deepseek.com/quick_start/pricing/)
- [Ollama: Context length](https://docs.ollama.com/context-length)
- [Liu et al. Lost in the Middle: How Language Models Use Long Contexts](https://arxiv.org/abs/2307.03172)
- [Vaswani et al. Attention Is All You Need](https://arxiv.org/abs/1706.03762)
