ЧТО ВООБЩЕ ЗНАЧИТ «1M ТОКЕНОВ»
Когда вендор пишет, что контекстное окно поддерживает 1M токенов, это техническая правда об архитектуре: модель примет на вход такой объём без ошибки переполнения. 1 миллион токенов — это грубо 700–750 тысяч слов, или примерно 8–10 средних романов, либо весь кодовый монорепозиторий среднего стартапа. Gemini первым вывел миллионный контекст в массовый прод, следом подтянулись остальные, и к 2026 году окна 200K–1M стали новой нормой, а не экзотикой.
Но «принять на вход» и «одинаково хорошо оперировать каждым токеном» — разные вещи. Внимание (attention) в трансформере физически связывает каждый токен с каждым, однако при огромной длине сигнал размазывается. Отсюда главный вопрос статьи: модель читает всё, но одинаково ли она это всё видит?
КОРОТКИЙ ОТВЕТ: ЧИТАЕТ, НО НЕ ВИДИТ РАВНОМЕРНО
Да, модель формально обрабатывает весь переданный контекст. Нет, она не удерживает его с равной точностью. Два эффекта, которые практик встречает постоянно:
- Lost in the middle — факты в начале и в конце промпта извлекаются заметно точнее, чем то, что лежит ровно посередине. Классический провал в форме буквы U на графике точности.
- Деградация на дистанции — чем дальше нужный факт от вопроса и чем больше «шума» вокруг, тем выше шанс, что модель его проигнорирует или переврёт.
Тест «иголка в стоге сена» (needle in a haystack), где в длинный текст прячут одну факт-фразу и просят её найти, современные модели проходят почти идеально — это простая задача поиска. Но реальные задачи требуют многошагового рассуждения по нескольким разбросанным фактам сразу, и вот тут метрики честно валятся.
NIAH ПРОТИВ РЕАЛЬНЫХ БЕНЧМАРКОВ
Проблема многих красивых цифр «100% на 1M» в том, что они меряют извлечение одной иголки. Более честные наборы (multi-hop reasoning, задачи вида «собери N фактов из разных мест и сделай вывод») дают совсем другую картину. По замерам сообщества, на действительно длинных дистанциях эффективная точность на сложных задачах может падать существенно относительно короткого контекста — даже у топовых моделей с окном 1M.
| Тип задачи | Что реально мерит | Поведение на длинном контексте |
|---|---|---|
| Needle in a haystack | Поиск одной точной фразы | Почти идеально, вводит в заблуждение |
| Multi-needle | Найти несколько фактов сразу | Точность падает с ростом числа иголок |
| Multi-hop reasoning | Связать разбросанные факты | Заметная деградация на дистанции |
| Суммаризация всего документа | Удержание глобальной структуры | Теряются детали из середины |
Вывод простой: не верьте одной цифре из пресс-релиза. Свежие релизы моделей и их независимые прогоны стоит отслеживать — новые long context движки появляются регулярно, часть из них попадает в каталог REDDYX с ссылками на репозитории и тесты.
ЭКОНОМИКА: ЗА ДЛИННЫЙ КОНТЕКСТ ПЛАТИТ КАЖДЫЙ ЗАПРОС
Даже если бы точность была идеальной, есть вторая стена — стоимость и латентность. Внимание масштабируется нелинейно по длине, поэтому запихнуть 1M токенов в каждый запрос — это:
- Деньги. Вы платите за входные токены. Миллион токенов на входе в каждом сообщении диалога — это счёт, который растёт линейно с длиной истории.
- Задержка. Time to first token на огромном промпте измеряется секундами, иногда десятками секунд. Для чат-интерфейса это смерть UX.
- Дублирование. Без кэширования вы переотправляете один и тот же контекст снова и снова.
Спасение — prompt caching. Стабильный префикс (система, документация, кодовая база) кэшируется на стороне провайдера, и повторные запросы к нему стоят в разы дешевле и отвечают быстрее. Это ключевой приём эффективности 2026 года: длинный контекст становится практичным именно тогда, когда он статичен и закэширован.
КАК ПРОВЕРИТЬ СВОЮ МОДЕЛЬ САМОМУ
Не доверяйте маркетингу — прогоните собственный multi-needle тест на своих данных. Минимальный скрипт: разбрасываем несколько фактов по длинному тексту на разной глубине и проверяем, сколько модель извлечёт корректно.
import random
def build_haystack(filler_tokens, needles, total_len):
# filler_tokens — большой нейтральный текст (список строк)
# needles — список фактов вида ("код города X", "город X = 4471")
positions = sorted(random.sample(range(total_len), len(needles)))
doc, ni = [], 0
for i in range(total_len):
if ni < len(needles) and i == positions[ni]:
doc.append(needles[ni][0])
ni += 1
else:
doc.append(random.choice(filler_tokens))
return "\n".join(doc), positions
facts = [
("Секретный код Осло равен 4471.", "4471"),
("Секретный код Лимы равен 8830.", "8830"),
("Секретный код Каира равен 1204.", "1204"),
]
haystack, pos = build_haystack(filler_lines, facts, total_len=20000)
prompt = (
haystack
+ "\n\nВопрос: перечисли ВСЕ секретные коды городов, "
"которые встречались в тексте выше. Только числа."
)
# отправляем prompt в модель, сверяем ответ с [f[1] for f in facts]
# считаем recall = (найдено верно) / len(facts)
Ключевой момент — просить несколько фактов сразу и раскладывать их в том числе в середину документа. Если recall на глубине 40–60% длины проседает — вы поймали lost in the middle на своей задаче, и это сигнал не грузить всё подряд.
LONG CONTEXT ПРОТИВ RAG: НЕ ВРАГИ, А СЛОИ
Была волна тейков «длинный контекст убьёт RAG». В 2026 году это выглядит наивно. RAG (retrieval-augmented generation) и long context решают разные части задачи:
| Критерий | Длинный контекст | RAG |
|---|---|---|
| Данные меняются часто | Плохо (переотправка) | Хорошо (обновил индекс) |
| Нужна свежесть/актуальность | Ограничена промптом | Всегда из источника |
| Объём знаний | До лимита окна | Практически безлимитно |
| Стоимость на запрос | Высокая | Низкая (грузим топ-k) |
| Связность рассуждения | Выше (всё сразу) | Зависит от ретривера |
Рабочая архитектура: ретривер достаёт релевантные куски, а длинное окно позволяет не резать их слишком мелко и держать больше контекста вокруг. RAG сужает, окно — вмещает. Вместе они бьют по эффективности лучше, чем каждый по отдельности.
ПРАКТИЧЕСКИЕ ПРАВИЛА 2026
- Кладите важное в начало и конец. Инструкции и ключевой вопрос — по краям промпта, а не утоплены в середине массива данных.
- Не грузите «на всякий случай». Лишние 300K токенов шума снижают точность по нужным 20K. Меньше — часто точнее.
- Кэшируйте статический префикс. Документация, системный промпт, база кода — в prompt cache.
- Структурируйте контекст. Маркеры, заголовки, XML-теги секций помогают модели навигировать по большому вводу.
- Меряйте на своих данных. Один multi-needle прогон честнее десяти графиков из презентации.
ТАК ЧИТАЕТ ЛИ МОДЕЛЬ ВСЁ
Формально — да, все токены проходят через модель. По факту полезного использования — нет, не равномерно и не гарантированно. Заявленный размер окна — это верхняя граница вместимости, а не обещание идеального понимания каждого фрагмента. Разница между «1M токенов помещается» и «1M токенов работает» — это и есть главный водораздел зрелого инженера от новичка, который верит цифре на слайде.
Частые вопросы
Модель с окном 1M токенов действительно читает весь ввод?
Да, технически весь ввод проходит через модель без потерь на этапе загрузки. Но точность извлечения фактов неравномерна: середина длинного контекста извлекается хуже краёв (эффект lost in the middle), а сложные многошаговые задачи деградируют на длинных дистанциях.
Убивает ли длинный контекст необходимость в RAG?
Нет. RAG выигрывает по стоимости, свежести данных и объёму знаний, длинный контекст — по связности рассуждения. В 2026 их комбинируют: ретривер сужает выборку, а большое окно вмещает больше контекста вокруг найденного.
Как самому проверить эффективность контекстного окна?
Прогоните multi-needle тест: разбросайте несколько фактов на разной глубине длинного документа и попросите модель извлечь их все сразу. Считайте recall по глубине. Провал на середине — сигнал не грузить весь объём подряд.
Почему за длинный контекст так дорого платить?
Стоимость входных токенов растёт линейно с длиной, а латентность (time to first token) — быстрее. Снизить расходы помогает prompt caching: стабильный префикс кэшируется у провайдера и повторно стоит в разы дешевле.
Если тема эффективности контекста и свежих long context моделей вам близка — новые репозитории, бенчмарки и инструменты для работы с большим окном мы разбираем в живом режиме. Заглядывайте в Telegram-канал REDDYX AI — новые репозитории каждые 30-60 минут.