Облачные вычисления, Программирование

Создание чат-бота с непрерывной поисковой системой для веб-сайта с использованием Amazon Lex, Google Knowledge Graph и CloudFront

Термин Chabot был образован от оригинального термина «ChatterBot», созданного еще в 1994 году, сам термин означает машину, которая может вести человеческие разговоры. Хотя интересно узнать о чат-боте, реальная сила заключается в решении реальных сценариев использования в деловом мире, где вы можете автоматизировать большую часть ручного труда, выполняемого людьми физически.

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

Amazon предоставляет мощный сервис Amazon Lex, который может создавать чат-бота с ИИ для разговоров, теперь Amazon Lex использует тот же механизм общения, что и Amazon Alexa (голосовая система).

Сегодня мы создадим поискового бота с помощью Amazon Lex, который сможет находить для нас информацию в Интернете и развертывать его с помощью веб-интерфейса с веб-приложением, размещенным на AWS CloudFront.

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

Важная терминология:

  1. Намерение: действие, которое хочет выполнить пользователь. Например, бронирование рейса мы называем намерением забронировать рейс.
  2. Высказывание: Чтобы действовать в соответствии с этим намерением, какими способами пользователь может вести беседу, например. Я хочу забронировать рейс, можете ли вы мне помочь с бронированием рейса и т. Д.
  3. Слот: это параметры любого разговора, когда пользователь произносит слова для выполнения своего намерения. Например. Забронируйте рейс на 10:00 между Нью-Йорком и Парижем. Здесь у нас есть 3 слота: время, источник и место назначения.
  4. Типы рекламных мест. Каждый слот должен иметь тип данных, например, 10:00 - это дата, источник и место назначения - города.
  5. Score Card: карточка ответа, созданная ботом, с информацией в формате пользовательского интерфейса карточки с кнопками внизу. Карточка предоставляет контекст в визуальном формате с использованием изображений. Например. Запрос на заказанные продукты возвращает фотографию продукта.
  6. Сеть знаний: Эта терминология не относится к чат-ботам, но более близка к моделированию отношений сущностей, которое включает в себя набор или сеть взаимосвязанных сущностей.
  7. Формирование облака: не только для разговорного ИИ, но этот сервис AWS позволяет создавать всю инфраструктуру в виде кода (например, веб-приложения), который можно развернуть в любом месте за считанные минуты.
  8. CloudFront: не путайте его с формированием облака. Это сетевая служба доставки контента, которая кэширует статические данные (изображения, видео или страницы) в ближайшем к пользователю периферийном месте, что ускоряет загрузку приложений. .

Мы выполним следующие шаги, чтобы создать комплексное решение.

  1. Мы начнем с создания чертежа нашего чат-бота.
  2. Затем мы настроим сервис графа знаний
  3. Добавьте лямбда-функцию AWS для выполнения ответа
  4. Развертывание веб-сайта с использованием стека Cloudformation для пользовательского интерфейса бота

Начнем с первого шага:

  1. Создание чертежа чат-бота:

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

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

Для другой информации я оставил их по умолчанию.

Первый шаг - создать намерение для определенных действий, которые пользователи могут выполнять. В этом случае мы создадим WelcomeIntent для приветствия пользователей.

Теперь мы отметим все возможные высказывания, которые пользователь может попросить назвать это намерение (в нашем случае приветствие).

После того, как вы записали все высказывания, вы добавите ответы, которые должен давать ваш чат-бот, используя опцию ответа:

Давайте проверим первое намерение чат-бота. Для этого вам нужно собрать бота и использовать раздел тестовых ботов.

Теперь у нас готова простая база ботов, давайте сделаем еще один шаг, добавив новое намерение: SearchCountry. Это намерение позволяет пользователям просить чат-бота искать информацию о стране.

2. Настройте службу Google Knowledge Graph:

Теперь нам также нужна поисковая система, которая может искать для нас информацию о странах. Мы будем использовать сервис Google Knowledge Graph API.

Для этого Google создал хорошо документированный раздел о том, как начать работу с сервисом API поиска Google Knowledge Graph.



По сути, мы получим ключ API, чтобы использовать API службы графа знаний и использовать любой язык программирования для отправки HTTP-запросов с параметрами строки запроса (тот же механизм работает, когда искать что-либо в поиске Google, наблюдая за адресной строкой URL).

3. Добавьте лямбда-функцию AWS для выполнения ответа.

Как только у нас будет доступ к службе, мы добавим новое намерение и свяжем это намерение со службой Google.

Для этого мы создадим новое намерение для действия поиска пользователя: SearchQuery.

Теперь мы должны идентифицировать слот (объект) в пользовательском запросе, в этом случае цель заключается в поиске информации о стране, следовательно, мы можем сделать вывод, что страна является одним из слотов. Мы добавим слот с именем country и выберем тип AMAZON.country.

Теперь мы добавим высказывания, но на этот раз мы заменим фактическое слово запроса на заполнитель слота, в нашем случае это страна.

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

Мы перейдем к консоли поиска и в разделе вычислительных сервисов выберем AWS lambda.

Мы создадим новую функцию AWS Lambda с помощью кнопки создания функции в правом верхнем углу.

Из предопределенных шаблонов давайте выберем один шаблон, запрограммированный на Python, как показано ниже:

Далее мы заполним соответствующую информацию для создания нашей функции

После создания функции давайте добавим следующий код и прокомментируем существующее определение функции.

def search_query (intent_request):

query = get_slots (intent_request) [«Страна»]
params = {
'query': query,
'limit': 10,
'indent': True,
'key': api_key,
}

# url = service_url + '?' + Urllib.parse.urlencode ( params)
# response = json.loads (urllib.request.urlopen (url) .read ())

# response = json.loads (requests.get (url))
url = service_url
response = json.loads (requests.get (url, params = params) .content)
попробуйте:
информация = response ['itemListElement'] [0] [ 'результат'] ['подробное описание'] ['articleBody']

кроме:
information = 'Извините, не удалось найти то, что вы ищете.'

return close (intent_request ['sessionAttributes'],
'Выполнено',
{'contentType': 'PlainText',
'content': информация})

def dispatch (intent_request):
«» »
Вызывается, когда пользователь указывает намерение для этого бота.
« »»

logger.debug (‘dispatch userId = {}, intentName = {}’. format (intent_request [‘userId’], intent_request [‘currentIntent’] [‘name’]))

intent_name = intent_request [‘currentIntent’] [‘name’]

# Отправка обработчикам намерений вашего бота
if intent_name == ‘SearchQuery’:
return search_query (intent_request)

вызвать исключение («намерение с именем» + intent_name + «не поддерживается»)

«» »- - Главный обработчик - -« »»

def lambda_handler (event, context):
«» »
Маршрутизация входящего запроса на основе намерения.
Тело запроса в формате JSON предоставляется в слоте события.
« » ”
# По умолчанию обрабатывать запрос пользователя как поступающий из часового пояса America / New_York.
os.environ ['TZ'] = 'America / New_York'
time.tzset ()
logger.debug ('event.bot.name = {}'. format (event ['bot'] ['name']))

возвратная отправка (событие)

Вы можете найти полную лямбда-функцию здесь.

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

После развертывания лямбда-функции мы можем выбрать эту конкретную лямбда-функцию для выполнения ответа чат-бота.

Теперь давайте создадим бота снова, и теперь самое время проверить, может ли наш бот искать информацию, относящуюся к стране, или нет.

4. Развертывание веб-сайта с использованием стека Cloudformation для пользовательского интерфейса бота

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

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

Убедитесь, что выбранный вами регион такой же, как у нашего бота:

Северная Вирджиния: Ссылка

Орегон: Ссылка

Ирландия: Link

Сидней: Ссылка

Вам также нужно будет заполнить некоторые данные для бота, как указано ниже:

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

Теперь давайте перейдем к доменному имени развернутой конечной точки CloudFront (это служба, которая размещает статические данные в ближайших к пользователю периферийных местоположениях).

А теперь давайте поиграемся с нашим развернутым поисковым ботом. Откройте URL-адрес в новой вкладке, и вы увидите, что ваш чат-бот развернут как полную страницу.

Поздравляю. У вас есть готовый базовый рабочий поисковый бот, теперь вы можете дополнительно улучшить его, используя Iframe в качестве пользовательского интерфейса и ограничиваясь небольшим диалоговым экраном, а не полноэкранным. Дополнительную информацию о фрагменте кода можно найти на странице SnippetUrl. Кроме того, вы можете включить сервис AWS Incognito для обеспечения уровня безопасности, определяющего, кто может получить доступ к веб-приложению, но это выходит за рамки данной публикации. Сообщите мне свои мысли в разделе ответов, если вы хотите узнать больше.

Если вам действительно понравился этот пост, следите за обновлениями, чтобы увидеть больше руководств по искусственному интеллекту / машинному обучению, аналитике данных и бизнес-аналитике.

Зацени меня в LinkedIn