На NAS нет видеокарты, только встроенная графика Intel и 32 ГБ общей памяти. Звучит грустно, но есть хитрость: MoE-модели. У Qwen3.6-35B-A3B 35 миллиардов параметров, но на каждый токен работают только 3 миллиарда. Получается и умно, и терпимо по скорости: 8.7 токенов в секунду, примерно как читает человек.
Кто умнее по-русски
Наверху — MoE-модели: Qwen3.6-35B, Gemma 4 26B и gpt-oss-20b. Они и умнее, и в 3–4 раза быстрее плотных 24B (Mistral-Small и Vistral), которые на этом железе выдают 2.5 токена в секунду. Это примерно слово в секунду, на чат не годится. Маленькие модели на 1.7B быстрые, но заметно глупее.
Qwen3.5-4B — отдельный герой. По знаниям на русском (MMLU 74%) она обходит Qwen3-8B, а занимает всего 4.7 ГБ.
Команды умного дома
LLM получает команду («сделай свет в спальне потусклее, процентов на тридцать») и 13 инструментов Home Assistant. От неё нужно выбрать правильный инструмент с правильными параметрами.
- Qwen3.5-4B — 40 из 40, около 6.6 секунды на команду. Она и пошла в голосового ассистента.
- Qwen3-4B и Qwen3-8B ошиблись по разу.
- Ling 3.0 Tiny самый быстрый (2.6 с), но «погаси свет» для него значит «включи».
- Gemma 4 почти безошибочна, но 30 секунд на команду: на этом железе ей приходится каждый раз заново читать весь промпт (подробности ниже).
- Vistral-24B — 10%. Он отвечает текстом «Включаю свет на кухне», но ничего не включает: инструменты он не вызывает вообще.
Достаём данные из документов в JSON
Задача: дать модели текст (счёт, заявку на ремонт, объявление) и JSON Schema, а получить заполненный JSON. В документах спрятаны ловушки: «8,5 млн руб.», телефон «8 907…», который надо привести к «+7907…», поля, которых в тексте нет (нужен null, а не выдумка).
Продаётся двухкомнатная квартира в г. Екатеринбург. Площадь 54,3 м². Цена: 8,5 млн руб., торг уместен. Из плюсов: балкон, новый ремонт, рядом метро. Звоните: 8 907 129 54 00.
{
"type": "flat",
"price": 8500000,
"currency": "RUB",
"area_m2": 54.3,
"rooms": 2,
"city": "Екатеринбург",
"contact_phone": "+79071295400",
"features": [
"балкон",
"новый ремонт",
"рядом метро"
]
}| Модель | телефон, режим B (\d) | телефон, режим C ([0-9]) | цена | комнат |
|---|---|---|---|---|
| Qwen3-1.7B | 89071295400 | +79071295400 | 8500000 | 2 |
| Ling 3.0 Tiny | 89071295400 | +79071295400 | 8500000 | null |
| LFM2.5-24B | +7907129015400 | +79071290100 | 8500000 | 2 |
| Qwen3.5-4B | 89071295400 | +79071295400 | 8500000 | 2 |
| Qwen3.6-35B | +79071295400 | +79071295400 | 8500000 | 2 |
Хитрость, которая даёт 100% валидного JSON
llama.cpp умеет «зажать» модель грамматикой по JSON Schema (response_format: json_schema), и тогда синтаксис
всегда правильный. Но есть подвох: \d в регулярках схемы llama.cpp молча игнорирует. Поле с телефоном
просто не проверяется, и маленькие модели пишут «89071295400» вместо «+79071295400». Стоит написать [0-9]
вместо \d — и все 14 моделей выдают 100% валидных ответов.
По точности лидеры почти идеальны: 98.5–99.3% полей верно. А целиком без единой ошибки разбирают 92–96% документов.
Типичные ошибки: лишний пункт в списке («торг уместен» среди плюсов квартиры), выдуманное время окончания встречи, которого в тексте нет, срочность заявки normal вместо low.
Вихрь против базовых моделей
Вихрь — русские дообучения популярных моделей. Мы сравнили их с базовыми моделями в той же квантизации и на тех же задачах.
Чуда не случилось. QVikhr-3 знает больше фактов (MMLU +7…11 у маленьких моделей), но чуть хуже извлекает JSON, выполняет команды и решает задачки. А Vistral-24B сломал вызов инструментов: 10% команд против 85% у базового Mistral-Small. По знаниям он с базой наравне.
Грабли, на которые мы наступили
--cache-ram 0 обязателен
По умолчанию llama-server кэширует промпты в RAM, и на этом iGPU каждый запрос с новым промптом получал
+10 секунд непонятной задержки. С --cache-ram 0 всё летает. Кэш внутри слота при этом работает: системный
промпт с описанием дома не обрабатывается заново.
Gemma 4 и Intel iGPU не дружат
На этой сборке llama.cpp Gemma 4 без флага --swa-full выдаёт мусор («de de de») или вешает видеокарту так, что
в логе ядра появляется GPU hang. С флагом работает, но ломается кэш промпта: его приходится отключать, и
каждая команда обрабатывает 2 тысячи токенов заново. Отсюда и 30 секунд на команду.
Грамматика может зациклить модель
В одной реальной схеме было строковое поле без ограничения длины. 8 моделей из 14 под грамматикой ушли в
бесконечное «jZ2dna2NjZ2d…» до лимита токенов. Мораль: в своих схемах задавай maxLength.
Итого
| Задача | Берём | Почему |
|---|---|---|
| Голосовые команды | Qwen3.5-4B | 40/40, 6.6 с, 4.7 ГБ, отвечает словами |
| Документы → JSON | Qwen3.6-35B или gpt-oss-20b | 99.3% полей, ~18 с на документ |
| То же, но быстро | Ling 3.0 Tiny | 98% полей за 6 с |
| Вопросы и тексты на русском | Qwen3.6-35B-A3B | лучший по всем тестам, 8.7 tok/s, 18 ГБ |