Перейти к основному содержанию

Выбор модели

Около 6 мин

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) построить диаграмму смогли все — пустых схем и галлюцинаций успеха больше не было. Расхождение ушло на две более тонкие оси:

  1. Грунтинг через базу знаний — на продуктовом вопросе «как сделать X» одни модели зовут поиск по вашей базе знаний и отвечают по фактам, другие выдумывают по памяти. Половина кандидатов (в том числе прежний выбор Qwen3-Next-80B) не зовёт базу знаний вообще — для продукта это прямой риск галлюцинаций.
  2. Масштаб — крупный процесс на 30–40 элементов одним заходом большинство собрало на 34–38 узлов, но часть моделей строит его «мелко» (одна — всего 4 узла).

Сквозь оба фильтра чище всех прошла одна — и это уже не та модель, что год назад.

ПриоритетМодельБаза знанийМасштабВердикт
🥇 Основной выборQwen3.6-35B-A3B91%38 узловЛучший баланс: грунтит ответы через базу знаний, собирает крупный процесс, чисто выбирает инструменты (батарея 100%). MoE с 3B активных — быстрее прежнего выбора (замер 245 vs 154 tok/s), остаётся запас VRAM под голосовой ввод.
⚡ Сильные альтернативыgpt-oss-120B / Llama-3.3-70B91% / 100%36 / 36Обе грунтят базу знаний и строят крупный процесс. Llama — зрелый tool-calling; gpt-oss — высокий decode. Тяжелее по VRAM.
↩️ Прежний выборQwen3-Next-80B-A3B0%34 узлаСтроит надёжно и быстр (замер 154 tok/s), но не зовёт базу знаний — на продуктовых вопросах отвечает по памяти. Это и есть разрыв, который закрывает новая рекомендация.
⚠️ С оговоркойQwen3-30B-2507 / Qwen3-32B25% / 16%4 / 2130B-2507 быстрая, но крупный процесс не тянет (строит ~4 узла). 32B медленная (dense) и слабее по выбору инструмента.

Кандидаты (все влезают в 96 ГБ)

Бюджет — одна карта класса NVIDIA RTX PRO 6000 (96 ГБ). Все модели в него помещаются с тем или иным квантованием. Для каждой указан парсер tool-call в vLLM — без правильного парсера чат не выполняет действия (см. Развёртывание на vLLM).

МодельТип / активныхКвант на 96 ГБtool-parserЗаметка
Qwen3.6-35B-A3BMoE / 3Bfp8 ~35 ГБqwen3_coder🥇 основной выбор; гибрид-thinking
Qwen3.6-27Bdense / 27Bfp8 ~27 ГБqwen3_coderгибрид-thinking
Qwen3-Next-80B-A3BMoE / 3Bfp8 ~80 ГБhermesпрежний выбор; широкие знания
Qwen3-Coder-30B-A3BMoE / 3Bfp8 ~30 ГБqwen3_coderагентно-кодовая, очень лёгкая
Qwen3-30B-A3B-2507MoE / 3Bfp8 ~30 ГБhermesбыстрая, но мелко строит крупный процесс
Qwen3-32Bdense / 32Bfp8 ~32 ГБhermesгибрид-thinking, тяжёлая
Mistral-Small-3.2-24Bdense / 24Bbf16 / fp8 ~24 ГБmistralлёгкая; база знаний — 0%
gpt-oss-120BMoE / 5BMXFP4 ~61 ГБopenaireasoning (думает всегда)
GLM-4.5-AirMoE / 12BGPTQ-Int4 ~55 ГБglm45reasoning; агентный профиль
Llama-3.3-70Bdense / 70Bfp8 ~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-A3BMoE 3B~245замер
Qwen3-Next-80BMoE 3B~154замер
gpt-oss-120BMoE 5B~67оценка
GLM-4.5-AirMoE 12B~54оценка
Qwen3-30B-2507MoE 3B~41оценка
Qwen3-Coder-30BMoE 3B~23оценка
Llama-3.3-70Bdense 70B~14оценка
Mistral-Small-24Bdense 24B~10оценка
Qwen3-32Bdense 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. Скорость — справочный, вторичный критерий (качество приоритетно).

Связанная документация