Перейти к содержанию
Публикация AiManual

Исправленный Jinja-шаблон для Qwen 3.8: решение проблем официального chat-шаблона

Официальный chat-шаблон Qwen 3.8 падает при enable_thinking=false, засоряет историю пустыми тегами и не обрабатывает JSON-строки инструментов. Исправленный Jinj

Коротко

Что будет в материале

  1. 01

    Критические недостатки официального шаблона Qwen 3.8

  2. 02

    Исправленный шаблон: что нового и как он решает проблемы

  3. 03

    Практическое руководство по запуску с исправленным шаблоном

  4. 04

    Тестирование и ограничения исправленного шаблона

Официальный chat-шаблон Qwen 3.8 ломает три критических сценария: отключение мышления вызывает исключение, многоходовые диалоги засоряются пустыми тегами <think></think>, а передача аргументов инструментов в формате JSON-строк по стандарту OpenAI API приводит к падению шаблона. Разработан исправленный drop-in шаблон, совместимый со всеми моделями серии Qwen 3.5, 3.6 и 3.8. Он восстанавливает переключатель рассуждений, поддерживает все уровни reasoning_effort, сохраняет историю мыслей для 100% попаданий в KV cache и корректно обрабатывает инструменты в формате Python-словарей и JSON-строк. Шаблон доступен на Hugging Face и работает в llama.cpp, vLLM, LM Studio и MLX.

Модель Qwen 3.8 впервые представила управляемое через промпт усиление рассуждений, prompt-steered reasoning effort. Параметр reasoning_effort задаёт глубину мышления уровнями xhigh, high, medium и low. Однако реализация официального Jinja-шаблона не даёт использовать эту возможность в полной мере. Разберём конкретные баги и способ их исправления.

Критические недостатки официального шаблона Qwen 3.8

Три проблемы официального шаблона блокируют работу в агентных сценариях и при локальном инференсе. Каждая из них воспроизводится стабильно и не зависит от среды запуска.

Невозможность отключить режим мышления

Параметр enable_thinking=false должен полностью отключать рассуждения для простых задач. Вместо этого официальный шаблон вызывает жёсткое исключение. Пользователь не может выбрать быстрый режим ответа без фазы мышления, что ограничивает гибкость модели в продакшене. Для задач вроде простой классификации или генерации коротких ответов принудительное мышление тратит токены и замедляет ответ.

Пустые теги <think></think> в истории диалога

При многоходовых диалогах официальный шаблон внедряет в историю пустые теги <think></think>. Они не несут информации, но занимают место в KV cache и могут сбивать модель. Каждый пустой тег добавляет токены в контекст, что увеличивает потребление памяти и снижает качество последующих ответов. Проблема накапливается с каждым ходом диалога.

Падение при JSON-строках в аргументах инструментов

Стандарт OpenAI API передаёт аргументы инструментов как JSON-строки. Официальный шаблон Qwen 3.8 не может их обработать и падает. Это нарушает работу tool calling и делает модель непригодной для агентных фреймворков. Любой вызов функции с аргументами в формате JSON-строки приводит к ошибке, что блокирует автоматизацию и интеграцию с внешними API.

Похожие проблемы с шаблонами чата встречались и у других моделей. Например, Laguna S 2.1 не запускала режим рассуждений из-за бага в параметре preserve_thinking, а обновление Laguna S-2.1 GGUF устраняло broken thinking через новый chat template.

Исправленный шаблон: что нового и как он решает проблемы

Исправленный шаблон создан как drop-in замена официальному. Он совместим с Qwen 3.5, 3.6 и 3.8, что позволяет использовать единый шаблон для всей серии моделей. Ключевые улучшения закрывают все три критические проблемы.

Восстановление переключателя рассуждений

Шаблон поддерживает параметр reasoning_effort с уровнями xhigh, high, medium и low для Qwen 3.8. Отключение мышления работает через kwargs или текстовую команду <|think_off|>. Пользователь может выбрать глубину рассуждений под конкретную задачу: от максимальной проработки на xhigh до быстрого ответа без фазы мышления. Это возвращает гибкость, заявленную в prompt-steered reasoning effort.

Сохранение истории мыслей для KV cache

Шаблон сохраняет мысли в истории диалога. Это обеспечивает 100% попаданий в KV cache при многоходовых диалогах. Отсутствие пустых тегов и корректное хранение рассуждений ускоряет инференс и снижает потребление памяти. Модель не пересчитывает уже обработанные токены, что критично для длинных сессий.

Универсальная обработка инструментов

Шаблон обрабатывает аргументы инструментов в двух форматах: Python-словари и JSON-строки. Это делает его совместимым с различными API и агентными фреймворками. Tool calling работает без падений независимо от того, как именно передаются аргументы. Поддержка сред включает llama.cpp, vLLM, LM Studio и MLX.

Практическое руководство по запуску с исправленным шаблоном

Для использования исправленного шаблона в llama.cpp достаточно указать путь к файлу шаблона и включить Jinja-обработку. Автор рекомендует конкретный набор флагов для корректной работы.

Пример команды для llama-server

llama-server --jinja --chat-template-file <путь к шаблону> --reasoning-format deepseek

Флаг --jinja включает обработку Jinja-шаблона. Флаг --chat-template-file указывает путь к исправленному шаблону. Флаг --reasoning-format deepseek задаёт формат разделения мыслительных токенов.

Почему важен --reasoning-format deepseek

Флаг --reasoning-format deepseek разделяет мыслительные токены в отдельное поле reasoning_content. Это необходимо для корректной работы агентских обвязок. Без этого разделения агентные фреймворки могут зависать, ожидая завершения рассуждений, которые не отделены от основного ответа. Поле reasoning_content позволяет внешним системам обрабатывать мысли отдельно от финального ответа.

Шаблон также работает в vLLM, LM Studio и MLX. Для каждой среды настройка выполняется через указание пути к файлу шаблона в конфигурации запуска. Если вы сталкивались с потерей контекста у Qwen 3.6 27B, разбор пяти причин в статье о потере инструкций в llama.cpp поможет настроить стабильную работу.

Тестирование и ограничения исправленного шаблона

Все 28 автоматических тестов и проверки токенизатора пройдены. Тесты покрывают основные сценарии: отключение мышления, многоходовые диалоги, обработку инструментов в обоих форматах. Однако автор не имел возможности протестировать шаблон на полной модели размером 2.4 трлн параметров. Тестирование проводилось на доступных версиях, что оставляет пространство для непредвиденных проблем в реальных сценариях на полной модели. Автор приглашает пользователей Qwen 3.8 к обратной связи для выявления и устранения возможных проблем.

Стоит учитывать, что даже с исправленным шаблоном модель Qwen 3.8 Next показывала склонность к зацикливанию в мыслительных цепочках. Исправленный шаблон решает проблемы форматирования и обработки, но не устраняет архитектурные особенности модели.

Заключение: стоит ли переходить на исправленный шаблон

Для production-сценариев с tool calling и управлением мышлением исправленный шаблон необходим. Он решает три критические проблемы официальной версии: восстанавливает отключение мышления, убирает пустые теги из истории и корректно обрабатывает JSON-строки инструментов. Совместимость с Qwen 3.5, 3.6 и 3.8 позволяет использовать единый шаблон для всей серии. Пройденные 28 тестов подтверждают базовую надёжность, но тестирование на полной модели 2.4 трлн параметров не проводилось. Если вы используете Qwen 3.8 в агентных сценариях или нуждаетесь в гибком управлении рассуждениями, переходите на исправленный шаблон и сообщайте о найденных проблемах автору.

Подписаться на канал