Поиск по сайту:

Как использовать AWS Lex для создания интерактивных чат-ботов


AWS Lex — это сервис Amazon для создания собственных чат-ботов. Построенный с использованием той же технологии машинного обучения, что и Alexa, Lex может распознавать намерения пользователя, запрашивать дополнительные данные, а затем выполнять запросы пользователей, используя Lambda для выполнения кода.

Что такое AWS Lex?

AWS Lex состоит из множества различных сервисов машинного обучения, большинство из которых доступны как отдельные сервисы AWS.

Первым шагом является распознавание речи — преобразование произносимого слова в текст, который машина может легче понять. Сервис Transcribe от AWS делает это достаточно хорошо, хотя он лучше подходит для приложений, не работающих в реальном времени, таких как субтитры к видео или расшифровка журналов аудиовызовов. Этот шаг необязателен, если вы создаете текстового чат-бота, но он важен для таких ботов, как Alexa и Siri.

Однако машины не понимают человеческий язык автоматически, поэтому извлечение полезных фрагментов из данного предложения является ключом к тому, чтобы чат-бот свободно реагировал на команды. AWS Comprehend делает это с высокой точностью и может выбирать и идентифицировать ключевые слова во входном тексте.

В сочетании с настраиваемой логикой для определения хода разговора Lex может отвечать на команды пользователя и отправлять задачи в Lambda для дальнейшей обработки. Во время разговора AWS Lex также может запрашивать у пользователей дополнительную информацию; например, если пользователь пытается записаться на прием, Лекс может запросить у пользователя подходящие дату и время.

Текстовый вывод Lex также можно преобразовать в речь с помощью AWS Polly, что обеспечивает бесперебойную работу чат-бота.

С учетом того, насколько измеряются все компонентные услуги, стоимость самого Lex на удивление проста: вы платите 0,004 доллара за голосовой запрос (4 доллара за тысячу) и 0,001 доллара за текстовый запрос (1 доллар за тысячу).

В отличие от большинства сервисов AWS, Lex в настоящее время доступен только в трех регионах:

  • us-east-1 (Северная Вирджиния)
  • us-west-2 (Орегон)
  • eu-west-1 (Ирландия)

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

Как работает Лекс?

Для начала перейдите к консоли Lex. Уже созданы несколько примеров приложений, которые вы можете попробовать сами, но мы продолжим и создадим нового пользовательского бота, чтобы вы могли увидеть, как они устроены.

Все начинается с намерений. Вы можете думать о намерениях как об определенных действиях, на которые способен ваш бот, таких как планирование встреч, заказ товаров и т. д. Для каждого намерения требуется несколько триггерных слов, называемых высказываниями, которые начинают разговор. Постарайтесь, чтобы они были довольно краткими; например, «записаться на прием» работает лучше, чем «я хотел бы записаться на прием».

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

Как только бот запускает намерение, он запрашивает у пользователя дополнительные данные. Технически вам не нужны никакие дополнительные данные, и вы можете попросить своего бота закончить разговор и сразу же выполнить свое действие.

Дополнительные данные поступают в виде слотов. Вы можете думать об этом как об аргументах для команды — бот должен запросить у пользователя каждый аргумент, прежде чем отправить свое окончательное действие. Аргументы чувствительны к типу, поэтому, если Lex спросит пользователя, сколько товаров он хотел бы заказать, он не примет в качестве ответа «зеленый».

В AWS уже есть множество готовых типов, большинство из которых идентифицируются AWS Comprehend. Если вы запрашиваете у пользователя дату, используйте AMAZON.DATE, а если вы запрашиваете адрес, используйте AMAZON.StreedAddress.

Каждый слот поставляется со своим собственным приглашением, которое отображается или читается пользователю. Например, если вы спрашиваете пользователя о дате его встречи, вы можете написать что-то вроде «На какой день вы хотите записаться на прием?»

Вы также можете создавать свои собственные типы слотов. Например, если вы предлагаете несколько разных видов встреч, вы можете добавить их в свой собственный тип. Lex расширяет значения ваших слотов, чтобы включить аналогичные ответы, которые вы можете получить от пользователей в реальном мире. Вы также можете ограничить свой пользовательский тип слота только точными словами и синонимами, если хотите, чтобы он был более строгим. Однако хорошее эмпирическое правило состоит в том, чтобы включать типы в приглашение слота, чтобы пользователь знал параметры. В противном случае некоторые люди могут застрять.

Кроме того, вы можете интегрировать слоты непосредственно в высказывания. Если пользователь говорит: Я хотел бы записаться на прием завтра, вы можете вырезать дополнительный шаг и считать, что это место выполнено. Вы можете сделать это, окружив имя слота скобками в определении высказывания:

an appointment on {AppointmentDate}

Это все настройки, которые нужны вашему боту, но большинству пользователей нравится видеть запрос подтверждения перед выполнением действия, как для спокойствия, так и для того, чтобы убедиться, что бот ничего не напортачил. Lex поддерживает это в настройках «Запрос подтверждения». Вы можете включить слотовые переменные в подсказку, которую Lex заполняет тем, что сказал пользователь (по крайней мере, насколько ему известно).

Отсюда вы можете нажать «Сборка», чтобы протестировать своего бота на встроенной панели тестирования. Он должен реагировать на ваше высказывание и запрашивать у вас каждый из слотов, которые вы ему дали. Он должен хорошо реагировать на изменения в структуре команд, но если это не так, вы можете добавить больше высказываний или расширить определения слотов.

По умолчанию Lex работает в режиме отладки и просто возвращает значения слотов после завершения. Вы можете изменить это, чтобы вызвать лямбда-функцию, передав значения слота в качестве параметров функции. Вам решать, что делать дальше. Вы также можете вручную получить больший контроль над Lex, используя хук проверки Lambda; это позволяет вам запускать лямбда-функцию всякий раз, когда пользователь отвечает, либо для проверки и разрешения ввода, либо для повторного запроса пользователя.

Как только ваш бот закончит работу, вы можете отправить ответное сообщение, сообщающее пользователю, как функция Lambda обработала его ввод, или просто поблагодарив его за службу.