Архитектура VK Assistant
Схема компонентов и сервисов
Компоненты архитектуры VK Assistant отображены на схеме ниже (нажмите на изображение, чтобы открыть его в новом окне браузера):
Компоненты VK Assistant
Компоненты VK Assistant условно можно разделить на основные и опциональные, которые могут быть включены по запросу.
Обязательные сервисы
Реверс-прокси
- Nginx — обратный прокси-сервер.
Сервисы фронтенда
- Login UI — интерфейс для входа в VK Assistant.
- AdminPanel — интерфейс административной панели.
- Chat — интерфейс чата.
- Operator — интерфейс оператора.
- Built-in-Chat — интерфейс чата, встраиваемого в портал заказчика.
Core-сервисы
- Core API — ядро VK Assistant, API, управление пользовательскими сессиями и конфигурация системы.
- API Gateway — шлюз для доступа к публичным методам сервиса Core API.
- Auth — сервис авторизации и аутентификации.
Извлечение именованных сущностей, запуск моделей NLP
- NER — извлечение именованных сущностей.
- ML — управление работой с NLP моделями.
- ML worker — обучение NLP моделей и классификация текста из запросов пользователей.
Вызов сервисов по графику
- BEATS — сервис, использующийся для периодического выполнения запросов к разным сервисам VK Assistant в определённое время для запуска служебных заданий.
Дополнительные сервисы
- bots — подключение дополнительных каналов взаимодействия с пользователем.
- Notify — отвечает за отправку push-уведомлений.
- Skillset-repository — сервис для подключения репозитория для хранения и передачи скилсетов между конфигурациями Dev/Test/Prod.
- Voice Gateway — сервис для пакетной обработки WAV + JSON с фактами, получаемых с фронта голосового приложения.
- Adapters/VK Teams — сервис для работы с VK Teams.
- Adapters/Telegram — сервис для работы с Telegram.
Используемые БД/СУБД, хранилища
- MongoDB — хранение конфигурации и параметров сессии.
- S3/MinIO — хранение файлов (NLP модели, документы).
- Redis — хранение очередей и кэша.
Компоненты голосовой подсистемы
Обеспечивают интеграцию с АТС заказчика.
- Asterisk — принимает и обрабатывает запросы от АТС.
- Gateway connector — набор сервисов, для преобразования голосовых запросов АТС в Голосовую подсистему.
- Skill Server — сервис обработки запросов пользователя и преобразование их в соответствующие навыки.
- ASR — преобразование голоса в текст.
- TTS — преобразование текста в голос.
При помощи компонентов голосовой подсистемы происходит преобразование форматов запросов пользователей.
Голосовые запросы пользователей преобразуются в текстовый формат сервисом ASR и через Skill Server направляются к необходимому скилсету VK Assistant для старта сессии. Ответ на запрос пользователя передается на Skill Server, преобразуется сервисом TTS в голосовой формат и направляется в АТС заказчика.
Дополнительные компоненты, разрабатываемые заказчиками
Service Gateway — сервис интеграции с целевыми системами заказчика, создаваемый при отсутствии в ядре продукта необходимого коннектора, либо для упрощения интеграции (у VK Assistant имеется набор коннекторов к внешним системам по различным протоколам, например HTTP (REST, SAP OData), и интеграцию можно выполнить через настройку агента в UI административной панели. Однако, при необходимости выполнить сложную интеграцию с десятком связанных сервисов использование графического интерфейса может привести к очень сложным запутанным схемам, которые будет тяжело сопровождать, поэтому в ряде случаев рекомендуется такие сложные интеграции выносить в отдельный сервис.
Аутентификация и авторизация
Способы аутентификации, поддерживаемые VK Assistant:
- JWT — используется при авторизации из чата. Система проверяет токен, сформированный внешней системой с использованием симметричного или ассиметричного шифрования.
- LDAP — система делает запрос в AD напрямую, когда пользователь перешел в VK Assistant из VK Teams. В запросе система передает ключ пользователя (например, почту) и получает права в соответствии с группами доступа.
- Remote Authentication — позволяет передать проверку учетных данных во внешнюю систему, например, в SAP.
- Local-guest authentication — позволяет незарегистрированному пользователю общаться с VK Assistant. Доступ к диалогу появляется у пользователя после ввода капчи. При этом автоматически создается пользователь с минимальным набором прав доступа.
- Local authentication — авторизация заранее созданного пользователя внутри системы. При локальной авторизации происходит проверка пароля пользователя внутри системы.
- OAuth /OAuth 2.0 (OpenID /OpenID Connect) — система перенаправляет пользователя в провайдера аутентификации (ADFS, Keycloack и др.), где пользователь проходить процедуру аутентификации. Далее информация о пользователе передается в VK Assistant, который при необходимости запрашивает дополнительную информацию из AD.
- SAML — процесс аутентификации на основе данных пользователя (claim).
Все способы аутентификации конфигурируемые и могут быть активированы/деактивированы путем настройки сервиса Auth (конфигурационный файл providers.json).
Интеграция с целевыми системами
Интеграция с целевыми системами возможна двумя способами – напрямую и через Service Gateway.
Service Gateway агрегирует взаимодействие с внешними системами заказчика (BI, ERP, CRM и т.д.). Позволяет упростить создание rest-агентов и вынести настройки интеграции в отдельный конфигурационный файл. Что повышает удобство работы с большими объемами данных, возвращаемых в ответах на запросы сервиса Core.
Горизонтальное и вертикальное масштабирование
Все системы проекта поддерживают:
- Вертикальное масштабирование — за счёт увеличения выделяемых ресурсов виртуальным машинам.
- Горизонтальное — за счёт выделения отдельных виртуальных машин определённым компонентам систем.
Схема масштабирования приведена ниже:
Мониторинг
Мониторинг системы обеспечивается при помощи интеграции с внешними сервисами мониторинга или внутренними сервисами VK Assistant:
- Alert Manager — оповещение об инцидентах.
- Prometheus — система мониторинга.
- Grafana — платформа для визуализации.
- EFK — управление журналами.