Контекст LLM: 8K, 32K, 64K или 128K — сколько ставить

Локальный ИИ · context window · KV-cache

Контекст локальной LLM: 8K, 32K, 64K или 128K — сколько реально нужно

В карточке модели может быть написано 128K или 256K, но это не значит, что стоит сразу выставлять максимум. Чем длиннее контекст, тем больше KV-cache, расход VRAM/RAM, время обработки prompt и риск того, что модель начнёт хуже использовать далёкую информацию. Ниже — практический выбор контекста для чата, RAG, документов, coding-agent и домашнего AI-сервера.

Актуально: сентябрь 2026 Ollama · LM Studio · llama.cpp 8K · 16K · 32K · 64K · 128K+
Context Window KV-cache VRAM num_ctx ctx-size Long Context
Если нужен один ориентир. Для обычного локального чата начинайте с 8–16K. Для RAG, документов и coding-agent — с 32K; переходите к 64K, если контекст действительно заполняется и модель остаётся полностью на GPU. 128K и 256K нужны не «для качества», а для задач с очень длинным входом. Максимальное окно в model card — технический предел, а не оптимальная настройка.

Что такое context window у LLM

Контекстное окно — максимальное количество токенов, которые модель может одновременно учитывать при генерации следующего токена.

В него попадает не только ваш последний вопрос. Современный чат может передавать модели:

  • system prompt;
  • историю предыдущих сообщений;
  • текущий вопрос;
  • текст документов;
  • результаты RAG retrieval;
  • описания tools/functions;
  • прочитанные файлы проекта;
  • вывод терминала и тестов;
  • часть будущего ответа.
context = system + history + files + tools + prompt + generated tokens

Поэтому окно 32K не означает «можно вставить документ на 32 тысячи токенов и ещё получить бесконечный ответ». Все компоненты делят один бюджет.

Что такое 8K, 32K и 128K токенов

K здесь означает тысячи токенов:

8K≈ 8 192 токена
16K≈ 16 384 токена
32K≈ 32 768 токенов
64K≈ 65 536 токенов
128K≈ 131 072 токена
256K≈ 262 144 токена

Нельзя точно переводить токены в страницы или символы одной формулой: токенизация зависит от языка, модели, кода и структуры текста. Русский, английский и программный код расходуют токены по-разному.

Не планируйте контекст в «страницах PDF». Сначала извлеките текст и измерьте реальные токены либо ориентируйтесь на интерфейс/runtime, который показывает заполнение окна.

Максимальный context и эффективный context — разные вещи

Если в карточке модели указано 128K, это означает, что архитектура/runtime допускают окно такого размера. Это не гарантирует одинаковое качество на 4K и 120K входа.

В исследовании EMNLP 2025 Context Length Alone Hurts LLM Performance Despite Perfect Retrieval авторы проверяли пять открытых и закрытых моделей на математике, QA и coding. Даже при идеальном доступе ко всей релевантной информации качество снижалось по мере роста входа, оставаясь внутри заявленного context window.

Иными словами: «модель принимает 128K» не равно «она одинаково хорошо рассуждает по всем 128K».

Это соответствует и практическим отзывам local-LLM пользователей: длинное окно часто полезно как вместимость, но модель может хуже удерживать ограничения, связи и детали в очень длинных сессиях. Форумные цифры нельзя считать универсальным benchmark, но сам эффект подтверждается исследованиями.

Сколько контекста ставить: практическая таблица

Окно Для чего Практический комментарий
4K Очень короткий чат, простые запросы Экономно по памяти, но быстро заканчивается при tools/RAG.
8K Обычный чат, небольшие инструкции Хороший минимальный старт для слабого железа.
16K Чат, небольшие документы, код Практичный универсальный режим для многих домашних задач.
32K RAG, coding, длинные диалоги Хороший баланс вместимости и расхода памяти.
64K Agents, coding tools, web/research, большие документы Ollama сейчас прямо рекомендует 64K+ для web search, agents и coding tools.
128K+ Очень длинные документы/репозитории и специальные workflows Нужен большой запас памяти и обязательное тестирование качества.

Что такое KV-cache и почему он съедает память

Transformer не пересчитывает всю предыдущую последовательность с нуля при каждом новом токене. Для уже обработанных токенов сохраняются key/value states — KV-cache.

Чем больше контекст, тем больше таких состояний нужно хранить.

8K Меньше cache

Меньше VRAM/RAM и быстрее prefill.

32K Больше cache

Больше данных остаётся доступно модели.

128K Большой cache

Может занимать гигабайты независимо от размера GGUF.

Разработчик llama.cpp в официальной discussion поясняет memory breakdown: веса модели — отдельный buffer, KV buffer — это context, а ещё существуют compute buffers. Поэтому размер GGUF на диске не показывает полный расход памяти.

Насколько может вырасти VRAM из-за контекста

Точный размер KV-cache зависит от архитектуры: числа слоёв, KV-heads, head dimension, типа K/V cache, GQA/MQA и других параметров.

В одном из официальных разборов llama.cpp контекст около 30K для конкретной 32-layer модели создавал KV-cache примерно 3,75 ГБ. Это не универсальная цифра, но хорошо показывает порядок проблемы.

Модель на 14 ГБ + карта 16 ГБ ≠ свободные 2 ГБ на любой context. Если KV-cache требует несколько гигабайт, runtime будет вынужден уменьшить окно, выгрузить часть данных или использовать RAM.

Именно поэтому статья про размер модели и статья про context — разные темы.

Базовые расчёты памяти: сколько RAM и VRAM нужно локальной LLM.

Почему большой контекст замедляет модель

Есть два разных этапа:

Prompt processing / prefill Модель сначала должна обработать весь новый вход. Чем длиннее prompt, тем дольше ожидание первого токена.
Token generation При заполненном длинном контексте attention и cache operations становятся тяжелее, а memory pressure растёт.

Поэтому 128K context может быть «включён», но пользователь будет ждать значительно дольше до начала ответа.

TTFT и tokens/s — не одно и то же

TTFT — time to first token. Большой prompt прежде всего ухудшает TTFT. После начала генерации tokens/s может выглядеть приемлемо, но пользователь уже потратил десятки секунд или минуты на prefill.

Почему больше контекста не означает лучшее качество

Причин несколько:

  • релевантные факты становятся меньшей долей общего входа;
  • модели хуже используют информацию в некоторых позициях длинного текста;
  • много похожих фрагментов создаёт конкурирующие сигналы;
  • длинная история содержит устаревшие инструкции и ошибки;
  • long-context training не гарантирует одинаковую reasoning-quality на всей длине.

В исследовании EMNLP 2025 снижение качества наблюдалось даже при идеальном retrieval и без обычной проблемы «модель не нашла нужный кусок». То есть сама длина входа может быть фактором деградации.

Практический принцип: передавайте минимальный достаточный контекст. Если задачу можно решить на 12K релевантного текста, нет смысла автоматически отправлять 100K истории.

Как context length работает в Ollama

В актуальной документации Ollama context по умолчанию выбирается в зависимости от доступной VRAM:

< 24 GiB4K context
24–48 GiB32K context
≥ 48 GiB256K context

Для web search, agents и coding tools документация Ollama рекомендует устанавливать как минимум 64K.

Изменить context глобально

Ollama server
OLLAMA_CONTEXT_LENGTH=32768 ollama serve

Изменить в текущей CLI-сессии

ollama run
/set parameter num_ctx 32768

Передать через API

JSON options
{
  "model": "qwen3:8b",
  "prompt": "Разбери документ",
  "options": {
    "num_ctx": 32768
  }
}

Проверить реальный context и offload

Проверка
ollama ps

Смотрите столбцы PROCESSOR и CONTEXT. Если после увеличения окна вместо 100% GPU появился CPU/GPU split, вы уже заплатили за длинный context скоростью.

Почему в старых гайдах встречается «Ollama всегда 4096»? Это было верно для прежнего поведения и всё ещё встречается в старых FAQ/материалах. Текущая отдельная документация Context length использует VRAM-based defaults. Поэтому проверяйте фактическое значение через ollama ps, а не полагайтесь на старую инструкцию.

Как выставить context в LM Studio

LM Studio позволяет задавать context_length при загрузке модели. Через REST API это выглядит так:

LM Studio REST API
{
  "model": "model-id",
  "context_length": 32768,
  "flash_attention": true,
  "offload_kv_cache_to_gpu": true
}

API LM Studio отдельно различает:

  • context_length — что вы выделили текущему instance;
  • max_context_length — максимум, заявленный самой моделью.
Это очень полезное различие. Модель может поддерживать 128K, а вы сознательно загружаете её с 16K ради экономии VRAM.

Контекст в llama.cpp

В llama.cpp используется параметр -c / --ctx-size.

32K context
llama-cli -m model.gguf -c 32768

Для server:

llama-server
llama-server -m model.gguf -c 32768

Важно: в server-сценарии KV pool может использоваться несколькими sequences/slots. Исторически разработчик llama.cpp пояснял: если общий ctx-size 8192 делится между двумя последовательностями, каждая получает максимум около 4096 токенов при полном заполнении.

Сколько ставить для обычного чата

Для обычного домашнего помощника без огромной истории чаще всего достаточно:

8K → 16K Начните с 8K. Если регулярно теряется начало разговора — переходите к 16K.

Вместо бесконечного роста контекста лучше периодически:

  • начинать новый чат;
  • суммаризировать старую историю;
  • хранить факты отдельно;
  • подключать memory/RAG для устойчивых знаний.

Сколько ставить для PDF, документов и RAG

RAG как раз существует для того, чтобы не отправлять целую библиотеку в контекст. Система ищет несколько нужных chunks и передаёт только их.

16K → 32K Хороший старт для обычного RAG. 64K нужен, если retrieved fragments действительно большие или вопрос требует сопоставлять много источников.

Если RAG требует 128K на каждый вопрос, сначала проверьте:

  • chunk size;
  • Top K;
  • reranking;
  • дубли документов;
  • качество retrieval.

Полный гайд: локальная нейросеть для PDF и документов.

Сколько context нужно coding-agent

Coding-agent расходует окно агрессивнее обычного чата. В prompt попадают tool schemas, файлы, diff, ошибки компилятора, команды и история действий.

32K → 64K Практичный диапазон. Ollama сейчас рекомендует минимум 64K для coding tools и agents, если железо позволяет.

Но если на 64K модель частично выгружается в CPU, 32K с полным GPU-resident inference может дать лучший рабочий опыт.

Подробнее: локальный ИИ для программирования и Codex.

Почему серверу с несколькими пользователями context обходится ещё дороже

Один пользователь с 32K и четыре пользователя с 32K — не одно и то же.

llama.cpp server поддерживает parallel slots и unified KV pool. При планировании сервера нужно учитывать число одновременных sequences.

общая KV-память ≈ context per session × concurrent sessions × architecture cost

Поэтому сервер, который прекрасно держит 64K для одного пользователя, может упереться в память при нескольких одновременных чатах.

Можно ли уменьшить KV-cache квантизацией

Да. llama.cpp поддерживает quantized K/V cache на основных backend, включая CPU, CUDA, ROCm, Metal и Vulkan.

Это позволяет уменьшить память, занимаемую длинным контекстом. В зависимости от backend используются параметры типов cache K/V.

Пример llama.cpp
llama-cli -m model.gguf \
  -c 65536 \
  --cache-type-k q8_0 \
  --cache-type-v q8_0

Более агрессивная квантизация cache может сэкономить ещё больше памяти, но её влияние на качество и скорость нужно проверять на конкретной модели/backend.

Квантизация весов и квантизация KV-cache — разные вещи. Q4_K_M в названии GGUF говорит о весах модели. Тип K/V cache настраивается отдельно.

Модель стала медленной после увеличения context: что проверять

01
Проверьте GPU offload

ollama ps или логи llama.cpp. Не ушла ли часть модели/кэша в RAM?

02
Посмотрите реальное заполнение

Выделенное окно 64K и реально заполненные 5K — не одно и то же.

03
Уменьшите context вдвое

64K → 32K или 32K → 16K и сравните TTFT, tokens/s и качество.

04
Проверьте prompt

Не отправляет ли UI каждый раз огромную историю или лишние документы?

05
Проверьте параллельность

На сервере KV-cache может быть разделён между несколькими slots.

06
Проверьте модель

Заявленный max context не гарантирует одинаковое качество по всей длине.

Оптимальный алгоритм настройки context

  1. Определите реальную задачу.
  2. Начните с минимального разумного окна.
  3. Проверьте, помещается ли модель полностью на GPU.
  4. Измерьте TTFT и generation speed.
  5. Проверьте несколько реальных длинных запросов.
  6. Увеличивайте окно только если упираетесь в его предел.
Чат 8–16K
RAG 16–32K
Coding 32–64K
Agent / web research 64K+
Большой цельный документ 64–128K+
Слабая GPU минимум, который решает задачу
Это стартовые диапазоны, а не стандарт. Конкретная модель, архитектура, quant, runtime и задача важнее самой цифры.

Частые вопросы

Что лучше поставить в Ollama — 8192 или 32768?

Для обычного чата 8K может быть достаточно. Для RAG, coding и длинной истории 32K полезнее, если модель при этом остаётся полностью на GPU.

Почему Ollama показывает только 4096, хотя модель поддерживает 128K?

Текущие defaults Ollama зависят от VRAM: ниже 24 GiB по умолчанию используется 4K. Максимальная способность модели и выделенный runtime context — разные параметры.

Можно ли просто всегда ставить максимальный context?

Технически иногда можно, но это увеличивает память и потенциальный prefill cost. Кроме того, исследования показывают, что качество на очень длинных входах не обязано сохраняться на уровне короткого контекста.

Сколько VRAM съедает 32K context?

Нет универсальной цифры. Размер KV-cache зависит от архитектуры модели, числа слоёв, KV-heads и типа cache. Его нужно измерять на конкретной модели.

Почему 64K context заставил Ollama использовать CPU?

Вероятно, веса + выросший KV-cache перестали помещаться в VRAM. Проверьте ollama ps и уменьшите context.

Что лучше для документов: 128K context или RAG?

Для одного цельного документа long context может быть удобен. Для библиотеки документов RAG обычно рациональнее: он выбирает релевантные фрагменты вместо передачи всей базы.

Что такое context rot?

Так неформально называют ухудшение способности модели надёжно использовать информацию по мере роста контекста. Это не единый официальный параметр, но long-context degradation наблюдается и в исследованиях.

Нужен ли 64K для Codex?

Не всегда, но coding-agent быстро расходует окно на файлы, tools и историю. Ollama сейчас рекомендует не менее 64K для coding tools/agents, если память позволяет.

Q4_K_M и KV-cache q8_0 — одно и то же?

Нет. Q4_K_M относится к квантованию весов GGUF. q8_0 для cache — отдельная настройка представления K/V states.

Живые обсуждения

Почему пользователи перестают верить одной цифре «256K»

В свежих обсуждениях local-LLM сообщества регулярно поднимается разница между «needle in a haystack» и реальной работой: найти одну фразу в 100K токенов проще, чем связно анализировать десятки файлов и сохранять все ограничения задачи.

Это не повод считать long context бесполезным. Правильный вывод другой: оценивайте не только способность модели принять длинный prompt, но и качество вашей реальной задачи на 16K, 32K, 64K и выше.

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

Документация и исследования

Настройка локальной LLM

Модель помещается, но после увеличения context стала медленной?

Можно удалённо проверить фактический KV-cache, VRAM, CPU/GPU offload и подобрать context для Ollama, LM Studio или llama.cpp под ваши документы, coding или RAG.