Перейти к содержанию
modelium.
Начать с задачи
←

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

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

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

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

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

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

Слот — место для одного обрабатываемого сервером запроса. --ctx-size задаёт размер контекста сервера, --parallel — количество слотов; доступное окно запроса определяется фактическим слотом, а не только цифрой в команде запуска. В изученной документации --context-shift по умолчанию выключен; n_predict ограничивает число создаваемых токенов — небольших частей текста. Не увеличивайте --ctx-size вслепую: сначала проверьте модель и ресурсы своей машины. Универсальный минимум оперативной и видеопамяти для этого сочетания не установлен; размер файла модели им не является. s1 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 s3 s4

  1. Если сервер ещё не запущен, после подготовки бинарника и файла модели задайте ему параметры 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
  2. Отправьте короткий выдуманный пример: 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 s2
  3. Повторите тест со своим длинным, но не конфиденциальным вводом. При ошибке о превышении контекста сохраните исходник отдельно, удалите повторы или нерелевантные фрагменты и вновь отправьте сокращённый текст. При truncated: true тоже укоротите ввод и ограничьте ответ через n_predict, затем сверьте важные даты и условия с оригиналом. Не выдавайте новое краткое резюме за полное восстановление потерянной переписки. Если результат снова усечён, переходите к размеру слота, а не меняйте много параметров одновременно. s1 s2

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

--context-shift может освободить место, удалив часть ранее обработанных токенов. Значит, продолжение уже не опирается на весь первоначальный текст; в задачах с датами и обязательствами это риск пропуска. Кроме того, закреплённый код сам выключает сдвиг при обработке текста вместе с изображением/видео и при типе памяти, который не поддерживает сдвиг; для совместно обрабатываемого запроса он отдельно запрещён. Если вы всё же изучаете этот режим, делайте это на отдельном тесте с исходником под рукой, проверяйте журнал и сравнивайте вывод с начальным текстом, а не считайте включённый флаг гарантией. Основной следующий шаг — проверить слот и его доступный контекст. s1 s2

Источники

  1. llama.cpp server README: контекст, запрос completion и поля ответа — revision 10a60cf303566e10d6a7a2774c17d2085503d87b. Получено 10.10.2026.
  2. llama.cpp server-context.cpp: предохранители, остановка и сдвиг — revision 10a60cf303566e10d6a7a2774c17d2085503d87b. Получено 10.10.2026.
  3. Qwen3-0.6B-GGUF: закреплённая карточка и список файлов — revision 23749fefcc72300e3a2ad315e1317431b06b590a. Получено 10.10.2026.
  4. Qwen3-0.6B-GGUF: LICENSE — revision 23749fefcc72300e3a2ad315e1317431b06b590a. Получено 10.10.2026.