# llama.cpp: что делать, если контекст заполнен

Источник: https://modelium.tech/zhurnal/llama-cpp-context-shift/

Если llama.cpp сообщает `context shift is disabled` или перестаёт продолжать ответ, сначала проверьте, не заполнено ли контекстное окно — место для текущего запроса и ответа. На закреплённой версии сервера отключённый сдвиг обычно останавливает генерацию с `truncated: true`, но чрезмерно длинный вход может сразу дать ошибку. Самый безопасный первый шаг — сохранить исходный текст отдельно, сократить запрос и ограничить длину нового ответа; включение сдвига может выбросить часть раннего контекста.

Длинная переписка с локальной моделью может оборваться, когда не остаётся места для следующего фрагмента ответа. **Контекстное окно** — место, в которое сервер помещает запрос и создаваемый текст. Если в журнале вы увидели `context shift is disabled`, не считайте это советом сразу включить сдвиг: сначала сохраните исходный текст, проверьте лимит и попробуйте короткий запрос. На изученной версии обычная остановка чаще отражается в ответе как `truncated: true`; буквальная строка ошибки стоит в дополнительной защитной ветке кода. [s1](#src-s1) [s2](#src-s2)

Это **инженерная инструкция по документации и коду** llama.cpp на коммите `10a60cf` от 9 октября 2026 года. Modelium не запускал сервер и модель и не воспроизводил ошибку по HTTP. Ниже нужен Linux, уже собранный `llama-server`, терминал и заранее скачанный совместимый GGUF; для первого запуска откройте [гайд по llama.cpp](/zhurnal/llama-cpp/). [s1](#src-s1) [s2](#src-s2)

## Почему запрос обрывается?

Есть две разные ситуации. **Слишком длинный начальный текст** не помещается в окно отдельного слота: сервер возвращает ошибку превышения размера контекста, ещё до полезного ответа. **Запрос помещается, но место кончается во время ответа**: с выключенным сдвигом код останавливает генерацию, устанавливая `stop_type: "limit"` и `truncated: true`. Одного `stop_type: "limit"` недостаточно для диагноза: тем же типом помечается остановка по заданному вами пределу `n_predict`. Смотрите поле `truncated` и длину самого ввода. [s1](#src-s1) [s2](#src-s2)

**Слот** — место для одного обрабатываемого сервером запроса. `--ctx-size` задаёт размер контекста сервера, `--parallel` — количество слотов; доступное окно запроса определяется фактическим слотом, а не только цифрой в команде запуска. В изученной документации `--context-shift` по умолчанию выключен; `n_predict` ограничивает число создаваемых токенов — небольших частей текста. Не увеличивайте `--ctx-size` вслепую: сначала проверьте модель и ресурсы своей машины. Универсальный минимум оперативной и видеопамяти для этого сочетания не установлен; размер файла модели им не является. [s1](#src-s1) [s2](#src-s2)

## Как проверить границу без личных данных?

Используйте компьютер с Linux и уже работающим `llama-server` с **одним слотом** на адресе `127.0.0.1:8080`. Для отдельного теста можно взять файл `Qwen3-0.6B-Q8_0.gguf` из закреплённого репозитория `Qwen/Qwen3-0.6B-GGUF` (`23749fe`): в карточке он есть, LICENSE указывает Apache-2.0. **GGUF** — формат файла модели, который читает llama.cpp. Это пример весов, а не обещание скорости или совместимости на любом ПК; скачивание программы и модели требует сети, сами запросы идут на локальный адрес. Если сервер уже работает с другим совместимым текстовым GGUF, не заменяйте модель только ради диагностики. [s1](#src-s1) [s3](#src-s3) [s4](#src-s4)

- Если сервер ещё не запущен, после подготовки бинарника и файла модели задайте ему параметры `llama-server -m ./Qwen3-0.6B-Q8_0.gguf -c 2048 -np 1 --no-context-shift --host 127.0.0.1 --port 8080`. Если ваш бинарник лежит в другом каталоге, укажите путь к нему. После загрузки модели `curl -fsS http://127.0.0.1:8080/health` должен сообщить о готовности; если не готов, прежде исправьте запуск, а не увеличивайте контекст. Привязка к localhost не ограждает сервер от других пользователей **того же компьютера**. [s1](#src-s1)

- Отправьте короткий **выдуманный** пример: `curl -fsS http://127.0.0.1:8080/completion -H 'Content-Type: application/json' -d '{"prompt":"Учебная встреча: Мария принесла черновик 12 мая. Иван сверит дату. Что сверит Иван?","n_predict":32,"stream":false}'`. В ответе найдите `content`, `stop_type` и `truncated`; проверьте ответ по исходной фразе. Не ожидайте от модели определённой формулировки. Если `truncated: false` и `stop_type: "limit"`, возможно, просто достигнут предел в 32 токена — это **не** доказательство переполнения контекста. [s1](#src-s1) [s2](#src-s2)

- Повторите тест со своим длинным, но **не конфиденциальным** вводом. При ошибке о превышении контекста сохраните исходник отдельно, удалите повторы или нерелевантные фрагменты и вновь отправьте сокращённый текст. При `truncated: true` тоже укоротите ввод и ограничьте ответ через `n_predict`, затем сверьте важные даты и условия с оригиналом. Не выдавайте новое краткое резюме за полное восстановление потерянной переписки. Если результат снова усечён, переходите к [размеру слота](/zhurnal/llama-cpp-server-slots/), а не меняйте много параметров одновременно. [s1](#src-s1) [s2](#src-s2)

## Почему не включить сдвиг сразу?

`--context-shift` может освободить место, **удалив часть ранее обработанных токенов**. Значит, продолжение уже не опирается на весь первоначальный текст; в задачах с датами и обязательствами это риск пропуска. Кроме того, закреплённый код сам выключает сдвиг при обработке текста вместе с изображением/видео и при типе памяти, который не поддерживает сдвиг; для совместно обрабатываемого запроса он отдельно запрещён. Если вы всё же изучаете этот режим, делайте это на отдельном тесте с исходником под рукой, проверяйте журнал и сравнивайте вывод с начальным текстом, а не считайте включённый флаг гарантией. Основной следующий шаг — [проверить слот и его доступный контекст](/zhurnal/llama-cpp-server-slots/). [s1](#src-s1) [s2](#src-s2)

## Источники

1. [llama.cpp server README: контекст, запрос completion и поля ответа](https://github.com/ggml-org/llama.cpp/blob/10a60cf303566e10d6a7a2774c17d2085503d87b/tools/server/README.md) — получено 2026-10-10
2. [llama.cpp server-context.cpp: предохранители, остановка и сдвиг](https://github.com/ggml-org/llama.cpp/blob/10a60cf303566e10d6a7a2774c17d2085503d87b/tools/server/server-context.cpp) — получено 2026-10-10
3. [Qwen3-0.6B-GGUF: закреплённая карточка и список файлов](https://huggingface.co/api/models/Qwen/Qwen3-0.6B-GGUF/revision/23749fefcc72300e3a2ad315e1317431b06b590a) — получено 2026-10-10
4. [Qwen3-0.6B-GGUF: LICENSE](https://huggingface.co/Qwen/Qwen3-0.6B-GGUF/blob/23749fefcc72300e3a2ad315e1317431b06b590a/LICENSE) — получено 2026-10-10
