Контекстные окна: размер и последствия
Узнайте, что такое контекстное окно, как оно ограничивает длину диалога и обработку документов, и сравните размеры контекста в GPT-4o, Claude и Gemini.
«Контекстные окна: размер и последствия» — бесплатный урок AI Engineering Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AI Engineering Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AI Engineering Academy содержит 4 уроков всего.
Что такое контекстное окно?
Контекстное окно — это максимальное количество токенов, которое LLM может обработать за один вызов API. Оно включает всё: системный запрос, все предыдущие реплики диалога, любые документы, добавленные Вами для RAG, а также место, зарезервированное для ответа модели. Если общий объём превышает размер контекстного окна, API возвращает ошибку.
Представляйте контекстное окно как рабочую память модели. В отличие от человека, который может помнить прошлые разговоры между сеансами, LLM не обладает постоянной памятью — она может «знать» только то, что присутствует в текущем контекстном окне. Когда диалог становится длиннее окна, самое старое содержимое приходится удалять, из-за чего модель может потерять важный более ранний контекст.
Размеры контекстного окна в 2025 году
Контекстные окна значительно увеличились. В 2020 году GPT-3 поддерживала 4 096 токенов. К 2025 году ведущие модели предлагают:
- GPT-4o и GPT-4o-mini: 128 000 токенов (примерно 100 000 слов)
- Claude 3.5 Sonnet / Opus: 200 000 токенов
- Gemini 1.5 Pro: 1 000 000 токенов (один миллион)
- Gemini 1.5 Flash: 1 000 000 токенов
Контекстное окно размером 128K может вместить примерно 300 страниц текста, целый роман или всю кодовую базу среднего размера. Несмотря на это, проблема бесконечного контекста ещё не решена: стоимость механизма внимания растёт квадратично с увеличением длины последовательности, поэтому очень длинные контексты обходятся дорого и иногда дают менее точные результаты, чем короткие и сфокусированные.
Проблема «потерянного в середине»
Исследования показали, что LLM уделяют разное внимание разным частям контекстного окна. Обычно они больше всего внимания уделяют содержимому в самом начале (эффект первичности) и самом конце (эффект недавности) контекста, тогда как содержимое в середине обрабатывается менее надёжно.
Это называют проблемой «потерянного в середине». Она имеет практические последствия для систем RAG: если объединить 10 найденных документов, а самый релевантный окажется в середине, модель может использовать его неэффективно. Рекомендуется размещать наиболее важный контекст в начале или в конце добавляемых документов, а не в середине.
Контекст и диалог: практический пример
В чат-приложении полная история диалога включается в каждый вызов API. По мере роста диалога увеличивается и количество токенов. Диалог из 50 сообщений, в каждом из которых в среднем по 100 токенов, уже использует 5 000 токенов только на историю. Добавьте системный запрос на 2 000 токенов и контекст RAG на 10 000 токенов — и получите 17 000 токенов ещё до того, как пользователь задаст следующий вопрос.
import tiktoken
def estimate_conversation_tokens(messages, model='gpt-4o'):
enc = tiktoken.encoding_for_model(model)
total = 3 # priming
for msg in messages:
total += 4 # per-message overhead
total += len(enc.encode(msg.get('content', '')))
return total
# Simulate a growing conversation
conversation = [
{'role': 'system', 'content': 'You are a helpful coding assistant. ' * 20}, # ~100 tokens
]
for i in range(1, 21):
conversation.append({'role': 'user', 'content': f'Question {i}: How do I implement feature X?'})
conversation.append({'role': 'assistant', 'content': 'Here is how to implement that feature...' * 5})
if i % 5 == 0:
tokens = estimate_conversation_tokens(conversation)
print(f'After {i} exchanges: {tokens} tokens')Эффективный и максимальный контекст
Большой размер контекстного окна не означает, что его следует заполнять полностью. Исследования стабильно показывают, что точность модели снижается по мере заполнения контекста, особенно в задачах, требующих точного поиска конкретных фактов в длинном контексте. Сфокусированный релевантный контекст на 5 000 токенов часто даёт лучшие ответы, чем несфокусированный контекст на 50 000 токенов.
Именно поэтому RAG предпочтительнее простого добавления всех документов в контекст: система RAG извлекает только 2–5 наиболее релевантных фрагментов, сохраняя контекст сфокусированным, а внимание модели — сосредоточенным на важной информации. Это похоже на поиск в указателе книги вместо чтения всей книги ради ответа на один вопрос.
Последствия для обработки документов
Длинные контекстные окна позволяют создавать мощные процессы обработки документов, которые раньше были невозможны. Теперь можно отправить в GPT-4o целый PDF на 50 страниц и задавать по нему вопросы, попросить модель одновременно обобщить и сопоставить несколько договоров или проанализировать всю кодовую базу на наличие закономерностей и антишаблонов.
Однако при стоимости около $0,15 за миллион входных токенов обработка документа на 100 000 токенов для одного запроса стоит примерно $0,015. При 10 000 запросах в день к документу, который редко изменяется, Вы платите $150 в день за повторную обработку. Поэтому стратегии кэширования и предварительной обработки чрезвычайно важны в производственных системах анализа документов.
Связь между контекстным окном и максимальным числом токенов
Параметр max_tokens в API ограничивает длину вывода, а не общий размер контекста. Общее контекстное окно равно сумме входных и выходных токенов. Если размер контекстного окна составляет 128 000 токенов, а входные данные занимают 120 000 токенов, для ответа останется только 8 000 токенов независимо от значения, заданного для max_tokens.
Всегда оставляйте достаточный резерв для вывода. Для диалогового помощника обычно достаточно зарезервировать 2 000–4 000 токенов. Для генерации кода или длинного содержательного текста может потребоваться 8 000–16 000 токенов. Встройте расчёт бюджета токенов в логику формирования контекста.
import tiktoken
def check_context_budget(
messages,
model='gpt-4o',
max_context=128000,
min_output_tokens=2000
):
enc = tiktoken.encoding_for_model(model)
input_tokens = sum(
len(enc.encode(m.get('content', ''))) + 4
for m in messages
) + 3
available_output = max_context - input_tokens
if available_output < min_output_tokens:
raise ValueError(
f'Not enough output budget: only {available_output} tokens '
f'remaining, need at least {min_output_tokens}.'
)
return input_tokens, available_outputВыбор моделей по требованиям к контексту
Размер контекстного окна должен быть одним из ключевых критериев при выборе модели. Сопоставляйте размер контекстного окна модели с реальным вариантом использования:
- Чат-помощники с короткими сеансами: обычно достаточно 8K–16K; используйте gpt-4o-mini для снижения затрат
- Вопросы и ответы по документам среднего размера: 32K–128K; gpt-4o хорошо сочетает качество и стоимость
- Анализ юридических документов и договоров объёмом в сотни страниц: 128K–200K; рассмотрите Claude благодаря его высокой эффективности при работе с длинным контекстом
- Анализ всей кодовой базы или книги: 500K–1M; в настоящее время лидирует Gemini 1.5 Pro
Платить за контекстное окно на 1M токенов, когда Вам нужно всего 8K, — дорогое излишество. Выбирайте размер модели в соответствии с реальными требованиями к контексту.
Кэширование контекста для снижения затрат
Если Вы многократно отправляете запросы к одному большому документу или системному запросу, каждый раз приходится платить за токенизацию и обработку одного и того же содержимого. Кэширование запросов OpenAI автоматически снижает стоимость повторяющихся префиксов запроса на 50% от цены входных токенов, если один и тот же префикс содержит более 1 024 токенов.
Чтобы максимально увеличить количество обращений к кэшу, располагайте сообщения так, чтобы стабильное содержимое шло первым: системный запрос, затем большой документ или контекст, а после них — изменяющийся вопрос пользователя. Тогда длинный стабильный префикс будет кэшироваться, а при каждом запросе по полной цене будет обрабатываться только небольшой изменяющийся запрос.
Когда расширять контекст, а когда обобщать
При большом контекстном окне у Вас есть две стратегии работы с растущими диалогами или большими документами: расширять контекст (хранить в нём всё) или обобщать содержимое (сжимать старые данные для экономии токенов). Правильный выбор зависит от варианта использования.
Выбирайте расширение, если Вам нужно обращаться к конкретным фактам из более ранних частей диалога, если Вы анализируете документ, требующий цитирования отдельных разделов, или если обобщение приведёт к потере важных нюансов. Выбирайте обобщение, если важнее общие темы предыдущего диалога, чем конкретные формулировки, если Вы приближаетесь к ограничению контекста или если один и тот же контекст будет использоваться многократно (тогда обобщение становится разовой затратой).
Отслеживание длины контекста в рабочей среде
В рабочей среде отслеживайте длину контекста для каждого запроса как ключевой показатель. Внезапные скачки средней длины контекста могут указывать на ошибку в коде формирования контекста, вставку пользователями очень длинных входных данных или цикл обратной связи, при котором длинные ответы модели снова добавляются в контекст. Настройте оповещения, когда длина контекста превышает 80% максимального значения модели.
Также отслеживайте события усечения — ситуации, когда приходится сокращать контекст, чтобы уложиться в размер окна. Частое усечение означает, что Вам нужна более эффективная стратегия управления контекстом, модель с большим контекстным окном или подход на основе RAG, извлекающий только релевантное содержимое вместо отправки всего документа.
Быстрая проверка
Проверьте, насколько хорошо Вы усвоили концепции разработки ИИ из этого урока.
Итоги урока
В этом уроке Вы узнали, что контекстное окно — это общий бюджет токенов для входных и выходных данных в одном вызове API, проблема «потерянного в середине» означает, что содержимое в начале и конце контекста обрабатывается надёжнее, а небольшой сфокусированный контекст часто эффективнее большого несфокусированного, поэтому RAG предпочтительнее добавления всех документов целиком. Далее мы рассмотрим, как рассчитывать и прогнозировать стоимость API до отправки запросов.
Часто задаваемые вопросы
Урок «Контекстные окна: размер и последствия» бесплатный?
Да — полный текст урока «Контекстные окна: размер и последствия» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AI Engineering Academy, подпишись на CoddyKit PRO. Курс AI Engineering Academy содержит 4 уроков всего.
Чему я научусь в уроке «Контекстные окна: размер и последствия»?
Узнайте, что такое контекстное окно, как оно ограничивает длину диалога и обработку документов, и сравните размеры контекста в GPT-4o, Claude и Gemini. Ты практикуешь AI Engineering Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать AI Engineering Academy?
Предыдущий опыт не требуется. AI Engineering Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Контекстные окна: размер и последствия»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке AI Engineering Academy?
Да. Каждый урок AI Engineering Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Что такое токен
- Контекстные окна: размер и последствия
- Расчёт и прогнозирование стоимости API
- Стратегии соблюдения ограничений контекста