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

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

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


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

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

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

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

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

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

  • Backend: Python 3.11+, aiohttp, FastAPI
  • Task Queue: Celery + Redis
  • Database: PostgreSQL 14+ с расширением pgvector для векторного поиска
  • AI/ML: PyTorch, Transformers, Faster-Whisper, vLLM, Qwen
  • Model Storage: S3-совместимое хранилище (Yandex.Cloud Object Storage, MinIO, или локальное развертывание)
  • Deployment: systemd сервисы для Linux, Debian пакеты (.deb)

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Высококачественный синтез речи через кастомные плагины (Piper/VITS, Silero)
  • Многоязычность: поддержка русского и других языков
  • Различные варианты голосов (мужские/женские)
  • Потоковая генерация (streaming) и расстановка ударений

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

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

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

  • Визуальный редактор сценариев: построение диалоговых деревьев через drag-and-drop интерфейс
  • AI-агенты: создание интеллектуальных агентов на базе LLM и базы знаний
  • Интеграция с FreeSWITCH через ESL для голосовой телефонии
  • Автообзвон (tinyPBX): массовые исходящие звонки по списку номеров
  • Каналы интеграции: Telegram Bot, Web Widget, tinyPBX

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

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

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

  • ai_handlers/ — слой эндпоинтов (REST API, SSE, WebSocket)
  • plugins/ — модули обработки ИИ (faster_whisper, vllm_llm, robot_detector, rag, 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 (создание Celery задачи)
    ↓
Redis Queue (постановка в очередь)
    ↓
Celery Worker (обработка)
    ↓
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. Установленные плагины

  • faster_whisper — транскрибация речи (ASR), канал speech
  • vllm_llm — LLM через vLLM (10-24x ускорение), канал llm
  • robot_detector — детекция роботизированных звонков (NLU audio-модель), канал nlu
  • voice_bot — голосовой робот и сценарии, канал scenario
  • streaming_asr — потоковое распознавание речи, канал speech
  • streaming_tts / vits_tts — потоковый синтез речи (Piper/VITS), канал speech
  • call_analysis — комплексный анализ звонков (композитный: Whisper + 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. Административная панель

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

6.1. Личный кабинет клиента (Admin)

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

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

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

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

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

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

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

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

  • Визуальный редактор сценариев: Drag-and-drop конструктор диалоговых деревьев с поддержкой узлов: приветствие, распознавание, NLU обработка, TTS, переключение на оператора.
  • AI-агенты: Создание и настройка интеллектуальных агентов на базе LLM и базы знаний.
  • Интеграции: Подключение Telegram Bot, встраиваемого Web Widget, tinyPBX для автообзвона.
  • TTS кэш: Управление предгенерированными аудио-фразами для голосового робота.
  • Результаты сценариев: Просмотр аналитики по выполненным звонкам.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Telegram Bot Gateway: Подключение AI-агентов к Telegram для автоматических ответов клиентам.
  • Web Widget: Встраиваемый чат-виджет для сайта компании.
  • tinyPBX: Интеграция с телефонией для автообзвона и голосовых роботов.
  • FreeSWITCH ESL: Прямая интеграция с FreeSWITCH для VoIP телефонии.

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

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


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

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

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

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

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

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

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

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

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

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

  • Метрики (Prometheus + Grafana): Сбор числовых показателей производительности, загрузка воркеров и GPU.
  • Трассировка (OpenTelemetry): Глубокая отладка распределенных запросов с экспортом в Grafana Tempo.
  • Логирование (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 NVIDIA RTX 3060+ (12GB VRAM)

Зависимости: Python 3.11+, PostgreSQL 13+, Redis 6+, Nginx, CUDA 12.9+ (для GPU)

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

Платформа состоит из 12 systemd-сервисов:

  • dialog-llm (порт 8080) — основной REST API + PluginManager
  • dialog-llm-admin (порт 8000) — веб-интерфейс личного кабинета
  • dialog-llm-worker-speech — Celery worker для ASR + TTS
  • dialog-llm-worker-llm — Celery worker для LLM анализа
  • dialog-llm-worker-scenario — Celery worker для голосового робота
  • dialog-llm-worker-nlu — Celery worker для детекции и обучения
  • runtel-celery-beat — планировщик периодических задач
  • Плагин-серверы: dialog-vllm (8100), dialog-whisper (8101), dialog-tts (8102), dialog-piper-tts (8104), dialog-robot-detector (8103)

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

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

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

КомпонентТребованиеПримечание
ОСDebian 12 / Ubuntu 20.04+
GPUNVIDIA с 12+ GB VRAMЛюбая GPU с поддержкой CUDA 12+
Драйвер NVIDIA535+Для RTX 50 серии — 570+
Python3.11+Поставляется с Debian 12

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

Шаг 2. Установить GPU-драйвер

GPU-драйвер не входит в deb-пакет платформы и должен быть установлен заранее.

chmod +x deploy/install_cuda.sh
./deploy/install_cuda.sh
sudo reboot
./deploy/install_cuda.sh   # повторно после перезагрузки

Убедиться, что GPU видна:

nvidia-smi

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

apt-get install -y jq

Шаг 4. Создать Python-окружение и установить ML-зависимости

PyTorch GPU и vLLM не входят в deb-пакет — они зависят от конкретной версии CUDA на сервере. Устанавливаем их до пакетов платформы, чтобы postinst-скрипт обнаружил готовое окружение.

python3 -m venv /opt/runtel/robot/venv
/opt/runtel/robot/venv/bin/pip install --upgrade pip wheel setuptools

# PyTorch GPU (cu129 для CUDA 12.9+, cu128 для 12.8)
/opt/runtel/robot/venv/bin/pip install torch torchaudio \
  --index-url https://download.pytorch.org/whl/cu129

# vLLM — движок для LLM моделей (~500 MB, установка ~15-20 мин)
/opt/runtel/robot/venv/bin/pip install vllm

Проверить, что GPU доступна из Python:

/opt/runtel/robot/venv/bin/python3 -c "import torch; print(torch.cuda.is_available())"
# True

Примечание: vLLM устанавливает свою версию PyTorch и может понизить ранее установленную. Это нормально — vLLM тестируется с конкретными версиями torch.

Шаг 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 с PyTorch GPU (шаг 4)
  • Доустанавливает остальные Python-зависимости
  • Настраивает базу данных PostgreSQL и применяет миграции
  • Регистрирует плагины и создаёт root-пользователя админ-панели
  • Создаёт тестовую лицензию (30 дней, 1 канал)
  • Загружает ML-модели из S3 (Whisper, sentence-transformers, 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-плагины (опционально)

Кастомные плагины (Silero TTS, Piper TTS и др.) не входят в основной deb-пакет:

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

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

Шаг 11. Настроить GPU-память (для одной GPU)

При использовании одной GPU рекомендуется ограничить CUDA-контекст для сервисов, не требующих GPU:

СервисУстройствоVRAM
vLLM (LLM-модель)GPU~10 ГБ
Whisper ASRGPU~2 ГБ
Silero TTSGPU~0.2 ГБ
Robot DetectorCPU
dialog-llm, dialog-llm-adminCPU
# Перевести CPU-сервисы в режим без GPU
for svc in dialog-llm dialog-llm-admin dialog-robot-detector dialog-piper-tts; do
  mkdir -p /etc/systemd/system/${svc}.service.d
  echo -e '[Service]\nEnvironment=CUDA_VISIBLE_DEVICES=' \
    > /etc/systemd/system/${svc}.service.d/cpu-only.conf
done
systemctl daemon-reload

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

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

# 1. vLLM (загрузка модели + компиляция CUDA-графов, ~1-2 мин)
systemctl start dialog-vllm

# 2. GPU-сервисы (Whisper ASR + TTS)
systemctl start dialog-whisper dialog-tts

# 3. Основные сервисы (CPU)
systemctl start dialog-llm dialog-llm-admin nginx

# 4. ML-модели на CPU
systemctl start dialog-robot-detector dialog-piper-tts

# 5. Celery-воркеры
systemctl start dialog-llm-worker-system dialog-llm-worker-gpu
systemctl start dialog-llm-worker-llm dialog-llm-worker-speech dialog-llm-worker-nlu

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

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

for s in dialog-vllm dialog-llm dialog-llm-admin dialog-whisper dialog-tts \
         dialog-piper-tts dialog-robot-detector dialog-llm-worker-gpu \
         dialog-llm-worker-llm dialog-llm-worker-nlu dialog-llm-worker-speech \
         dialog-llm-worker-system; do
  printf '%-30s %s\n' "$s" "$(systemctl is-active $s)"
done

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

# vLLM (LLM-модель)
curl -s http://127.0.0.1:8100/v1/models | jq '.data[].id'

# Whisper ASR
curl -s http://127.0.0.1:8101/health | jq '.status'

# Silero TTS
curl -s http://127.0.0.1:8102/health | jq '.status'

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

# Piper TTS
curl -s http://127.0.0.1:8104/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. Тарифы и лицензирование

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

10.1. 4 канала лицензирования

Для технической реализации система использует 4 основных канала — «трубы», через которые проходят запросы.

Канал Бизнес-смысл Что ограничивает
scenario Бизнес-логика Оркестрация диалогов, управление состоянием, маршрутизация, логирование
speech Голос Количество одновременных процессов распознавания (ASR) и синтеза (TTS) речи
llm Интеллект Мощность AI-ядра для генерации ответов, RAG-обработки и анализа текста
nlu Понимание Классификация, детекция роботов/автоответчиков, анализ эмоций

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

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

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

Внешние сервисы (Pass-through): коннектор 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 ₽ / поток

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