Локальная LLM для AI-чата
Локальная LLM для AI-чата
AI-чат Storm оркестрирует внутренние инструменты (создать диаграмму, завести роли и документы, привязать их к процессу, проставить описания). По умолчанию движком выступает внешняя модель через OpenAI-совместимый API. Эту модель можно заменить на локальную LLM на собственном GPU — так дешевле в эксплуатации, а данные не покидают контур. Рядом с моделью на той же карте можно поднять голосовой ввод.
Мы прогнали 8 моделей через настоящий чат Storm с реальными MCP-инструментами на четырёх типах задач и выбрали ту, что тянет агентный tool-calling в продовом сценарии. Ниже — рекомендация и обоснование.
Смена модели — это две настройки, без правки кода
Движок переключается параметрами bpmnAiCompletionBaseUrl и bpmnAiCompletionModel в настройках приложения. Формат OpenAI-совместимый, поэтому подходят как облачные API, так и self-hosted-сервер (vLLM/SGLang). Код приложения менять не нужно.
Коротко
На простых задачах почти все модели работают одинаково хорошо — и это обманчиво. Расхождение проявляется на двух осях:
- Масштаб — построить процесс на 20–30 элементов смогли только MoE-модели Qwen.
- Многоходовая переписка — половина моделей теряет рабочий контекст между сообщениями или выдаёт вызовы инструментов простым текстом. А чат всегда многоходовый.
Сквозь оба фильтра из локальных моделей прошла одна.
| Приоритет | Модель | Масштаб | Чат | Вердикт |
|---|---|---|---|---|
| 🥇 Основной выбор | Qwen3-Next-80B-A3B | ✅ | ✅ | Единственная локальная модель, прошедшая все 4 теста: довела до конца крупный процесс и удержала контекст в многоходовом чате с верным восстановлением состояния. MoE с 3B активных параметров — быстрая, остаётся запас VRAM под голосовой ввод. |
| ⚡ Быстрая альтернатива | Qwen3-Coder-30B-A3B | ✅ | ❌ | Чемпион одиночных задач (крупнейшая схема, быстрее всех, минимум VRAM), но в многоходовом чате ломается — выдаёт вызовы инструментов текстом. Кандидат №2 только если при self-host наладить парсер tool-call (--tool-call-parser в vLLM) и перепроверить многоходовость. |
| ⚠️ Не для прода | Llama-3.3-70B / Mistral-Small-24B / gpt-oss-120B | ❌ | ❌ | На малых задачах в порядке, но рассыпаются на масштабе (пустая схема, выдуманный отчёт) или в чате (потеря контекста). |
Кандидаты (все влезают в 96 ГБ)
Бюджет — одна карта класса NVIDIA RTX PRO 6000 (96 ГБ). Все модели в него помещаются с тем или иным квантованием.
| Модель | Тип / активных | Квант на 96 ГБ | Заметка |
|---|---|---|---|
| Qwen3-Coder-30B-A3B | MoE / 3B | FP8 ~30 / INT4 ~16 ГБ | агентно-кодовая, очень лёгкая |
| Qwen3-Next-80B-A3B | MoE / 3B | INT4 ~45 ГБ | широкие общие знания |
| GLM-4.5-Air | MoE / 12B | INT4 ~55 ГБ | агентный профиль |
| gpt-oss-120B | MoE / 5B | MXFP4 ~61 ГБ | open-weights от OpenAI |
| Llama-3.3-70B | dense / 70B | FP8 ~70 / INT4 ~40 ГБ | зрелый tool-calling |
| Qwen3-32B | dense / 32B | FP8 ~32 ГБ | — |
| Mistral-Small-3.2-24B | dense / 24B | FP8 ~24 / INT4 ~12 ГБ | лёгкая |
Как мы тестировали
Четыре типа задач — от простого выбора инструмента до сборки крупного процесса и живого диалога. Результат сверяли не по словам модели, а по факту в базе данных: что реально создалось, привязалось и описалось.
- Выбор инструмента — типовые запросы на чтение плюс один off-topic: выбирает ли модель правильный инструмент и не срывается ли в болтовню.
- Простой сценарий создания — один промпт собирает диаграмму, задачи, роли с назначением, документ с привязкой и описания (~15 вызовов, нужно прокидывать
idмежду ними). - Мега-процесс — «Выдача потребительского кредита» на 20–30 элементов: шлюзы, ветвления, цикл доработки, роли, документы, описания.
- Многоходовая переписка — процесс собирается за 5 сообщений подряд, как в реальном чате. Проверяем, что модель не теряет контекст (правит ту же диаграмму, помнит
id) и в конце верно пересказывает собранное.
Что показал прогон
На простом сценарии хороши почти все — 5 из 8 моделей чисто проходят цепочку из ~15 вызовов. Кажется, можно брать любую. Но это и есть ловушка.
На масштабе поле резко разделилось. Крупную валидную схему (33 и 38 узлов) собрали и полностью связали (роли, документы, описания) только Qwen3-Coder-30B и Qwen3-Next-80B. Остальные сорвались:
- Llama-3.3-70B — схема осталась пустой (только стартовое событие), но модель «назначила роли» и «проставила описания» на несуществующие элементы → висящие связи и битая диаграмма.
- Mistral-Small-24B — схема пустая, но в ответе бодро отчиталась: «создал 22 задачи, 4 шлюза, 13 потоков». Чистая галлюцинация успеха.
Главный вывод по масштабу
На малой задаче «модель-ломака» неотличима от хорошей. Реальный тест — крупная правка диаграммы с длинным массивом операций. Его потянули только MoE-модели Qwen.
В многоходовом чате произошёл главный разворот. Победитель одиночных тестов Qwen3-Coder-30B сломался: в диалоге из нескольких сообщений выдавал вызовы инструментов простым текстом (<function=…>) и ничего не создавал — модель чувствительна к формату tool-call и в многоходовом режиме деградирует. Qwen3-Next-80B оказалась устойчива и довела процесс до конца с верным восстановлением состояния. Для чата (а он всегда многоходовый) это решающий критерий.
Скорость на одной карте
Локально скорость decode упирается в память: tok/s ≈ ПСП / (активные_параметры × байт). У MoE активных параметров мало, поэтому они в 3–8 раз быстрее dense-моделей при сопоставимом качестве. Оценка для vLLM/SGLang, FP8, контекст ~8К:
| Модель | Активных | decode tok/s (1 поток) | Простой ход | Мега-процесс |
|---|---|---|---|---|
| Qwen3-Coder-30B | MoE 3B | ~140–200 | ~1–2 с | ~12–20 с |
| Qwen3-Next-80B | MoE 3B | ~120–180 | ~1–2 с | ~15–25 с |
| gpt-oss-120B | MoE 5B | ~120–190 | ~1–2 с | — |
| GLM-4.5-Air | MoE 12B | ~70–110 | ~2–3 с | ~25–40 с |
| Mistral-Small-24B | dense 24B | ~55–80 | ~2–4 с | — |
| Qwen3-32B | dense 32B | ~40–55 | ~3–5 с | ~40–70 с |
| Llama-3.3-70B | dense 70B | ~18–28 | ~4–8 с | — |
Пропускная способность — не узкое место
При 2–3 одновременных чатах карта не упирается ни у одной модели: continuous batching даёт агрегат в разы выше однопоточного. Точные цифры под ваше железо снимаются 5-минутным прогоном vllm bench.
Что учесть при self-host
Несколько настроек self-host-сервера, которые стоит выверить до продакшена:
- Настройте парсер tool-call под выбранную модель (
--tool-call-parserв vLLM) — иначе вызовы инструментов могут уходить текстом, и чат перестанет выполнять действия. - Подстройте системный промпт под модель: формулировки, требующие явного вызова инструментов и перечитывания состояния перед правкой, заметно стабилизируют поведение на крупных процессах.
Как переключить модель
Параметры задаются в настройках приложения (раздел AI) и применяются без перезапуска:
| Параметр | Что задаёт | Пример |
|---|---|---|
bpmnAiCompletionBaseUrl | Базовый URL OpenAI-совместимого эндпоинта | http://10.0.0.5:8000/v1 |
bpmnAiCompletionModel | Имя модели на этом эндпоинте | Qwen3-Next-80B-A3B |
План внедрения
Поднять Qwen3-Next-80B-A3B (vLLM, INT4) на карте 96 ГБ — VRAM хватает с запасом, рядом помещается голосовой ввод. Параллельно можно проверить Qwen3-Coder-30B с корректным парсером tool-call: если многоходовость наладится, это будет более быстрый и лёгкий вариант №1.
Условия прогона
Сравнение выполнено по одному прогону на задачу через прокси-цепочку (абсолютная латенси завышена транспортом; локально модели быстрее). Эталоном качества выступала внешняя модель, не локальный кандидат. Сверка — по факту в БД, а не по тексту ответа модели.
Связанная документация
- База знаний AI-чата (RAG) — как чат отвечает по вашим справочным документам
- Конфигурация системы — настройки приложения и ENV-переменные