Выбор модели
Self-hosted LLM — выбор модели
AI-чат Storm оркестрирует внутренние инструменты (создать диаграмму, завести роли и документы, привязать их к процессу, проставить описания, ответить на вопрос по продукту через базу знаний). По умолчанию движком выступает внешняя модель через OpenAI-совместимый API. Эту модель можно заменить на локальную LLM на собственном GPU — так дешевле в эксплуатации, а данные не покидают контур. Рядом с моделью на той же карте можно поднять голосовой ввод.
Мы прогнали 10 моделей через настоящий чат Storm с реальными MCP-инструментами на реальных запросах пользователей и выбрали ту, что лучше всех ведёт агентный сценарий в проде. Ниже — рекомендация и обоснование.
Раздел из двух частей
Эта страница — какую модель выбрать и почему (бенчмарк, кандидаты, скорость). Как развернуть выбранную модель в проде — в соседней статье Развёртывание на vLLM (docker-compose, разбор флагов, тюнинг производительности).
Смена модели — это две настройки, без правки кода
Движок переключается параметрами bpmnAiCompletionBaseUrl и bpmnAiCompletionModel в настройках приложения. Формат OpenAI-совместимый, поэтому подходят как облачные API, так и self-hosted-сервер (vLLM/SGLang). Код приложения менять не нужно.
Коротко
На простых задачах почти все модели работают одинаково хорошо — и это обманчиво. В этом раунде (10 моделей, включая новые Qwen 3.6) построить диаграмму смогли все — пустых схем и галлюцинаций успеха больше не было. Расхождение ушло на две более тонкие оси:
- Грунтинг через базу знаний — на продуктовом вопросе «как сделать X» одни модели зовут поиск по вашей базе знаний и отвечают по фактам, другие выдумывают по памяти. Половина кандидатов (в том числе прежний выбор Qwen3-Next-80B) не зовёт базу знаний вообще — для продукта это прямой риск галлюцинаций.
- Масштаб — крупный процесс на 30–40 элементов одним заходом большинство собрало на 34–38 узлов, но часть моделей строит его «мелко» (одна — всего 4 узла).
Сквозь оба фильтра чище всех прошла одна — и это уже не та модель, что год назад.
| Приоритет | Модель | База знаний | Масштаб | Вердикт |
|---|---|---|---|---|
| 🥇 Основной выбор | Qwen3.6-35B-A3B | 91% | 38 узлов | Лучший баланс: грунтит ответы через базу знаний, собирает крупный процесс, чисто выбирает инструменты (батарея 100%). MoE с 3B активных — быстрее прежнего выбора (замер 245 vs 154 tok/s), остаётся запас VRAM под голосовой ввод. |
| ⚡ Сильные альтернативы | gpt-oss-120B / Llama-3.3-70B | 91% / 100% | 36 / 36 | Обе грунтят базу знаний и строят крупный процесс. Llama — зрелый tool-calling; gpt-oss — высокий decode. Тяжелее по VRAM. |
| ↩️ Прежний выбор | Qwen3-Next-80B-A3B | 0% | 34 узла | Строит надёжно и быстр (замер 154 tok/s), но не зовёт базу знаний — на продуктовых вопросах отвечает по памяти. Это и есть разрыв, который закрывает новая рекомендация. |
| ⚠️ С оговоркой | Qwen3-30B-2507 / Qwen3-32B | 25% / 16% | 4 / 21 | 30B-2507 быстрая, но крупный процесс не тянет (строит ~4 узла). 32B медленная (dense) и слабее по выбору инструмента. |
Кандидаты (все влезают в 96 ГБ)
Бюджет — одна карта класса NVIDIA RTX PRO 6000 (96 ГБ). Все модели в него помещаются с тем или иным квантованием. Для каждой указан парсер tool-call в vLLM — без правильного парсера чат не выполняет действия (см. Развёртывание на vLLM).
| Модель | Тип / активных | Квант на 96 ГБ | tool-parser | Заметка |
|---|---|---|---|---|
| Qwen3.6-35B-A3B | MoE / 3B | fp8 ~35 ГБ | qwen3_coder | 🥇 основной выбор; гибрид-thinking |
| Qwen3.6-27B | dense / 27B | fp8 ~27 ГБ | qwen3_coder | гибрид-thinking |
| Qwen3-Next-80B-A3B | MoE / 3B | fp8 ~80 ГБ | hermes | прежний выбор; широкие знания |
| Qwen3-Coder-30B-A3B | MoE / 3B | fp8 ~30 ГБ | qwen3_coder | агентно-кодовая, очень лёгкая |
| Qwen3-30B-A3B-2507 | MoE / 3B | fp8 ~30 ГБ | hermes | быстрая, но мелко строит крупный процесс |
| Qwen3-32B | dense / 32B | fp8 ~32 ГБ | hermes | гибрид-thinking, тяжёлая |
| Mistral-Small-3.2-24B | dense / 24B | bf16 / fp8 ~24 ГБ | mistral | лёгкая; база знаний — 0% |
| gpt-oss-120B | MoE / 5B | MXFP4 ~61 ГБ | openai | reasoning (думает всегда) |
| GLM-4.5-Air | MoE / 12B | GPTQ-Int4 ~55 ГБ | glm45 | reasoning; агентный профиль |
| Llama-3.3-70B | dense / 70B | fp8 ~70 ГБ | llama3_json | зрелый tool-calling; нужен chat-template |
Как мы тестировали
Запросы шли в настоящий бэкенд Storm (собранный из исходников) и его реальные MCP-инструменты — без эмуляции. Результат сверяли не по словам модели, а по факту в базе данных: что реально создалось, на ком назначены роли, что описано и привязано. Промпты взяты из живых запросов пользователей (что люди реально просят у чата). Каждую пару «модель × сценарий» гоняли по 2 раза против вероятностной природы LLM, а итоговые диаграммы отрисовывали той же библиотекой, что рисует их в Storm.
Типы сценариев:
- Выбор инструмента — типовые запросы на чтение плюс off-topic: верный ли инструмент, не срывается ли в болтовню.
- Простой сценарий создания — один промпт собирает диаграмму, задачи, роли с назначением, документ с привязкой и описания (~15 вызовов, нужно прокидывать
idмежду ними). - Крупный процесс — «Выдача потребительского кредита» (20–30 элементов) и полный цикл на 30–40 элементов одним заходом: шлюзы, ветвления, цикл доработки, роли, документы, описания.
- Многоходовая переписка — процесс собирается за несколько сообщений подряд, как в реальном чате: не теряет ли модель контекст и верно ли в конце пересказывает собранное.
- База знаний — продуктовые вопросы «как сделать X»: зовёт ли модель поиск по базе знаний или выдумывает.
- Чтение/анализ — «опишите диаграмму», «что улучшить» на готовой схеме.
Что показал прогон
На простом сценарии и на масштабе — паритет лучше прежнего. Все 10 моделей строят непустые диаграммы, а крупный процесс на 34–38 узлов собрало большинство (не только MoE Qwen, как было раньше, — Llama, Mistral и gpt-oss тоже). Заметные провалы по масштабу — у Qwen3-30B-2507 (строит крупный процесс «мелко», ~4 узла вместо 30–40).
Решающим отличием стала дисциплина обращения к базе знаний. На продуктовых вопросах половина моделей не вызывает поиск по базе знаний и отвечает по памяти — это прямой риск выдумать про продукт:
- Грунтят ответ на фактах из базы: Llama-3.3-70B и GLM-4.5-Air (100%), Qwen3.6-35B-A3B и gpt-oss-120B (91%).
- Не зовут базу знаний вообще (0%): Qwen3-Next-80B (прежний выбор), Mistral-Small, Qwen3-Coder-30B.
Главный вывод раунда
Прежний выбор (Qwen3-Next-80B) строит надёжно и быстр, но на вопросах «как сделать X» не обращается к базе знаний — отвечает по памяти. Новый выбор Qwen3.6-35B-A3B закрывает именно этот разрыв (грунтинг 91%), не теряя в построении и выигрывая в скорости.
Скорость на одной карте
Локально скорость decode упирается в память: tok/s ≈ ПСП / (активные_параметры × байт). У MoE активных параметров мало, поэтому они в разы быстрее dense-моделей при сопоставимом качестве. Цифры с пометкой «замер» сняты прямой пробой на нашем боксе (RTX PRO 6000, fp8, speed-профиль); остальные — оценка.
| Модель | Активных | decode tok/s | Источник |
|---|---|---|---|
| Qwen3.6-35B-A3B | MoE 3B | ~245 | замер |
| Qwen3-Next-80B | MoE 3B | ~154 | замер |
| gpt-oss-120B | MoE 5B | ~67 | оценка |
| GLM-4.5-Air | MoE 12B | ~54 | оценка |
| Qwen3-30B-2507 | MoE 3B | ~41 | оценка |
| Qwen3-Coder-30B | MoE 3B | ~23 | оценка |
| Llama-3.3-70B | dense 70B | ~14 | оценка |
| Mistral-Small-24B | dense 24B | ~10 | оценка |
| Qwen3-32B | dense 32B | медленно | оценка |
Скорость — не узкое место для выбора
Победителя поднимают на собственном GPU, где MoE с 3B активных быстры: Qwen3.6-35B-A3B замерена быстрее прежнего выбора (245 против 154 tok/s) и при этом меньше по total-параметрам → больше запас VRAM. При 2–3 одновременных чатах карта не упирается ни у одной модели — continuous batching даёт агрегат выше однопоточного. Точные цифры под ваше железо снимаются 5-минутным прогоном vllm bench.
Профиль: speed vs quality (для гибридных моделей)
Qwen3.6-35B-A3B — гибридная thinking-модель: режим размышлений включается параметром запроса enable_thinking (на боксе — профилем запуска). Мы замерили оба режима прямой пробой:
| Режим | decode | что происходит | смысл |
|---|---|---|---|
| thinking OFF (speed) | ~232 tok/s | полный связный ответ | то, что нужно чату |
| thinking ON (quality) | ~259 tok/s | весь бюджет токенов уходит в reasoning до ответа | думает много токенов → выше латенси на ответ |
Вывод по профилю — деплоить в speed (thinking off)
Декод одинаково быстрый в обоих режимах (быстрее прежнего выбора в любом случае). Цена «quality» — не медленный декод, а объём токенов: с размышлением модель тратит большой бюджет на reasoning до ответа, кратно увеличивая латенси. При этом 35B-A3B уже без размышлений даёт топ-результат (база знаний 91%, крупный процесс 38 узлов, выбор инструмента 100%). Размышления для чата Storm не нужны — это опциональный запас под действительно трудные задачи рассуждения.
Что учесть при self-host
Несколько настроек self-host-сервера, которые стоит выверить до продакшена:
- Настройте парсер tool-call под выбранную модель (
--tool-call-parser; для Qwen3.6 —qwen3_coder) — иначе вызовы инструментов уходят текстом, и чат перестаёт выполнять действия. - Гибридные архитектуры (Qwen3-Next, Qwen3.6 — mamba/gated-delta) требуют
--enable-chunked-prefill, иначе vLLM падает на ассерте mamba-кэша. - Контекст: новый выбор по умолчанию запускают на меньшем окне (32K), чем прежний (64K). Для крупных диаграмм + базы знаний поднимите
--max-model-lenдо 65536 — 35B-A3B меньше 80B по total, KV-кэш на 64K помещается в 96 ГБ с запасом. - Системный промпт менять не нужно — он уже требует явного вызова инструментов и грунтинга через базу знаний.
- Шлюз перед моделью (корпоративный прокси, API-gateway) должен пропускать потоковые ответы. Если он отвечает
400на"stream": true, выключите тумблер «Стриминг ответа» — см. Настройка AI-ассистента. Сам vLLM стриминг поддерживает, проблема почти всегда в прослойке.
Как переключить модель
Параметры задаются в настройках приложения (раздел AI) и применяются без перезапуска:
| Параметр | Что задаёт | Значение для нового выбора |
|---|---|---|
bpmnAiCompletionBaseUrl | Базовый URL OpenAI-совместимого эндпоинта (без /v1 — Storm допишет сам) | http://<llm-host> |
bpmnAiCompletionModel | Имя модели на этом эндпоинте (ровно --served-model-name) | qwen36-35b-a3b |
bpmnAiCompletionTemperature | Температура | 0.2 |
План внедрения
Поднять Qwen3.6-35B-A3B (vLLM, fp8, профиль speed / thinking off) на карте 96 ГБ — VRAM хватает с запасом, рядом помещается голосовой ввод. Раскатывать лучше через A/B-флаг на части пользователей (доля → метрики чата за 1–2 недели → дальше), а не хард-свитчем: так видно, ушли ли галлюцинации про продукт (грунтинг базы 0% → 91%) и держится ли качество на крупных диаграммах.
Условия прогона
Сравнение выполнено через настоящий бэкенд Storm и реальные MCP-инструменты, на self-hosted vLLM (RTX PRO 6000, 96 ГБ), профиль speed (для гибридных моделей размышления выключены — в quality их качество ещё выше). Сверка — по факту в базе данных, а не по тексту ответа модели; по 2 повтора против недетерминизма; диаграммы отрисованы той же библиотекой, что в Storm. Скорость — справочный, вторичный критерий (качество приоритетно).
Связанная документация
- Развёртывание на vLLM — как развернуть выбранную модель на vLLM (compose, разбор флагов, тюнинг производительности)
- Включение и подключение модели — подключение модели к Storm и настройка поведения чата
- База знаний AI-чата (RAG) — как чат отвечает по вашим справочным документам
- Конфигурация системы — настройки приложения и ENV-переменные