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

Вложения файлов и импорт схем

Около 4 мин

Вложения файлов в AI-чат и импорт схем

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

К сообщению в AI-чате можно прикладывать файлы — кнопкой-скрепкой или перетаскиванием прямо в панель чата (до 3 файлов на одно сообщение). Дальше зависит от типа файла:

  • Документы (txt, pdf, docx и др.) — Storm извлекает из них текст, и ассистент отвечает по содержимому: «сделай диаграмму по этому регламенту», «сравни процесс с этой инструкцией».
  • Схемы (BPMN, draw.io, Visio) — на карточке вложения появляется кнопка, которая одним нажатием превращает схему в диаграмму Storm.

Функция по умолчанию выключена и включается тумблером в админ-панели (см. Шаг 3).

Два класса файлов

КлассРасширенияКто обрабатываетЛимит размера
Документы.txt .md .markdown .csv .json .doc .docx .pdfСервис storm-media (см. Шаг 2)настройка chatFileMaxBytes, по умолчанию 25 МБ
Схемы.bpmn .drawio .vsdxБэкенд Storm сам, storm-media не нуженфиксированно 10 МБ

Как storm-media разбирает документы:

  • .txt / .csv / .json — как текст; .md / .markdown — как markdown;
  • .docx — конвертация в markdown;
  • .doc — конвертация через LibreOffice (headless, встроен в образ);
  • .pdf — текстовый слой; страницы без текстового слоя (сканы) уходят в OCR (tesseract, русский + английский из коробки).

GPU для документов не нужен

Извлечение текста из документов работает на CPU — GPU в storm-media нужен только локальному распознаванию речи (Whisper). Если голосовой ввод вам не нужен, storm-media можно развернуть на обычной машине без видеокарты.

Как это работает

Браузер (скрепка / drag&drop, ≤3 файлов)
   │  файл
   ▼
Бэкенд Storm ──► S3 (bucket uploads)
   │
   │  POST /v1/jobs/from-url  { sourceUrl: <presigned-ссылка на S3, TTL 15 мин> }
   ▼
storm-media ──── скачивает файл из S3 сам ────► извлекает текст
   ▲                                                │
   └────────── бэкенд поллит статус до READY ◄──────┘

Текст вложения подмешивается в контекст хода (бюджет символов настраивается)

Две важные детали этой схемы:

  • Файл не проходит через бэкенд в storm-media. Бэкенд кладёт его в S3 и передаёт storm-media presigned-ссылку — storm-media скачивает файл самостоятельно. Поэтому S3 должен быть доступен с хоста storm-media (см. Шаг 1).
  • Схемы (.bpmn / .drawio / .vsdx) в storm-media не отправляются вовсе — бэкенд разбирает их сам. Импорт схем работает даже там, где storm-media не развёрнут (но тогда документы-вложения обрабатываться не будут).

Импорт схем в модели

На карточке приложенной схемы появляется кнопка — подпись зависит от формата и честно отражает, что произойдёт:

ФорматКнопкаЧто происходит
.bpmn«Загрузить как модель»Файл сохраняется тем же путём, что диалог «Загрузить BPMN»: раскладка один-в-один, версия №1, проверка качества, индексация поиска. Ничего не перерисовывается.
.drawio«Собрать модель по схеме»Storm детерминированно разбирает фигуры и дорожки схемы; если уверенно опознал — LLM не участвует. Иначе схему восстанавливает LLM.
.vsdx (Visio)«Собрать модель по схеме»Аналогично draw.io: сначала детерминированный разбор по фигурам-мастерам, LLM — только как запасной путь.

Повторное нажатие кнопки не создаёт дубликат — возвращается уже созданная диаграмма; на карточке остаётся ссылка на неё.

Ограничения «Собрать модель по схеме»

  • Если схему восстанавливала LLM, результат нужно проверить глазами: модель может ошибиться в количестве элементов или подписях. Дорожки (lanes) на LLM-пути теряются.
  • Дорожки из Visio не переносятся: принадлежность фигуры полосе там задана геометрией, а не структурой файла.
  • В детерминированном разборе draw.io и в прямой загрузке .bpmn дорожки сохраняются.

Шаг 1. Требования

УсловиеГдеКомментарий
MCP_ENABLED=true + AI-модуль в лицензииENV / лицензияВложения — часть AI-чата (см. Включение чата)
Подключённая LLMАдмин-панельНужна для чата вообще и для LLM-пути импорта схем
Сервис storm-mediaОтдельный хост/контейнерТолько для документов. Схемы работают без него
S3 доступен с хоста storm-mediaВаша сетьstorm-media скачивает файлы по presigned-ссылкам

S3 и переменная `S3_EXTERNAL_ENDPOINT`

Presigned-ссылки строятся от внешнего адреса S3 — property s3.externalEndpoint (ENV S3_EXTERNAL_ENDPOINT); если он не задан, используется основной s3.endpoint (ENV S3_ENDPOINT / MINIO_ENDPOINT). Проверьте, что именно этот адрес резолвится и открыт с машины storm-media — это самая частая причина «файл вечно обрабатывается».

Шаг 2. storm-media

Развёртывание сервиса описано в статье «Голосовой ввод (storm-media)» — это тот же контейнер: если голосовой ввод у вас уже работает, дополнительно разворачивать ничего не нужно, обработка документов уже внутри (tesseract и LibreOffice встроены в образ, отдельных секретов не требуется).

Подключение бэкенда к storm-media — те же две настройки админ-панели, что и у голосового ввода: stormMediaBaseUrl и stormMediaToken (раздел «🤖 AI-ассистент»). Если они не заполнены, документы-вложения обрабатываться не будут (пользователь увидит «Вложения в чате не настроены»); схемы продолжат работать.

Тонкая настройка документного конвейера — через ENV storm-media (дефолты разумные, менять обычно не нужно): OCR_LANGUAGES (по умолчанию rus+eng), MAX_PDF_PAGES, DOC_CONCURRENCY и др. — см. .env.example образа.

Порядок обновления: сначала storm-media, потом бэкенд

Поддержка .json и .csv появилась в storm-media одновременно с фичей вложений. Если обновить бэкенд, оставив старый storm-media, эти форматы будут получать ошибку «Неподдерживаемый формат». Обновляйте контейнер storm-media до (или вместе с) обновлением основного приложения.

Шаг 3. Включить в админ-панели

Раздел «🤖 AI-ассистент», подгруппа настроек файлов. Применяются на лету, без перезапуска.

Настройка (ключ)ТипПо умолчаниюОписание
Файлы в чате (chatFileUploadEnabled)тумблервыключеноПоказывает скрепку и включает приём вложений
Максимальный размер (chatFileMaxBytes)число26214400 (25 МБ)Потолок размера одного файла в байтах. Для схем (.bpmn/.drawio/.vsdx) независимо действует свой потолок 10 МБ
Бюджет символов на ход (chatFileContextCharBudget)число150000Сколько символов из вложений суммарно подмешивается в один ход. Что не влезло — обрезается с явной пометкой в промпте, ассистент об этом знает

Итоговый чек-лист:

  1. Чат работает (LLM подключена, MCP_ENABLED=true, лицензия с AI-модулем);
  2. storm-media запущен, GET /ready отвечает успешно, stormMediaBaseUrl и stormMediaToken заполнены (для документов);
  3. Адрес S3 из presigned-ссылок доступен с хоста storm-media;
  4. Включён тумблер «Файлы в чате» — в поле ввода появилась скрепка.

Устранение неполадок

СимптомПричинаРешение
Скрепки нет в чатеТумблер chatFileUploadEnabled выключен или сам чат недоступенВключите тумблер; проверьте условия работы чата
«Вложения в чате не настроены»Пустые stormMediaBaseUrl / stormMediaTokenЗаполните обе настройки (см. Голосовой ввод, Шаг 3–4)
Документ «вечно обрабатывается» или падаетstorm-media не может скачать файл из S3Проверьте доступность адреса из S3_EXTERNAL_ENDPOINT (или S3_ENDPOINT) с хоста storm-media; смотрите логи storm-media
.json / .csv → «Неподдерживаемый формат»Старый образ storm-mediaОбновите контейнер storm-media
«Файл слишком большой»Превышен chatFileMaxBytes (документы) или 10 МБ (схемы)Уменьшите файл или поднимите настройку (для документов)
Скан-PDF распознался с ошибкамиКачество скана / язык вне rus+engДобавьте язык в OCR_LANGUAGES storm-media; для плохих сканов OCR не всесилен
Из схемы собралась «не та» диаграммаСхему восстанавливала LLM (кнопка «Собрать модель по схеме»)Проверьте и поправьте результат в редакторе; это ожидаемое поведение LLM-пути