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

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

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

Отличие от «просто чат-бота»: жёсткий сценарий для регламентов и свободный AI-агент — в одной среде, плюс полный цикл от звонка до отчёта качества.

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


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

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

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

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

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

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

  • Серверная часть: Python 3.10+, aiohttp, FastAPI
  • Очередь задач: собственная реализация на Redis (open-source)
  • База данных: PostgreSQL 13+ с расширением pgvector для векторного поиска
  • AI/ML: LLM, ASR (Vosk / GigaAM / T-one), TTS (VITS), эмбеддинги для RAG. Базовая работа на CPU; ускорение — опционально Vulkan (без CUDA)
  • Model Storage: S3-совместимое хранилище (Яндекс.Облако Object Storage, MinIO, или локальное развертывание)
  • Развёртывание: systemd сервисы для Linux, Debian пакеты (.deb)

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

3.1. Речевая аналитика и распознавание речи (ASR)

Распознавание речи (базовый CPU-комплект):

  • Vosk — штатный распознаватель по умолчанию (realtime на CPU)
  • Популярные движки GigaAM-v3 и T-one — доступны в ядре; веса загружаются отдельно
  • Для тяжёлой транскрибации — whisper.cpp на CPU или опционально на GPU/Vulkan

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

  • Автоматическая транскрибация с определением ролей (в т.ч. стереозаписи оператор/клиент)
  • LLM-оценка качества: соблюдение скрипта, тональность, возражения, техника закрытия — по настраиваемому промпту
  • Итог звонка: тип результата, ключевые моменты с таймкодами, рекомендации
  • Отчёты HTML/PDF/CSV, дашборд KPI и сводки по кампаниям и периодам
  • Авторазбор записей по расписанию (speech workflows)

Текстовые каналы и интеграции:

  • Анализ обращений из чатов и мессенджеров через маршруты плагинов и интеграции
  • Умная маршрутизация обращений по отделам на основе ИИ-анализа
  • В связке с Коммуникационной платформой Рантел — контроль качества и подсказки оператору в реальном времени

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

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

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

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

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

  • Локальные LLM в контуре заказчика (CPU, опционально Vulkan)
  • Облачные провайдеры (ЯндексGPT, GigaChat и др.) — через коннектор по политике заказчика
  • Потоковая генерация ответа в реальном времени через SSE
  • Контекст из RAG для ответов на основе базы знаний
  • Автоответы, маршрутизация обращений, аналитические отчёты
  • Стили общения агента (Tone of Voice) — шаблоны тона для разных сценариев

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

  • Собственный движок на базе VITS — входит в штатную CPU-поставку
  • Сторонние Silero — заказной модуль при наличии лицензии от разработчика (в штатный комплект не входит)
  • Облачный синтез: Edge TTS, Яндекс SpeechKit — по политике заказчика через коннекторы
  • Кеш фраз, расстановка ударений, потоковая генерация

3.6. NLU и детекция «неживого» трафика

  • Загрузка собственных NLU-моделей (PyTorch/Transformers, ZIP) для ветвления сценариев по намерениям
  • Детекция роботов/автоответчиков (AMD): робот, IVR, гудок, голосовой ассистент
  • Лицензионный канал nlu_detect — realtime-детекция на линии; классификация намерений — функция сценариев
  • Пакетная обработка и дообучение на размеченных данных заказчика

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

  • Сценарный робот (no-code): визуальный редактор диалогов — приветствие, условия, HTTP API, справочники, перевод на оператора
  • AI-агент: свободный диалог с инструментами (поиск в БЗ, заявка, HTTP), эскалация на человека
  • Гибрид: сценарий может передать управление агенту в нужной точке диалога
  • Телефония: входящие и автообзвон (SIP), DID-маршрутизация на сценарий / агента / LLM-маршрут, barge-in (клиент может перебить робота)
  • Автообзвон: кампании, загрузка CSV, расписание, лимиты скорости, повторы, рабочие часы
  • Каналы: встраиваемый веб-виджет (ограничение по доменам). Диалог в мессенджерах (Telegram, MAX, eXpress и др.) — экспериментальная возможность вне базовой поставки, включается заказным пакетом «шлюз мессенджеров»

3.8. Защита персональных данных (152-ФЗ)

  • Маскирование и контроль персональных данных до и после обращения к языковой модели
  • Обработка данных в контуре заказчика; передача во внешние сервисы — только через явно настроенные коннекторы

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. Установленные плагины

  • vosk_asr — штатное распознавание речи (Vosk), канал speech_asr; опционально GigaAM-v3, T-one (веса отдельно); whisper — тяжёлая транскрибация / Vulkan
  • llm_chat — LLM (CPU; опционально Vulkan), канал llm
  • robot_detector — детекция роботизированных звонков, канал nlu_detect
  • voice_bot — голосовой робот и сценарии, канал scenario
  • vits_tts — собственный движок синтеза на базе VITS, канал speech_tts; сторонние Silero — заказной модуль при наличии лицензии от разработчика
  • call_analysis — комплексный анализ звонков (композитный: ASR + LLM)
  • rag — поиск по базе знаний
  • Защита персональных данных — маскирование ПДн до передачи в языковую модель и контроль ответа после генерации (152-ФЗ)
  • dialog_manager — менеджер диалогов
  • training — обучение моделей детекции

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 и др.). Синхронизация с объектным хранилищем, мониторинг использования памяти.
  • Маппинг функций: Назначение конкретных плагинов для выполнения системных функций.

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

  • Визуальный редактор сценариев: конструктор диалогов — приветствие, распознавание, NLU, TTS, HTTP, перевод на оператора.
  • AI-агенты: свободный диалог с инструментами и базой знаний, стили общения (Tone of Voice).
  • Автообзвон и история вызовов: кампании, номера, мониторинг, записи и транскрипции.
  • Входящие маршруты: DID → сценарий / AI-агент / LLM-маршрут / перевод / отклонение.
  • Речевая аналитика: транскрипты, LLM-оценки, дашборд и отчёты.
  • Интеграции: веб-виджет, телефония (SIP); мессенджеры — через заказной шлюз (вне базовой поставки).
  • TTS-кеш: предгенерированные аудио-фразы для снижения задержки.

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

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

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

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

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

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

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

Отдельный кабинет для поставщика и партнёров платформы.

  • Клиенты и лицензии: учёт контрагентов, выпуск ключей с квотами по каналам scenario / speech_asr / speech_tts / llm / nlu_detect, отзыв и экспорт файла лицензии.
  • Пресейл: калькулятор стоимости и генератор черновиков сценариев/маршрутов по ТЗ.
  • Детекция робота (AMD): тест на WAV, пакетный прогон, экспорт результатов.

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

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

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

Единый контур контакт-центра и AI-функций: анализ звонков, суммаризация в CRM, AI-IVR, роботы на линии. Контроль чек-листов и подсказки оператору в реальном времени — в связке с Коммуникационной платформой Рантел.

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

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

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

  • Веб-виджет: встраивание чата на сайт (темы, SSE, ограничение по доменам).
  • Шлюз мессенджеров: экспериментальный заказной пакет вне базовой поставки (готовые адаптеры — Telegram, MAX, eXpress; иные — настройкой).
  • Телефония: SIP-транки и исходящие номера на домен; автообзвон и входящие маршруты. Дополнительные протоколы (ESL, uniMRCP и др.) — через кастомные плагины (не входят в базовую поставку).

7.4. Внешние облачные провайдеры

Подключение облачных ASR/TTS/LLM (Яндекс SpeechKit, ЯндексGPT, GigaChat и др.) через коннектор на канале сценария. Клиент оплачивает коннектор и API провайдера — вычислительные мощности платформы не расходуются.


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

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

Платформа использует модель Pay-for-Usage Share и пять каналов лицензирования:

  • scenario — бизнес-логика, оркестрация диалогов и голосовых сессий
  • speech_asr — распознавание речи (ASR)
  • speech_tts — синтез речи (TTS)
  • llm — генерация ответов AI, RAG, анализ текста
  • nlu_detect — realtime-детекция роботов и автоответчиков

Коннектор к облачным ASR/TTS/LLM оформляется на канале scenario (не отдельный лицензионный канал). Каждый канал задаёт число параллельных слотов; при занятости канала запрос ограничивается или отклоняется. Лицензия привязана к оборудованию установки.

8.2. Защита ПО и доступа

  • Поставка в виде защищённых бинарных пакетов Debian
  • Проверка лицензии на операциях обработки (речь, LLM, сценарии, детекция)
  • Ролевой доступ (RBAC) в админ-панели, аудит операций
  • Аутентификация сессией и API-токенами

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

  • Локальное развёртывание: данные и модели обрабатываются в контуре заказчика.
  • 152-ФЗ: маскирование персональных данных до передачи в языковую модель и контроль ответа после генерации.
  • Изоляция моделей: объектное хранилище (S3-совместимое) в закрытом контуре.
  • Мультидоменность: изоляция данных филиалов и франшиз, квоты и учёт потребления.
  • Ограничение частоты запросов на уровне прокси и лицензии.

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

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

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

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

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

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

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

Зависимости: Python 3.10+, 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 22.04+
CPU4+ ядра (реком. 8)Полная работа без GPU
GPUНе требуетсяОпционально: любой GPU с Vulkan (без CUDA)
Python3.10+На стенде экспертизы — 3.11

Дополнительно на сервере должны быть установлены: 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 (runtel-plugin-vits-tts). Сторонние Silero — заказной модуль при наличии лицензии от разработчика (в штатный комплект не входит). Облачные ASR/TTS/LLM — через коннекторы по политике заказчика. Распознавание речи в базовом комплекте: Vosk (по умолчанию), опционально GigaAM-v3 и T-one.

Кастомные плагины не входят в основной 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 / GigaAM-v3 / T-one, 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) и детекция роботов. Отдельный канал — отдельный тип запросов и отдельная лицензия. Облачные сервисы подключаются коннектором на канале сценария.

Канал Бизнес-смысл Что ограничивает
scenario Бизнес-логика Параллельные сценарные звонки и оркестрация диалогов
speech_asr Распознавание речи Количество одновременных процессов ASR
speech_tts Синтез речи Количество одновременных процессов TTS
llm Интеллект Параллельные запросы к LLM (ответы, RAG, анализ)
nlu_detect Детекция роботов Realtime-детекция роботов и автоответчиков

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

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

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

Внешние сервисы: коннектор к облачным ASR/TTS/LLM — 2 000 ₽/мес (канал scenario).

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 + ASR×0.1 + TTS×0.2) 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 ₽ / поток

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