Короткий измеренный ответ: на этой коробке надёжность строгого JSON не была функцией квантизации, бэкенда или режима размышлений — каждая из этих замен оставила успех задач без изменений. Она была функцией модели. Одно семейство прошло начисто в каждой конфигурации, которую мы гоняли; другое роняло ответы на тех же задачах. Если ваш пайплайн зависит от парсящегося вывода, бенчмаркайте модель, а не настройки.
Ворклоад за каждой цифрой: детерминированные короткие задачи автоматизации с закрытыми наборами меток, оценка от начала до конца — вывод должен распарситься как JSON и совпасть с ground truth по каждому ключу. Отказавшие запросы остаются в знаменателе. Одна коробка на Ryzen AI Max+ 395, llama.cpp запинен по digest, по три повторных прогона на ячейку.
Ломает ли квантизация JSON-вывод?
Нет — не между этими двумя квантами, на этой модели. Q4_K_M прошёл на 100.0% запросовrepeated, Q8_0 — на 100.0% запросовrepeated на тех же задачах. Популярный страх, что именно на меньшем кванте ваш JSON начинает ломаться, поддержки здесь не нашёл — а раз меньший квант ещё и декодирует быстрее, надёжность — не причина платить за Q8_0 на этом ворклоаде.
Важен ли бэкенд?
Нет. Сборка ROCm прошла на 100.0% запросовrepeated на тех же задачах, где сборка Vulkan держит чистый лист. Бэкенды двигают скорость, а не корректность — в этой конфигурации это пути исполнения, а не разные умы.
Помогает ли режим thinking?
Не на задачах с жёстким правильным ответом. Включённый reasoning набрал 100.0% запросовrepeated против того же чистого листа с выключенным — заплатив на порядок больше времени. Для структурной автоматизации блок размышлений — чистая задержка.
Переменная, которая сдвинула результат: модель
Та же коробка, та же дисциплина рантайма, тот же контракт ворклоада: gemma-4-26B-A4B прошла на 93.8% запросовrepeated там, где Qwen3.6-35B-A3B держал идеальный лист во всех конфигурациях выше. Не катастрофа: большинство запросов парсятся нормально. Но для пайплайна без присмотра разрыв между «парсится каждый ответ» и «парсится большинство» — это разрыв между cron-джобой и пейджером. Полная картина замен моделей, включая места, где gemma выигрывает, — в отчёте о заменах.
Насколько быстр надёжный JSON-ответ?
С выключенным reasoning, от начала до конца до полного проверенного ответа: 844мсrepeated. Достаточно быстро, чтобы модель перестала быть бутылочным горлышком большинства автоматизаций — с ростом очереди важнее становится поведение под конкурентностью.
Чего это НЕ говорит
- Грамматически ограниченное декодирование не использовалось. Это результаты уровня промпта; grammar-режим llama.cpp может механически обеспечить парсируемость, хотя не корректность по ключам, и был выключен намеренно — мы измеряли модели, а не смирительную рубашку.
- Закрытые наборы меток, короткие задачи. Длинные свободные JSON-документы с вложенной структурой — более трудная задача, которую этот ворклоад не щупает.
- Два семейства моделей, одна коробка. Вывод, что подвижная часть — модель, ровно та причина, по которой мы не экстраполируем его на модели, которых не гоняли.
У каждой цифры выше есть постоянная страница со скоупом, ограничениями и сырыми прогонами: реестр клеймов.