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

Включение и подключение модели

Около 8 мин

Настройка AI-ассистента (чат)

AI-ассистент StormBPMN — это чат, встроенный в приложение. Он умеет читать ваши диаграммы, процессы, роли и документы, отвечать на вопросы по базе знаний, создавать и редактировать BPMN-диаграммы, назначать роли и привязывать документы — всё реальными вызовами инструментов, а не выдумывая результат.

Чтобы ассистент заработал, нужно две вещи: подключить языковую модель (LLM) и включить чат. Обе настройки — в этой статье.

Что эта статья НЕ описывает

Здесь мы не разворачиваем собственную модель (vLLM, Ollama, llama.cpp и т.п.) — про развёртывание self-hosted LLM есть отдельный раздел: Self-hosted LLM. В этой статье мы подключаем Storm к уже работающему эндпоинту модели — облачному (OpenAI, Anthropic, ProxyAPI и пр.) или вашему собственному — и настраиваем поведение чата.

Два уровня настроек

Как и вся конфигурация StormBPMN (см. Конфигурация системы), настройка чата делится на:

Уровень 1 — включение на сервере: переменная окружения MCP_ENABLED и лицензия с AI-модулем (enableAiFeatures). ENV требует перезапуска приложения; AI-модуль — соответствующей лицензии.

Уровень 2 — Админ-панель (тонкая настройка): тумблер «Включение ИИ-Чата», модель, токен, температура, промпты, порог качества. Применяются на лету, без перезапуска.


Шаг 1. Включение чата

Чтобы кнопка чата появилась у пользователя, должны выполняться все условия ниже.

ПараметрГдеОписаниеПо умолчанию
MCP_ENABLEDПеременная окружения (ENV)Включает все сервисы чата на бэкенде. Без неё чат полностью выключен.false
AI-модуль в лицензииЛицензия (enableAiFeatures)Чат, как и вся AI-функциональность, входит в AI-модуль. Без него API чата закрыто, кнопки нет.
Включение ИИ-ЧатаАдмин-панель → «🤖 AI-ассистент»Тумблер показа кнопки чата. Позволяет включать/выключать чат без правки лицензии и ENV.включён

Итого, чтобы чат был доступен пользователю:

  1. На бэкенде задано MCP_ENABLED=true (после изменения — перезапуск контейнера);
  2. Лицензия включает AI-модуль (enableAiFeatures);
  3. В админ-панели включён тумблер «Включение ИИ-Чата» (по умолчанию включён);
  4. Пользователь авторизован.

Кнопки чата нет, хотя `MCP_ENABLED=true`?

Проверьте по порядку: (1) лицензия содержит AI-модуль (enableAiFeatures); (2) в админ-панели, раздел «🤖 AI-ассистент», включён тумблер «Включение ИИ-Чата»; (3) вы авторизованы. Тумблер — самый быстрый способ скрыть или показать чат без изменения лицензии или ENV.


Шаг 2. Где настраивается модель

Все остальные настройки — в админ-панели, в разделе «🤖 AI-ассистент». Ключевые блоки для чата:

  1. Включение ИИ-Чата — тумблер показа кнопки чата (см. Шаг 1);
  2. Основная модель — модель для чтения и обычных ответов;
  3. Отдельная модель для правок (write)необязательно: можно направить ходы, меняющие данные, на более надёжную/мощную модель;
  4. Порог качества правок — авто-доработка диаграммы под линтер;
  5. Системные промпты — инструкции ассистенту (базовый + отдельный для правок).

В том же разделе ниже есть настройки «классических» AI-функций (автодополнение BPMN, анализ процессов, Assistants API) — они к чату напрямую не относятся.

Совет

Изменения в админ-панели применяются на следующем запросе в чат — перезапуск не нужен. Токен отображается как поле пароля (маскируется).


Основная модель

Минимально необходимый набор полей для работы чата.

ПолеТипОбяз.Описание
Формат APIвыборOPENAI или ANTHROPIC — какой «диалект» API у эндпоинта. Должен совпадать с URL и моделью.
Базовый URLстрокаАдрес эндпоинта модели без /v1 — путь дописывается автоматически.
Токенпароль✅¹API-ключ провайдера. Маскируется в интерфейсе.
МодельстрокаИдентификатор модели (например gpt-4.1, актуальный id Claude, или имя вашей self-hosted модели).
Температурачисло (дробное)Креативность ответа, 0.02.0. Пусто = параметр не отправляется (нужно для reasoning-моделей).
Лимит токеновчисло (целое)Максимум токенов в ответе. Пусто — модель использует свой дефолт (для ANTHROPIC применяется 4096).
Стриминг ответатумблерПечатать ответ по мере генерации. Включён по умолчанию; выключайте, только если шлюз не принимает потоковые ответы (см. Стриминг ответа).

¹ Токен может быть пустым только для self-hosted эндпоинта без авторизации.

Формат API: OPENAI или ANTHROPIC

Формат определяет, по какому контракту Storm общается с моделью:

  • OPENAI — OpenAI-совместимый API. Подходит для OpenAI, DeepSeek, OpenRouter, ProxyAPI, а также для большинства self-hosted решений (vLLM, Ollama, llama.cpp в режиме OpenAI-совместимости). Storm обращается по пути …/v1/chat/completions.
  • ANTHROPIC — нативный API Anthropic (Claude). Storm обращается по пути …/v1/messages, авторизация через заголовок x-api-key.

Формат, URL и модель должны быть согласованы

Нельзя указать формат OPENAI с URL Anthropic, или модель Claude с форматом OPENAI. Несовпадение даёт ошибки 400/404 от провайдера.

Базовый URL — без /v1!

Указывайте корень эндпоинта, без /v1 и без /chat/completions. Storm сам дописывает нужный путь в зависимости от формата.

Провайдер / случайБазовый URL
OpenAI напрямуюhttps://api.openai.com
Anthropic напрямуюhttps://api.anthropic.com
ProxyAPI — OpenAIhttps://api.proxyapi.ru/openai
ProxyAPI — DeepSeek / OpenRouterhttps://api.proxyapi.ru/openrouter
ProxyAPI — Anthropichttps://api.proxyapi.ru/anthropic
Self-hosted (OpenAI-совместимый)http://10.0.0.5:8000 (адрес вашего сервиса)

Температура

Управляет «творческостью»: ниже — стабильнее и предсказуемее, выше — разнообразнее. Для рабочего ассистента рекомендуется 0.2.

Reasoning-модели и температура

Некоторые модели (o-серия OpenAI, deepseek-reasoner и подобные «думающие») не принимают параметр температуры и возвращают 400, если он передан. Для таких моделей оставьте поле температуры пустым — тогда Storm вообще не отправит этот параметр.

Лимит токенов

Максимальная длина ответа модели.

  • OPENAI: если поле пустое — параметр не отправляется, действует дефолт модели.
  • ANTHROPIC: параметр обязателен; если поле пустое — Storm подставляет 4096.

Увеличьте значение, если ответы обрываются на полуслове.


Стриминг ответа

По умолчанию ассистент печатает ответ по мере генерации: пользователь видит первые слова через секунду-полторы и читает текст, пока модель ещё работает. Так работает чат «из коробки», и менять это не нужно.

Тумблер «Стриминг ответа» (раздел «🤖 AI-ассистент») существует для одного случая: ваш LLM-шлюз не принимает потоковые ответы и отвечает ошибкой 400. Такое встречается у корпоративных шлюзов и части self-hosted-прокси, которые проксируют модель, но не поддерживают Server-Sent Events.

Положение тумблераЧто уходит в запросеКак выглядит ответ
Включён (по умолчанию)"stream": trueТекст печатается постепенно, как в привычных чат-ботах.
Выключен"stream": falseОтвет появляется целиком, одним блоком, после ожидания.

Это ухудшает впечатление от чата

Без стриминга пользователь несколько десятков секунд смотрит на индикатор загрузки, а затем получает «простыню» текста разом. Выключайте тумблер, только если со включённым чат не работает вообще.

Что при этом не меняется:

  • Вызовы инструментов работают одинаково в обоих режимах. Подсказки вида «Ищу диаграммы…», «Редактирую…» приходят как обычно — они не зависят от потока текста.
  • Правки диаграмм, поиск, база знаний — без изменений.
  • Режим общий для основной и для отдельной write-модели: настраивать его дважды не нужно.

Параметр `stream_options` Storm не отправляет

Некоторые шлюзы жалуются именно на stream_options: {"include_usage": true}. Storm этот параметр не передаёт ни в одном из режимов. Если ваш шлюз сообщает о нём, запрос почти наверняка приходит к нему не от Storm — стоит свериться с сырым телом запроса в логах шлюза.

Долгие ответы и таймаут

С выключенным стримингом на каждый HTTP-запрос к модели действует таймаут чтения 180 секунд (лимит на один запрос, а не на весь ход: при работе с инструментами Storm делает несколько запросов подряд, и у каждого свой таймаут). Если модель на вашем оборудовании отвечает медленнее, ход завершится ошибкой. Со включённым стримингом такого ограничения нет.


Размышления (thinking)

Доступно в версиях после 6.6.6955.

«Размышления» — режим, в котором модель думает перед ответом, а ход мыслей стримится пользователю живым сворачиваемым блоком «Ход мыслей» над ответом: видно, что ассистент делает на долгих ходах, и почему он пришёл именно к такому результату. С первым словом ответа блок сворачивается.

Управляется настройкой «Размышления AI (thinking)» (bpmnAiChatThinking) в разделе «🤖 AI-ассистент». Это выбор из трёх значений:

ЗначениеКогда выбиратьЧто уходит в запросе
unsupported (по умолчанию)Провайдер не понимает параметр chat_template_kwargs — облачный OpenAI, большинство проксиПараметр не отправляется вовсе
disabledМодель на vLLM, но размышления не нужныenable_thinking: false — важно для Qwen3 и новее: иначе модель «думает» по умолчанию и тратит токены впустую
enabledМодель на vLLM, размышления нужныenable_thinking: true — ход мыслей стримится пользователю

Для отдельной write-модели есть парная настройка bpmnAiWriteThinking с теми же значениями. Она не наследуется от основной — если используете write-модель, задайте значение явно.

Ограничения

  • Работает только с форматом OPENAI поверх vLLM: облачный OpenAI отвергает chat_template_kwargs ошибкой 400 — для него оставьте unsupported.
  • enabled требует включённого тумблера «Стриминг ответа» (bpmnAiCompletionStream); в блокирующем режиме размышления игнорируются.
  • Цена: ответ становится дольше и дороже на reasoning-токены (порядка сотен токенов даже на простой вопрос). После включения понаблюдайте за латентностью вашего LLM-сервера.

Включайте после полного обновления

Включайте enabled только когда обновлены и бэкенд, и фронтенд до версии с поддержкой размышлений: старые сборки интерфейса не знают о потоке мыслей и могут показать его как часть обычного ответа. Значение по умолчанию (unsupported) это исключает.


Примеры подключения

ProxyAPI (российский прокси к зарубежным LLM)

ProxyAPIopen in new window даёт доступ к OpenAI / Anthropic / DeepSeek из РФ. Базовый URL зависит от провайдера, путь — /openai, /openrouter или /anthropic.

Важно про `/v1` и ProxyAPI

В официальной документации ProxyAPI базовый URL указан как https://api.proxyapi.ru/openai/v1 (с /v1) — так его ждёт OpenAI-клиент. В Storm /v1 писать НЕ нужно — приложение дописывает /v1/chat/completions само. То есть в поле «Базовый URL» вводите https://api.proxyapi.ru/openai (без /v1). То же правило для любого OpenAI-совместимого эндпоинта (vLLM, Ollama и т.п.).

OpenAI через ProxyAPI:

ПолеЗначение
Формат APIOPENAI
Базовый URLhttps://api.proxyapi.ru/openai
Модельgpt-4.1 (или другая OpenAI)
Токенключ из личного кабинета ProxyAPI

DeepSeek через ProxyAPI (идёт через /openrouter):

ПолеЗначение
Формат APIOPENAI
Базовый URLhttps://api.proxyapi.ru/openrouter
Модельdeepseek/deepseek-chat-v3.1
Токенключ ProxyAPI

Anthropic (Claude) через ProxyAPI:

ПолеЗначение
Формат APIANTHROPIC
Базовый URLhttps://api.proxyapi.ru/anthropic
Модельактуальный id Claude (см. док. Anthropic)
Токенключ ProxyAPI
Лимит токеновнапример 4096

OpenAI напрямую:

ПолеЗначение
Формат APIOPENAI
Базовый URLhttps://api.openai.com
Модельgpt-4.1
Токенключ OpenAI (sk-...)

Self-hosted OpenAI-совместимый эндпоинт (например, ваша модель за vLLM или Ollama):

ПолеЗначение
Формат APIOPENAI
Базовый URLhttp://10.0.0.5:8000 (ваш адрес)
Модельимя модели как её отдаёт сервис
Токенваш ключ или пусто (если без авторизации)

Развёртывание собственной модели — отдельная тема

Как поднять vLLM/Ollama, какие модели выбрать и как их обслуживать — см. отдельный раздел Self-hosted LLM. Здесь предполагается, что у вас уже есть рабочий OpenAI-совместимый эндпоинт, и мы лишь указываем на него Storm.


Отдельная модель для правок (write) — необязательно

Ходы, которые меняют данные (создать/изменить диаграмму, назначить роль, привязать документ), сложнее обычного чтения: слабые модели чаще ошибаются. Поэтому такие ходы можно направить на отдельную, более надёжную модель (например, облачную), оставив чтение на основной.

Блок «Отдельная модель для правок (write)» содержит те же поля, что и основная модель (Формат / Базовый URL / Токен / Модель / Температура / Лимит токенов), но все они необязательны.

Как работает наследование

  • Поле «Модель» — ключ активации. Если оно пустое, весь блок write игнорируется, и правки идут на основную модель.
  • Если «Модель» задана — write-ходы идут на write-модель, а любое пустое поле наследуется от основной (URL, токен, формат, температура, лимит — что не задали, берётся из основной модели).

Когда это полезно: основная модель — быстрая/дешёвая (в т.ч. self-hosted) для чтения, а правки — на более «умной» облачной модели для надёжности.


Порог качества правок

ПолеТипПо умолчаниюДиапазон
Порог качествачисло (дробное)8.00.010.0

После того как ассистент отредактировал диаграмму, Storm прогоняет её через собственный линтер качества (детерминированную проверку BPMN). Если оценка ниже порога, ассистент скрыто переделывает диаграмму под линтер — и только потом показывает ответ пользователю.

  • Выше порог (ближе к 10) — строже требования к качеству, чаще авто-доработка.
  • Ниже порог — мягче, реже вмешательство.

Системные промпты

Промпты — это инструкции, которые задают поведение ассистента. Их два, и они разделены по типу хода:

ПромптКогда применяетсяТип
Базовый системный промптХоды чтения / вопросы / уточнения (read)многострочный текст
Системный промпт для правок (write)Ходы, меняющие данные (write) — необязательныймногострочный текст

Как они взаимодействуют

  • На read-ходах действует базовый промпт.
  • На write-ходах базовый промпт полностью заменяется на write-промпт (он сфокусирован на исполнении правок и запрете «выдуманных» результатов).
  • Если write-промпт пустой — на write-ходах используется базовый.

Оба промпта редактируются прямо в админ-панели (поле «многострочный текст»). Под полем показывается счётчик символов и кнопка сохранения.

Промпты поставляются оптимизированными — менять не рекомендуется

Системные промпты тщательно настроены под поведение ассистента (off-topic-фильтр, работа с инструментами, анти-фабрикация, правила BPMN). Мы рекомендуем не менять их без необходимости — неаккуратная правка легко ломает работу чата.

Промпты могут перезаписываться при обновлении

Системные промпты обновляются вместе со StormBPMN (через миграции). Если вы изменили промпт под себя — при обновлении версии ваша правка может быть перезаписана нашей новой версией промпта. Поэтому: сохраняйте свою версию промпта отдельно (например, в своём репозитории/документе), чтобы после обновления при необходимости вернуть её вручную.


Диагностика (FAQ)

Провайдер возвращает 400 / 404
  • Базовый URL с /v1 на конце — уберите /v1, Storm дописывает путь сам.
  • Несовпадение формата — например OPENAI-формат с URL Anthropic. Сверьте Формат ↔ URL ↔ Модель.
  • Температура на reasoning-модели — оставьте поле температуры пустым (o-серия, deepseek-reasoner и др.).
  • Шлюз не принимает потоковый ответ — если в логах шлюза видно отказ на "stream": true, выключите тумблер «Стриминг ответа» (см. раздел выше).
Чат не отвечает, шлюз ругается на `stream` / `stream_options`

Выключите тумблер «Стриминг ответа» — Storm будет отправлять "stream": false и забирать ответ одним запросом. Ответы начнут приходить целиком после ожидания, но чат заработает.

Параметр stream_options Storm не отправляет никогда, ни в потоковом режиме, ни в обычном.

Включил размышления — ничего не изменилось или ошибка 400

Проверьте по порядку: (1) формат API — OPENAI, модель работает на vLLM (облачный OpenAI отвечает 400 на chat_template_kwargs — верните unsupported); (2) включён тумблер «Стриминг ответа» — без него размышления игнорируются; (3) обе части приложения (бэкенд и фронтенд) обновлены до версии после 6.6.6955; (4) если правки идут через отдельную write-модель — у неё своя настройка bpmnAiWriteThinking, она не наследуется.

ANTHROPIC: ошибка про max_tokens

Для формата ANTHROPIC лимит токенов обязателен. Если поле пустое, Storm подставит 4096; при ошибке — задайте лимит явно (например 4096).

Ответы обрываются на середине

Увеличьте Лимит токенов в настройках модели.

Кнопки чата нет в интерфейсе

Проверьте: (1) MCP_ENABLED=true на бэкенде и контейнер перезапущен; (2) лицензия содержит AI-модуль (enableAiFeatures); (3) в админ-панели, раздел «🤖 AI-ассистент», включён тумблер «Включение ИИ-Чата»; (4) вы авторизованы.

Изменил настройки — не применилось

Настройки модели/промптов из админ-панели применяются на следующем запросе в чат, перезапуск не нужен. А вот MCP_ENABLED (ENV) требует перезапуска контейнера.