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

Архитектура 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.

Горизонтальное и вертикальное масштабирование

Все системы проекта поддерживают:

  1. Вертикальное масштабирование — за счёт увеличения выделяемых ресурсов виртуальным машинам.
  2. Горизонтальное — за счёт выделения отдельных виртуальных машин определённым компонентам систем.

Схема масштабирования приведена ниже:

Мониторинг

Мониторинг системы обеспечивается при помощи интеграции с внешними сервисами мониторинга или внутренними сервисами VK Assistant:

  • Alert Manager — оповещение об инцидентах.
  • Prometheus — система мониторинга.
  • Grafana — платформа для визуализации.
  • EFK — управление журналами.