Перейти к основному содержимому

Принцип работы многоязычного бота

Это часть серии статей, посвященной созданию многоязычного бота.

  1. Принцип работы (вы находитесь здесь)
  2. Маршрутизация запросов
  3. Поддержка русского языка
  4. Поддержка других языков
  5. Публикация в канал

Одноязычные боты

В основе концепции многоязычного бота лежит возможность переключения контекста из одного бота в другого при помощи специальных типов ответов: context-switch и context-return.

При помощи этой возможности боты при получении запроса на неизвестном языке могут переключать контекст на бота, который поддерживает язык запроса.

Таким образом, для реализации многоязычного бота необходимо создать проекты ботов на разных языках NLU, которые отличаются по следующим параметрам:

  • Конфигурация языка NLU в настройках проекта и chatbot.yaml.
  • Тренировочные фразы и паттерны в интентах и сущностях NLU.
  • Тексты ответов бота.

Все прочее наполнение: имена стейтов и интентов, бизнес-логика на JavaScript и т. д. — у всех одноязычных ботов должно быть одинаково. Кроме того, в каждом боте должна быть реализована логика переключения контекста при получении запроса на неизвестном языке.

Схема двуязычного бота

Рассмотрим пример устройства бота, который должен общаться с клиентами на двух языках (например, русском и английском):

  1. Клиент запускает бота и посылает ему сообщение /start. Сообщение обрабатывает бот, который выбран как основной, — например, русскоязычный. Клиент продолжает общение с этим ботом.
  2. Если клиент посылает запрос на английском языке, бот переключает контекст на англоязычного бота. Клиент продолжает общение с этим ботом.
  3. Если в ходе общения с англоязычным ботом клиент посылает запрос на русском языке, бот возвращает контекст на русскоязычного бота.
Схема двуязычного бота

Схема многоязычного бота

предупреждение
Схема выше становится неприменимой в случаях, когда поддерживаемых языков три или больше: неясно, в каких случаях необходимо посылать context-switch, а в каких context-return. Слишком частое переключение контекста без возврата может привести к переполнению стека ботов.

Для реализации многоязычного бота в схему потребуется добавить еще один компонент — роутер. Бот-роутер — промежуточное звено между одноязычными ботами, который может только определять язык входящих запросов и перенаправлять их на бота, понимающего нужный язык.

Рассмотрим устройство бота, построенного по данной схеме:

  1. Клиент запускает бота и посылает ему сообщение /start. Сообщение обрабатывает бот-роутер, который переключает контекст на бота на языке, который выбран как основной.
  2. Если клиент посылает запрос, который невозможно распознать, бот определяет язык запроса. Если язык не изменился, продолжается взаимодействие с этим ботом.
  3. Если язык запроса отличается от языка бота, бот возвращает контекст в роутер, а роутер переключает контекст в бота на нужном языке.

Схема многоязычного бота

На следующем шаге мы рассмотрим возможную реализацию бота-роутера.