Контекстное окно
Контекстное окно
Контекстное окно (context window) — максимальный объём текста в токенах, который языковая модель способна «держать перед глазами» за один раз: и ваш запрос, и всю предыдущую переписку, и собственный ответ. Всё, что не помещается, для модели не существует.
История
Идея ограниченного «поля зрения» старше нынешних чат-ботов. Ещё в языковых моделях 1990–2000-х (так называемых n-граммных) предсказание следующего слова строилось по нескольким предыдущим словам — это и было окно, только крошечное: два-пять слов.
- 2017 год, Google. Группа авторов во главе с Ашишем Васвани публикует статью «Attention Is All You Need» и вводит архитектуру Transformer. Механизм внимания (attention) позволяет каждому слову «смотреть» на все остальные слова в окне. Но у этого есть цена: объём вычислений растёт примерно пропорционально квадрату длины окна. Удвоил длину — вычислений примерно в четыре раза больше.
- 2018–2019. BERT работал с окном в 512 токенов, GPT-2 — около 1024. Это пара страниц текста. Длинный документ приходилось резать на куски.
-
- GPT-3 от OpenAI — 2048 токенов. Для «поболтать» хватало, для работы с документами — нет.
-
- Гонка длины. GPT-4 вышла с вариантами на 8 и 32 тысячи токенов; Anthropic в 2023 году выпустила Claude с окном 100 тысяч, а затем Claude 2.1 — с 200 тысячами токенов (это примерно книга среднего размера).
- 2024 и позже. Google заявила для Gemini 1.5 окно в миллион токенов, а позже и больше; у ряда моделей других компаний тоже появились варианты на миллион. Точные цифры для актуальных версий лучше смотреть в документации производителя — они меняются от релиза к релизу, а у одной модели могут быть разные режимы (стандартный и расширенный, нередко с другой ценой).
Параллельно развивались технические приёмы, которые сделали длинные окна возможными: позиционные кодировки вроде RoPE (rotary position embedding, Су и соавторы, 2021), оптимизированное вычисление внимания (FlashAttention, Три Дао с коллегами, 2022) и разные схемы «разреженного» внимания.
Что это такое
Модель не имеет памяти в человеческом смысле. Она не «помнит» вчерашний разговор. Каждый раз, когда вы отправляете сообщение, в модель целиком подаётся весь текст, который должен считаться контекстом: системные инструкции, вся история диалога, содержимое прочитанных файлов, результаты работы инструментов и ваш новый вопрос. Модель читает всё это с нуля и выдаёт продолжение. Ощущение непрерывного разговора создаёт программа-обёртка (чат-интерфейс, CLI), которая каждый раз дописывает историю и отправляет её заново.
Отсюда следствия.
Во-первых, окно считается в токенах (tokens — кусочки текста: слово, часть слова или знак препинания; про них есть отдельная статья). Русский текст обычно «дороже» английского: на одно и то же содержание уходит заметно больше токенов, потому что токенизаторы в основном обучались на английском. Точное соотношение зависит от токенизатора; грубо можно ориентироваться на выигрыш в разы для английского, но проверять надо на своём тексте.
Во-вторых, окно общее для входа и выхода. Если окно 200 тысяч токенов, а вы отдали 195 тысяч на входе, на ответ остаётся мало. Кроме того, у моделей есть отдельный потолок на длину одного ответа (max output), он обычно существенно меньше окна.
В-третьих, «поместилось» не значит «усвоено». Влезание в окно — необходимое условие, но не гарантия качества. Исследование «Lost in the Middle» (Нельсон Лю с коллегами, 2023) показало: модели лучше используют информацию из начала и конца длинного контекста, а то, что лежит в середине, нередко теряется. С новыми моделями ситуация лучше, но эффект «чем длиннее контекст, тем размытее внимание» полностью не исчез.
Важные пары понятий:
- Контекстное окно vs обучающие данные. Обучающие данные — то, что модель «впитала» при обучении, это её долгосрочные знания. Контекстное окно — то, что вы показали ей прямо сейчас. Знания не обновляются от того, что вы что-то написали в чате.
- Контекстное окно vs память (memory). Функции «памяти» в продуктах — это, как правило, сохранение заметок в файл или базу и подстановка их в начало следующего диалога. То есть снова контекст, просто подготовленный заранее.
- Контекстное окно vs RAG. RAG (retrieval-augmented generation, генерация с подстановкой найденного) — приём, при котором из большой базы документов в окно кладутся только релевантные фрагменты. Это способ обойти ограничение окна, а не расширить его.
Аналогии из жизни
Рабочий стол. Представь стол конкретного размера. На нём лежат бумаги, с которыми ты работаешь прямо сейчас. Архив в шкафу — это обучающие данные модели, до него не дотянуться за секунду. Кладёшь новую папку — старые приходится убрать со стола. Где ломается: с бумагой на столе ты видишь всё сразу и одинаково хорошо, а модель при заполненном окне «смотрит» неравномерно — середина стопки читается хуже. И ещё: со стола бумаги убираешь ты сам, а в модели переполнение чаще решает программа-обёртка, иногда обрезая начало или сжимая историю, и ты можешь этого сразу не заметить.
Оперативная память компьютера. Данные в RAM доступны мгновенно, на диск — медленно, а при выключении RAM очищается. Окно модели похоже: после окончания сессии ничего не остаётся. Где ломается: RAM адресуется точно — по адресу получаешь ровно то, что записал. Окно модели читается через внимание, то есть вероятностно: информация может быть в окне и всё равно не повлиять на ответ. Кроме того, у RAM нет понятия «стоит денег за каждое обращение» — а у окна есть.
Устный пересказ в телефонной цепочке. Когда нужно умещать долгую историю в короткий пересказ, мы сжимаем: оставляем главное, выбрасываем детали. Примерно так работает автоматическая компакция контекста. Где ломается: при пересказе человек понимает, что важно для адресата. Алгоритм сжатия может выбросить именно ту деталь (точное имя файла, число, принятое решение), которая понадобится через час.
Как это работает
Разберём цикл на примере сессии в терминальном ассистенте вроде Claude Code.
- Сборка запроса. Программа берёт: системный промт (инструкции производителя), описания доступных инструментов, содержимое файла с проектными правилами (например, CLAUDE.md), историю сообщений и твой новый вопрос. Всё это превращается в последовательность токенов.
- Отправка и чтение. Последовательность целиком уходит на сервер. Модель обрабатывает все токены входа (этап prefill — «заполнение») и только потом начинает по одному генерировать токены ответа (этап decode).
- Рост истории. Ответ и результаты вызова инструментов (например, прочитанный файл на 2000 строк) добавляются в историю. Следующий запрос уже длиннее.
- Повтор. На каждом шаге весь накопленный текст снова отправляется целиком. Поэтому стоимость и задержка сессии растут не линейно с числом шагов: чем длиннее история, тем дороже каждый следующий шаг, а суммарная стоимость растёт заметно быстрее, чем число реплик.
- Приближение к лимиту. Когда заполнено, скажем, больше 80–90% окна, нужно что-то делать. Варианты:
- обрезать самое старое (просто и грубо);
- сжать историю в краткую сводку (summarization);
- начать новую сессию, перенеся в неё нужное вручную.
В Claude Code для этого есть несколько команд. /clear очищает историю полностью — начинаешь с чистого листа. /compact просит модель сжать диалог в сводку и продолжить уже с ней; можно подсказать, что сохранить. Кроме того, при приближении к пределу программа может запускать сжатие автоматически (auto-compact). Точные пороги и поведение меняются между версиями, смотри официальную документацию Claude Code.
Отдельная техника, которая сильно влияет на деньги и скорость, — кэширование промта (prompt caching). Идея: начало запроса (системные инструкции, файлы, старая часть истории) от шага к шагу не меняется. Сервер может запомнить уже посчитанное внутреннее состояние для этого общего префикса (оно называется KV-cache — хранилище промежуточных ключей и значений внимания) и не пересчитывать его заново. Читать из кэша дешевле и быстрее, чем обрабатывать с нуля. Но кэш живёт ограниченное время (порядок минут — часов, зависит от настроек) и работает только по совпадающему началу: если ты изменил что-то в самом начале запроса, весь кэш после этой точки сгорает.
Схема роста:
шаг 1: [система][вопрос1] ~ 8k токенов
шаг 2: [система][вопрос1][ответ1][файл] ~ 20k
шаг 3: [система][вопрос1][ответ1][файл][...] ~ 35k
...
шаг N: упёрлись в лимит -> /compact или /clear
Ещё один приём — субагенты (subagents, вспомогательные ассистенты). Основной ассистент поручает подзадачу (например, «найди в документации ответ») отдельному экземпляру. У того своё, свежее окно. Он читает много, а возвращает в основную сессию только краткий итог. Так основное окно не засоряется. Цена — дополнительные токены на самого субагента.
Где встречается в обычной жизни
- Ты долго переписываешься с ботом в мессенджере, а он вдруг переспрашивает то, что ты говорил час назад. Скорее всего, начало беседы уже вытеснено из окна или сжато.
- Загружаешь в чат длинный PDF и просишь пересказать — если документ больше окна, программа молча режет его или просит сократить.
- Голосовой помощник «забывает» контекст через несколько реплик: окно в таких сценариях маленькое, ради скорости.
- Функция «продолжить разговор» в приложении на следующий день — чаще всего подгрузка сохранённой истории или заметок в новое окно, а не настоящая память.
- Нейросеть в редакторе кода «не видит» файл, который ты не открыл: он просто не попал в окно.
Где встречается в IT и бизнесе
- Разработка с ИИ-ассистентами. Чем больше кодовая база, тем важнее решать, какие файлы класть в окно. Умение держать контекст чистым — это реальный навык, влияющий на качество результата.
- Чат-боты поддержки. Нужно заранее решить, сколько истории хранить, когда подставлять базу знаний (RAG) и как не раздувать счёт за токены.
- Анализ длинных документов. Договоры, отчёты, транскрипции встреч: нужно ли «целиком в окно» или лучше по частям с последующим объединением.
- Агентные системы. Автономные цепочки действий быстро накапливают историю вызовов инструментов; без компакции или субагентов они упираются в лимит.
- Планирование бюджета. Цена обычно считается за токены входа и выхода; при длинной истории основную долю расходов составляет повторная отправка контекста, а не новые вопросы.
Кто пользуется
Практически все современные LLM-продукты: ChatGPT, Claude, Gemini, GigaChat, YandexGPT, модели Llama, Mistral, DeepSeek, Qwen. Размеры окон у разных моделей сильно различаются: от нескольких тысяч токенов у небольших локальных моделей до сотен тысяч и миллиона у крупных облачных. Конкретные цифры для текущих версий не буду выдумывать — они меняются каждые несколько месяцев, смотри страницу моделей у производителя.
Отдельно стоит упомянуть подписочные тарифы: у потребительских планов (вроде Pro за 20 долларов в месяц) есть лимиты использования, которые считаются в токенах. Длинная сессия с большим контекстом расходует лимит заметно быстрее, чем несколько коротких. Точные правила подсчёта производитель периодически меняет.
Альтернативы и конкуренты
- RAG (поиск по базе + подстановка).
Плюсы: работает с огромными базами, дешевле, чем класть всё в окно.
Минусы: качество зависит от поиска; модель видит только найденные куски и может упустить связи между документами. - Дообучение (fine-tuning).
Плюсы: знания «зашиваются» в модель, не занимают окно.
Минусы: дорого, медленно обновлять, плохо подходит для часто меняющихся фактов. - Внешняя память и заметки (файлы, базы).
Плюсы: прозрачно и управляемо, видно, что именно сохранено.
Минусы: нужно решать, что записывать и когда читать; заметки сами занимают окно. - Архитектуры без полного внимания (state-space модели вроде Mamba, 2023).
Плюсы: стоимость растёт линейно с длиной.
Минусы: пока обычно уступают трансформерам в точном извлечении деталей из длинного текста; в массовых продуктах встречаются редко.
Когда НЕ стоит использовать
Точнее — когда не стоит рассчитывать на очень длинное окно как на решение.
- Когда нужна точность по десяткам разрозненных фактов. Даже если всё влезает, модель может пропустить деталь из середины. Лучше найти нужные фрагменты отдельным шагом и показать модели только их.
- Когда задачи в сессии не связаны между собой. Старый контекст не просто бесполезен — он отвлекает и стоит денег. Чище начать новую сессию (
/clear), чем тащить хвост. - Когда ответ должен быть воспроизводимым и дешёвым. Гигантский промт на каждый запрос — это большой счёт и большая задержка. Если те же знания можно вынести в короткую инструкцию или базу с поиском, так выгоднее.
Автоматическое сжатие — не бесплатно
Когда история сжимается в сводку, детали теряются. Если ты принял важное решение или назвал точное число, а потом сессия сжалась, перепроверь, что оно осталось в сводке. Надёжнее записать ключевое в файл проекта.
Дорого не окно, а его повторная отправка
Каждое новое сообщение в длинной сессии заставляет модель заново прочитать всё накопленное. Кэширование смягчает цену, но не отменяет её. Поэтому десять коротких сессий по одной теме обычно дешевле одной длинной на всё подряд.
Практическая привычка
Закончил задачу — очисти контекст. Перед новой темой начни новую сессию. Если нужно сохранить итог, попроси ассистента записать его в файл, а не рассчитывай на память.
Связанные понятия
- Токен (token) — единица, на которые разбивается текст для модели; в них измеряются и окно, и цена.
- Attention (внимание) — механизм, позволяющий каждому токену учитывать остальные; источник квадратичной стоимости.
- KV-cache — сохранённые промежуточные вычисления внимания, ускоряющие генерацию и лежащие в основе prompt caching.
- RAG — подстановка найденных фрагментов вместо загрузки всей базы в окно.
- Компакция / суммаризация контекста — сжатие истории диалога в короткую сводку.
- Субагент — вспомогательный экземпляр модели со своим окном, возвращающий краткий результат.
Литература и источники
- Vaswani et al., «Attention Is All You Need», 2017 (en) — оригинальная статья про Transformer, есть на arxiv.org (искать по названию).
- Liu et al., «Lost in the Middle: How Language Models Use Long Contexts», 2023 (en) — arxiv.org, искать по названию.
- Документация Anthropic по контекстным окнам и prompt caching — на docs.claude.com (искать раздел про context windows).
- Документация Claude Code — команды
/clear,/compact, управление контекстом (искать на code.claude.com). - Wikipedia (en): «Transformer (deep learning architecture)» и «Large language model».
- Джей Аламмар, иллюстрированное введение «The Illustrated Transformer» (en, блог) — искать в Google по названию.
Где встретилось у меня
Вчера в нескольких сессиях обсуждалась экономия лимита подписки: как выбирать модель, как переписка на русском тратит больше токенов, чем на английском, и как не раздувать длинные сессии (очистка контекста, делегирование части работы вспомогательным ассистентам, сжатие истории).
Краткое резюме
- Контекстное окно — это всё, что модель видит за один запрос; вне окна для неё ничего не существует.
- Модель не помнит прошлое: история отправляется заново при каждом сообщении, поэтому длинные сессии дорожают.
- Влезть в окно не значит быть учтённым: середина длинного контекста усваивается хуже.
- Управляй контекстом:
/clearмежду задачами,/compactпри длинной работе, важное записывай в файлы, тяжёлые подзадачи отдавай субагентам. - Для больших баз знаний используй поиск (RAG), а не попытку засунуть всё в окно.