Программное обеспечение "Диалоговая платформа Рантел"

1. Краткое описание продукта

Диалоговая платформа Рантел — это коробочное решение, которое устанавливается в контур (изолированную сеть) заказчика, для автоматизации коммуникаций с клиентами на основе искусственного интеллекта. Платформа обеспечивает анализ телефонных разговоров и текстовых диалогов, детекцию автоматизированных звонков, синтез речи, интеллектуальный поиск по базе знаний, голосовых роботов с визуальным редактором сценариев, ИИ-агентов и автоматизацию принятия решений в системах распределения обращений.

Встроенная мультидоменность позволяет одному заказчику вести работу по филиалам, подразделениям, регионам, офисам и франшизам в одной установке — с изоляцией данных и разделением прав по доменам (администратор платформы, администратор домена, пользователь).


2. Развернутое описание продукта

Диалоговая платформа Рантел представляет собой микросервисную систему, построенную на плагинной архитектуре на основе Debian пакетов, которая обеспечивает гибкое масштабирование и расширение функциональности. Платформа реализует комплексную обработку голосовых и текстовых коммуникаций с использованием современных технологий машинного обучения и обработки естественного языка.

Архитектурные особенности

Система построена на модульной архитектуре, состоящей из следующих ключевых компонентов:

  • API Service — основной сервер приложений, обеспечивающий REST API, Server-Sent Events потоковая передача (SSE) и WebSocket соединения для взаимодействия в реальном времени
  • Плагинная система — динамически загружаемые модули обработки ИИ, каждый из которых реализует специфическую функциональность (транскрибация, генерация текста, детекция роботов, синтез речи)
  • Система управления очередями — асинхронная обработка задач через собственную очередь на Redis с выделенными очередями для различных типов операций
  • Система лицензирования — гибкое управление доступом к функциональности через каналы лицензирования
  • База знаний с RAG — система поиска по документам с использованием векторных эмбеддингов и полнотекстового поиска

Технологический стек

  • Серверная часть: Python 3.11+, aiohttp, FastAPI
  • Очередь задач: собственная реализация на Redis
  • База данных: PostgreSQL 14+ с расширением pgvector для векторного поиска
  • AI/ML: LLM, ASR, TTS, LaBSE и другие модели векторного представления текста (RAG). Ускорение — Vulkan
  • Model Storage: S3-совместимое хранилище (Яндекс.Облако Object Storage, MinIO, или локальное развертывание)
  • Развёртывание: systemd сервисы для Linux, Debian пакеты (.deb)

3. Функциональность

3.1. Анализ коммуникаций

Анализ телефонных разговоров:

  • Автоматическая транскрибация речи в текст с определением ролей говорящих (оператор/клиент)
  • Анализ качества обслуживания: приветствие, представление, уточнение деталей, договоренность о следующих шагах
  • Определение причины завершения разговора
  • Анализ тональности разговора (позитивная/нейтральная/негативная)
  • Выявление нарушений в работе оператора
  • Чек-листы в реальном времени: контроль выполнения скриптов операторами в реальном времени с автоподсказками

Анализ текстовых диалогов:

  • Обработка сообщений из эл. почты, чатов, мессенджеров, соцсетей
  • Умная маршрутизация обращений по отделам на основе ИИ анализа

3.2. Детекция автоматизированных звонков

  • Определение роботизированных звонков на основе анализа аудио признаков
  • Классификация типов автоматизированных систем: робот, автоответчик, голосовое меню (IVR), гудок, голосовой ассистент
  • Анализ в реальном времени: прекращение автообзвона при детекции роботов
  • Пакетная обработка аудио файлов (пакетная обработка моделей)
  • Дообучение моделей на размеченных данных заказчика

3.3. Интеллектуальный поиск по базе знаний (RAG)

  • Полнотекстовый поиск по документам с использованием PostgreSQL tsvector
  • Векторный поиск с использованием эмбеддингов (SentenceTransformer)
  • Гибридный поиск, комбинирующий полнотекстовый и векторный методы
  • Контекст для LLM: автоматическое форматирование результатов для генерации ответов
  • Изоляция данных: поддержка множественных баз знаний

3.4. Генерация текста на основе языковых моделей

  • Генерация ответов на основе промптов с использованием языковых моделей (LLM)
  • Потоковая генерация ответа с показом в реальном времени через SSE
  • Поддержка контекста из RAG системы для генерации ответов на основе базы знаний
  • Автоответы клиентам: персонализированные ответы
  • Построение отчетов: автоматическая генерация аналитических отчетов

3.5. Синтез речи (TTS)

  • VITS — основной движок синтеза речи, входит в состав основных плагинов платформы
  • Обучение собственных голосов на базе движка VITS
  • Silero TTS — сторонний голосовой движок (устанавливается как кастомный плагин при наличии у клиента лицензии на него)
  • Через кастомные плагины можно подключать и другие голоса и модели синтеза речи
  • Многоязычность: поддержка русского и других языков
  • Различные варианты голосов (мужские/женские)
  • Потоковая генерация и расстановка ударений

3.6. NLU система (интеллектуальная обработка)

  • Классификация текстовых и аудио данных через модели детекции
  • Классификация интентов, анализ эмоций
  • Детекция роботов/автоответчиков
  • Поддержка hot-reload и кеширования моделей
  • Загрузка NLU моделей через интерфейс пользователя (ZIP-архивы с .pth + config.json)

3.7. Голосовой робот и ИИ-агенты

  • Визуальный редактор сценариев: построение диалоговых деревьев через drag-and-drop интерфейс
  • ИИ-агенты: создание интеллектуальных агентов на базе LLM и базы знаний
  • Интеграция с телефонией через SIP-транк. Возможна интеграция через кастомные плагины (не входят в поставку) через ESL, uniMRCP и другие протоколы
  • Автообзвон: массовые исходящие звонки по списку номеров
  • Интеграция с Telegram, MAX, веб-чатом и VK — нативно или через плагины расширения

4. Связь между модулями

4.1. Архитектура модулей

Система организована в несколько ключевых модулей:

  • ai_handlers/ — слой эндпоинтов (REST API, SSE, WebSocket)
  • plugins/ — модули обработки ИИ (whisper, llm_chat, vosk_asr, robot_detector, rag_search, voice_bot, streaming_tts и др.)
  • core/ — ядро системы (базовые интерфейсы, лицензирование, маппинг функций, model_registry, auto_balancer, nlu_manager)
  • utils/ — вспомогательные утилиты
  • admin/ — личный кабинет клиента (веб-интерфейс)
  • vendor_cabinet/ — вендорский кабинет (управление клиентами, лицензиями, обучение моделей)
  • voice_bot/ — ядро обработки голосовых сценариев

4.2. Поток обработки запроса

HTTP/WebSocket Request
    ↓
core/routes.py (маршрутизация)
    ↓
ai_handlers/sse_*.py или websocket_handler.py
    ↓
core/license_validator.py (проверка лицензии)
    ↓
task_workers.py (постановка задачи в очередь Redis)
    ↓
Redis Queue (постановка в очередь)
    ↓
Воркер очереди Redis (обработка)
    ↓
core/plugin_discovery.py → core/feature_mapping.py (получение плагина)
    ↓
plugins/*/handler.py (обработка ИИ моделью)
    ↓
Результат (SSE/WebSocket ответ)

5. Особенность плагинной структуры

Платформа построена на полностью модульной плагинной архитектуре на основе Debian пакетов, где каждая ИИ модель реализована как независимый плагин. Все плагины наследуются от единого базового класса BaseAIPlugin (или CompositeAIPlugin для составных).

5.1. Ключевой принцип: 1 плагин = 1 модель

Каждый плагин использует ровно одну модель (default_model). Для использования другой модели — создается отдельный плагин или изменяется default_model в config.json.

5.2. Установленные плагины

  • whisper — транскрибация речи (ASR), канал asr
  • llm_chat — LLM (CPU/Vulkan), канал llm
  • robot_detector — детекция роботизированных звонков (NLU audio-модель), канал nlu
  • voice_bot — голосовой робот и сценарии, канал scenario
  • vosk_asr / streaming_asr — распознавание речи, канал asr
  • vits_tts / streaming_tts — синтез речи (VITS, основной плагин), канал tts
  • call_analysis — комплексный анализ звонков (композитный: ASR + LLM)
  • rag — поиск по базе знаний
  • pii_filter / pii_defender — защита и маскирование персональных данных
  • dialog_manager — менеджер диалогов
  • training — обучение моделей детекции, канал nlu

5.3. Динамическая загрузка плагинов

Система поддерживает два типа плагинов:

  1. Предустановленные плагины — находятся в директории plugins/, входят в состав платформы.
  2. Кастомные плагины — устанавливаются отдельно из .deb пакетов в директорию /opt/runtel/robot/installed_plugins/.

PluginManager автоматически сканирует обе директории и загружает все плагины при старте приложения. Управление моделями осуществляется через двухуровневую систему: конфигурация в config.json плагина + активация через базу данных.


6. Административная панель

Система включает два веб-кабинета: Личный кабинет клиента (админ-панель) и Вендорский кабинет для поставщика платформы.

6.1. Личный кабинет клиента (админ-панель)

Веб-интерфейс для конечных пользователей платформы. Доступен по адресу http://host:8000 или через Nginx: http://host/admin/.

Дашборд и Мониторинг

  • Статус системы: Отображение состояния основных сервисов (API, База данных, Redis, воркеры очередей).
  • Мониторинг GPU: Использование памяти, загрузка GPU, автобалансировка.
  • Монитор задач: Список текущих и завершенных задач очереди, прогресс, логи.

Управление пользователями и безопасностью

  • Пользователи: Создание и редактирование учетных записей администраторов и операторов.
  • Роли и права доступа: Гибкая настройка разрешений (RBAC) для ограничения доступа к определенным разделам и функциям.
  • Лицензирование: Просмотр статуса лицензии, активных каналов и сроков действия. Загрузка новых лицензионных ключей. Привязка к оборудованию (отпечаток оборудования).

Управление ИИ моделями и плагинами

  • Плагины: Просмотр списка установленных плагинов, их статуса и версий. Возможность включения/отключения плагинов.
  • Модели: Управление загруженными моделями (ASR, LLM, NLU и др.). Синхронизация с объектным хранилищем, мониторинг использования памяти.
  • Маппинг функций: Назначение конкретных плагинов для выполнения системных функций.

Голосовой робот и ИИ-агенты

  • Визуальный редактор сценариев: Перетаскивание конструктор диалоговых деревьев с поддержкой узлов: приветствие, распознавание, NLU обработка, TTS, переключение на оператора.
  • ИИ-агенты: Создание и настройка интеллектуальных агентов на базе LLM и базы знаний.
  • Интеграции: Telegram, MAX, веб-чат и VK — нативно или через плагины расширения. Телефония через SIP-транк.
  • TTS кэш: Управление предгенерированными аудио-фразами для голосового робота.
  • Результаты сценариев: Просмотр аналитики по выполненным звонкам.

База знаний (RAG)

  • Управление документами: Загрузка, удаление и просмотр документов в базе знаний.
  • Настройки поиска: Конфигурация параметров векторного и гибридного поиска.
  • Тестирование поиска: Инструмент для проверки релевантности выдачи по поисковым запросам.

NLU и классификация

  • NLU модели: Загрузка и управление моделями классификации (модели классификации). Поддержка моделей для текста и аудио.
  • Тестирование: Инструменты для проверки классификации и детекции роботов.

Инструменты тестирования и отладки

  • Чат с LLM: Интерактивный интерфейс для тестирования ответов языковой модели и проверки промптов.
  • Транскрибация: Загрузка аудиофайлов для проверки качества распознавания речи.
  • Комплексный анализ звонков: Тестирование полной цепочки обработки (Транскрибация → Анализ → Результат).
  • Детекция роботов: Массовое тестирование модели на наборах данных (пакетное тестирование) с генерацией отчетов точности.
  • Тест голоса: Проверка TTS синтеза с различными моделями и настройками.
  • WebSocket тестирование: Отладка WebSocket API (JSON-RPC 2.0).

6.2. Вендорский кабинет

Административный интерфейс для поставщика платформы. Доступен по адресу http://host:8001.

  • Управление клиентами: Создание, редактирование, деактивация клиентов.
  • Лицензирование: Генерация лицензионных ключей, настройка лимитов по каналам.
  • Обучение моделей: Обучение моделей детекции роботов и NLU на аудио-данных.
  • Мониторинг: Отслеживание использования платформы клиентами.

7. Интеграция

Диалоговая платформа Рантел поддерживает множество способов интеграции.

7.1. Интеграция с Коммуникационной платформой Рантел

Автоматический анализ всех входящих и исходящих звонков для контроля качества обслуживания. Контроль в реальном времени выполнения чек-листов оператора.

7.2. Три протокола API

  • REST API — традиционный запрос-ответ для синхронных операций.
  • SSE (Server-Sent Events) — потоковая передача прогресса и результатов в реальном времени с автоматическим переподключением.
  • WebSocket (JSON-RPC 2.0) — двунаправленная связь для интерактивных приложений.

7.3. Каналы интеграции

  • Мессенджеры и веб-каналы: Интеграция с Telegram, MAX, веб-чатом и VK — нативно или через плагины расширения.
  • Телефония: Интеграция с телефонией через SIP-транк. Возможна интеграция через кастомные плагины (не входят в поставку) через ESL, uniMRCP и другие протоколы.

7.4. Внешние LLM провайдеры

Поддержка облачных сервисов через коннекторы: Яндекс SpeechKit и другие облачные API через коннекторы. Клиент оплачивает только коннектор — вычислительные мощности платформы не расходуются.


8. Описание безопасности и лицензирования

8.1. Система лицензирования

Платформа использует гибкую систему лицензирования на основе раздельных каналов:

  • scenario — бизнес-логика, оркестрация диалогов
  • asr — распознавание речи (ASR)
  • tts — синтез речи (TTS)
  • llm — генерация ответов AI, RAG, анализ текста
  • nlu — классификация, детекция роботов, анализ эмоций
  • external_llm — коннекторы к внешним облачным LLM (без нагрузки на ресурсы платформы)

Каждый канал определяет count — количество параллельных задач, а также overflow_mode (queue, throttle, reject). Лицензия привязана к оборудованию через отпечаток оборудования и подписывается с помощью Rutoken (RSA-4096).

8.2. 5-уровневая система защиты

  • Уровень 1 — Cython компиляция: Критичные модули компилируются в бинарный код.
  • Уровень 2 — PyInstaller: Основное приложение упаковывается в бинарный исполняемый файл.
  • Уровень 3 — Проверка целостности: Автоматическая проверка хэшей файлов при запуске.
  • Уровень 4 — Runtime проверки: Каждый вызов эндпоинта защищен декоратором @require_license.
  • Уровень 5 — Защита воркеров: Проверка токенов перед запуском воркеров.

8.3. Безопасность данных

  • Локальное развёртывание: Все данные обрабатываются локально, без передачи во внешние облачные сервисы.
  • Изоляция моделей: Все модели машинного обучения хранятся в S3 хранилище в контуре заказчика.
  • S3 в закрытом контуре: Хранилище моделей может быть развернуто в изолированной сети без доступа к интернету.
  • Bearer authentication: Аутентификация по JWT-токенам для всех API запросов.
  • Rate Limiting: Ограничение запросов и запись статистики использования.

8.4. Наблюдаемость и мониторинг

  • Метрики: Сбор числовых показателей производительности, загрузка воркеров и GPU.
  • Трассировка: Глубокая отладка распределённых запросов.
  • Логирование (structlog): Структурированные JSON-логи для анализа инцидентов и аудита.

9. Разворачивание продукта

9.1. Системные требования

Операционная система: Linux (Debian 12 / Ubuntu 20.04+) — только Linux

Минимальные требования: CPU 4 ядра, RAM 8 GB, Диск 20 GB

Рекомендуемые требования: CPU 8 ядер, RAM 16 GB, SSD 50 GB. GPU — опционально: любой графический процессор с поддержкой Vulkan (AMD, Intel, отечественные и др.).

Зависимости: Python 3.11+, PostgreSQL 13+, Redis 6+, Nginx. GPU-ускорение реализовано на открытом стандарте Vulkan.

9.2. Сервисы платформы

Платформа состоит из systemd-сервисов. Фоновые задачи выполняются воркерами через очередь на Redis (без сторонних брокеров):

  • dialog-llm (порт 8080) — основной REST API + PluginManager
  • dialog-llm-admin (порт 8000) — веб-интерфейс личного кабинета
  • dialog-llm-worker-speech — фоновый воркер очереди речи (ASR + TTS)
  • dialog-llm-worker-llm — фоновый воркер очереди LLM-анализа
  • dialog-llm-worker-nlu — фоновый воркер очереди детекции и обучения
  • dialog-llm-worker-system — системная очередь задач
  • runtel-tinypbx — телефония SIP/RTP
  • Движки: dialog-llm-chat (8100, LLM), dialog-vosk-asr (8106, ASR CPU), dialog-vits-tts (8104, TTS), dialog-robot-detector (8103, NLU). Опционально Vulkan: dialog-llm-chat-vulkan (8100), dialog-whisper-vulkan (8101)

9.3. Установка продукта

Продукт поставляется в виде Debian пакетов (.deb) и разворачивается на сервере под управлением Linux. Ниже приведена пошаговая инструкция.

Шаг 1. Убедиться, что сервер соответствует требованиям

КомпонентТребованиеПримечание
ОСDebian 12 / Ubuntu 20.04+
CPU4+ ядра (реком. 8)Полная работа без GPU
GPUОпциональноЛюбой GPU с поддержкой Vulkan (AMD/Intel/отечественные)
Python3.11+Поставляется с Debian 12

Дополнительно на сервере должны быть установлены: PostgreSQL 13+, Redis 6+, Nginx.

Шаг 2. (Опционально) Драйвер GPU для Vulkan

Для базовой работы на CPU GPU не нужен. Для опционального ускорения установите штатный драйвер вашего GPU с поддержкой Vulkan (любой вендор — AMD/Intel/отечественные). Проверить поддержку Vulkan:

vulkaninfo --summary

Шаг 3. Установить системные зависимости

apt-get install -y jq

Шаг 4. Движки инференса

Движки поставляются в составе пакетов и работают на CPU: LLM, ASR (Vosk), тяжёлая транскрибация, TTS (ONNX). Для опционального ускорения на Vulkan подключаются дополнительные службы (runtel-plugin-llm-vulkan, runtel-plugin-whisper-vulkan) — локально на сервере или на отдельном вычислительном узле (обращение по внутреннему API). Три схемы размещения — см. §9.5.

Шаг 5. Собрать deb-пакеты

Этот шаг выполняется на сервере сборки (не на целевом сервере).

# Основная платформа
cd /opt/runtel/robot
dpkg-buildpackage -us -uc -b
# Результат: ../runtel-dialog-llm_*.deb

# tinyPBX (модуль автодозвона)
cd /opt/runtel/robot/tinypbx
dpkg-buildpackage -us -uc -b
# Результат: ../runtel-tinypbx_*.deb

Шаг 6. Доставить и установить deb-пакеты на сервер

Копируем пакеты на целевой сервер и устанавливаем:

# С сервера сборки
scp runtel-dialog-llm_*.deb runtel-tinypbx_*.deb root@<server_ip>:/tmp/

# На целевом сервере
dpkg -i /tmp/runtel-dialog-llm_*.deb
dpkg -i /tmp/runtel-tinypbx_*.deb
apt-get install -f -y

Postinst-скрипт автоматически:

  • Создаёт системного пользователя dialog-llm
  • Обнаруживает уже созданный venv платформы
  • Доустанавливает остальные Python-зависимости
  • Настраивает базу данных PostgreSQL и применяет миграции
  • Регистрирует плагины и создаёт root-пользователя админ-панели
  • Создаёт тестовую лицензию (30 дней, 1 канал)
  • Загружает ML-модели из S3 (ASR, LaBSE и другие модели векторного представления текста, robot_detector)
  • Включает systemd-сервисы в автозагрузку

Если postinst завершился с ошибкой или миграции не применились, выполните вручную:

PGPASSWORD=<пароль_БД> psql -U <пользователь> -d <имя_БД> \
  -f /opt/runtel/robot/DATABASE/deploy_complete_schema.sql

Шаг 7. Проверить конфигурацию dialog.yaml

Файл конфигурации: /etc/runtel/dialog.yaml (копируется из /opt/runtel/robot/dialog.yaml при первой установке). Убедитесь, что параметры подключения к БД корректны:

database:
  database: <имя_БД>
  username: <пользователь>
  password: <пароль_БД>
  hosts:
    - localhost

Шаг 8. Выпустить SSL-сертификат

Для production-среды с публичным доменом рекомендуется Let's Encrypt:

apt-get install -y certbot python3-certbot-nginx
certbot --nginx -d <ваш_домен>

Для внутренних/тестовых стендов — самоподписанный сертификат:

mkdir -p /etc/nginx/ssl
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  -keyout /etc/nginx/ssl/server.key \
  -out /etc/nginx/ssl/server.crt \
  -subj '/CN=<ваш_домен>' \
  -addext 'subjectAltName=DNS:<ваш_домен>'

Шаг 9. Настроить Nginx

Платформа состоит из двух бэкендов:

  • dialog-llm-admin (порт 8000) — админ-панель, виджеты, статика
  • dialog-llm (порт 8080) — API для ML-моделей, SSE-стриминг, WebSocket

Создать файл /etc/nginx/sites-available/dialog-llm:

map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
}

upstream robot_llm_api {
    server 127.0.0.1:8080;
    keepalive 32;
}

upstream robot_admin_panel {
    server 127.0.0.1:8000;
    keepalive 16;
}

server {
    listen 80;
    listen 443 ssl;
    server_name <ваш_домен>;

    ssl_certificate     /etc/nginx/ssl/server.crt;
    ssl_certificate_key /etc/nginx/ssl/server.key;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    client_max_body_size 1G;
    proxy_connect_timeout 300s;
    proxy_send_timeout 600s;
    proxy_read_timeout 600s;

    # Root → admin
    location = / { return 302 /admin; }

    # Admin WebSocket
    location /admin/ws/ {
        proxy_pass http://robot_admin_panel;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_buffering off;
        proxy_read_timeout 86400s;
        proxy_send_timeout 86400s;
    }

    # Admin SSE
    location /admin/sse/ {
        proxy_pass http://robot_admin_panel;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header Connection '';
        proxy_buffering off;
        proxy_cache off;
        proxy_set_header X-Accel-Buffering no;
        gzip off;
        chunked_transfer_encoding on;
        proxy_read_timeout 86400s;
    }

    # Admin API и HTML
    location /admin {
        proxy_pass http://robot_admin_panel;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_buffering off;
    }

    # Widget
    location /widget/ {
        proxy_pass http://robot_admin_panel;
        proxy_set_header Host $host;
        expires 1h;
    }

    # Static
    location /static/ {
        proxy_pass http://robot_admin_panel;
        proxy_set_header Host $host;
        expires 7d;
        add_header Cache-Control "public, immutable";
    }

    # LLM WebSocket
    location /api/ws {
        proxy_pass http://robot_llm_api;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_set_header Host $host;
        proxy_buffering off;
        proxy_read_timeout 3600s;
    }

    # SSE endpoints
    location ~ ^/api/(llm/completion|transcribe|detect-robot|
                       rag-search|analyze-call|batch-inference|
                       models/train|synthesize|dialog-robot|agent/chat) {
        proxy_pass http://robot_llm_api;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header Connection '';
        proxy_buffering off;
        proxy_cache off;
        proxy_set_header X-Accel-Buffering no;
        gzip off;
        chunked_transfer_encoding on;
        proxy_read_timeout 7200s;
    }

    # Остальные API
    location /api/ {
        proxy_pass http://robot_llm_api;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_buffering off;
        proxy_read_timeout 600s;
    }

    server_tokens off;
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Content-Type-Options "nosniff" always;

    gzip on;
    gzip_vary on;
    gzip_min_length 1024;
    gzip_types text/plain text/css text/xml text/javascript
               application/json application/javascript;
}

Активировать конфиг и перезагрузить nginx:

ln -sf /etc/nginx/sites-available/dialog-llm /etc/nginx/sites-enabled/dialog-llm
rm -f /etc/nginx/sites-enabled/default
nginx -t && nginx -s reload

Шаг 10. Установить кастомные TTS-плагины (опционально)

Движок VITS входит в основные плагины и поставляется с платформой. Silero TTS — сторонний движок: кастомный плагин, устанавливается отдельно при наличии у клиента лицензии на него. Через кастомные плагины можно подключать и другие голоса и модели. Кастомные плагины не входят в основной deb-пакет:

# Зависимости TTS
/opt/runtel/robot/venv/bin/pip install omegaconf

# Установка из custom_plugins/
cd /opt/runtel/robot
./deploy/scripts/install_custom_plugins.sh

9.5. Схемы размещения вычислений (CPU / GPU / удалённый узел)

GPU-зависимые движки (LLM, ASR) резолвятся автоматически по каждому движку отдельно. Поддерживаются три схемы:

СхемаГде исполняетсяASR / LLM
Локальный GPUGPU (Vulkan) на самом сервереASR / LLM локально на Vulkan
Удалённый GPU-узелСервер на CPU, тяжёлые движки — на отдельном GPU-узлеЗапросы к узлу по внутреннему API (с токеном узла)
Только CPUGPU нет ни локально, ни на узлеASR — Vosk, LLM — лёгкая CPU-модель

При недоступности GPU-узла система автоматически переходит на локальный CPU-контур без прерывания обслуживания. Ускорение — на открытом стандарте Vulkan (любой вендор GPU).

Шаг 12. Запустить сервисы

# Движки (CPU, при Vulkan — соответствующие *-vulkan службы)
systemctl start dialog-llm-chat dialog-vosk-asr dialog-vits-tts dialog-robot-detector

# Основные сервисы и телефония
systemctl start dialog-llm dialog-llm-admin nginx runtel-tinypbx

# Воркеры очередей (Redis)
systemctl start dialog-llm-worker-system dialog-llm-worker-speech \
               dialog-llm-worker-llm dialog-llm-worker-nlu

Шаг 13. Проверка работоспособности

Проверка статуса всех сервисов:

for s in dialog-llm dialog-llm-admin dialog-llm-chat dialog-vosk-asr dialog-vits-tts \
         dialog-robot-detector runtel-tinypbx dialog-llm-worker-speech \
         dialog-llm-worker-llm dialog-llm-worker-nlu dialog-llm-worker-system; do
  printf '%-30s %s\n' "$s" "$(systemctl is-active $s)"
done

Проверка health-эндпоинтов:

# LLM (локально или на GPU-узле)
curl -s http://127.0.0.1:8100/v1/models | jq '.data[].id'

# ASR — Vosk (CPU)
curl -s http://127.0.0.1:8106/health | jq '.status'

# TTS — VITS
curl -s http://127.0.0.1:8104/health | jq '.status'

# Robot Detector (NLU)
curl -s http://127.0.0.1:8103/health | jq '.status'

# Опционально при Vulkan: ASR
curl -s http://127.0.0.1:8101/health | jq '.status'

# Основное API
curl -s http://localhost:8080/api/health

Проверка доступности через браузер:

curl -skI https://<ваш_домен>/
# HTTP/1.1 302 → /admin

После этого админ-панель доступна в браузере по адресу https://<ваш_домен>/admin/.

Справка: сетевая архитектура

Клиент (HTTPS :443)
       |
       v
  Nginx :443 (SSL termination)
       |
       |-- /admin*, /static*, /widget*  →  :8000 (dialog-llm-admin, FastAPI)
       '-- /api/*                       →  :8080 (dialog-llm, aiohttp)

10. Тарифы и лицензирование

Система лицензирования основана на принципе оплата по фактическому использованию — оплата за долю использования. Платите только за реально потребляемую долю вычислительных ресурсов.

10.1. Каналы лицензирования

Для технической реализации система использует раздельные каналы: сценарий, распознавание речи (ASR), синтез речи (TTS), генерация ответов ИИ (LLM), понимание контекста (NLU) и внешние LLM (коннекторы). Отдельный канал — отдельный тип запросов и отдельная лицензия.

Канал Бизнес-смысл Что ограничивает
scenario Бизнес-логика Оркестрация диалогов, управление состоянием, маршрутизация, логирование
asr Распознавание речи Количество одновременных процессов распознавания речи (ASR)
tts Синтез речи Количество одновременных процессов синтеза речи (TTS)
llm Интеллект Мощность ИИ-ядра для генерации ответов, RAG-обработки и анализа текста
nlu Понимание Классификация, детекция роботов/автоответчиков, анализ эмоций
external_llm Внешние LLM Коннекторы к облачным LLM (ЯндексGPT, GigaChat и др.) — оплата за коннектор, без каналов LLM

10.2. Базовые ресурсы (Конструктор)

«Кирпичики», из которых собираются конечные продукты. Стоимость за 100% загрузку выделенного ядра/потока.

Ресурс Расшифровка Канал Стоимость / мес
SC Сценарий (Оркестратор) scenario 2 000 ₽
ASR Распознавание речи speech 30 000 ₽
TTS Синтез речи speech 50 000 ₽
LLM Генерация ответов ИИ llm 40 000 ₽
NLU Понимание контекста, классификация, детекция роботов nlu 20 000 ₽

Внешние сервисы (прямое подключение): коннектор eASR/eTTS — 2 000 ₽/мес, eLLM — 2 000 ₽/мес.

10.3. Готовые продукты

Готовые бизнес-услуги. Каждая сессия резервирует 1 слот сценария и дробную часть остальных каналов. Робот слушает клиента только 10% времени звонка? Значит, вы платите за ASR только 10% от стоимости.

Продукт Описание Стоимость / мес
Голосовой сценарный робот Информирование, опросы, приём показаний (SC×1.0 + ASR×0.1) 5 000 ₽ / линия
Голосовой робот с RAG Умный консультант первой линии (SC×1.0 + ASR×0.1 + LLM×0.2) 13 000 ₽ / линия
Голосовой робот с синтезом Персональные данные голосом (SC×1.0 + Speech×0.3) 15 000 ₽ / линия
Голосовой робот с детекцией Определение IVR и автоответчиков (SC×1.0 + ASR×0.1 + NLU×0.2) 9 000 ₽ / линия
Речевая аналитика Контроль качества операторов (ASR×1.0 + LLM×1.0 + NLU×1.0) 90 000 ₽ / поток
Суммаризация Краткое резюме встречи или звонка (ASR×1.0 + LLM×1.0) 70 000 ₽ / поток

Расчёт лицензии: Количество линий × Стоимость продукта. Коэффициенты нагрузки определяют реальное потребление ресурсов каналов. Подробные примеры расчёта — на странице Тарифы.