Пошаговое руководство по созданию быстрого чат-бота для вопросов и ответов
Amazon объявила об общедоступности Amazon Kendra несколько недель назад. Kendra - это высокоточная и простая в использовании служба корпоративного поиска, основанная на машинном обучении.
В этом посте я создам решение для чат-бота в формате вопросов и ответов, используя React с Amplify, WebSocket API в AWS API Gateway , AWS Fargate и Amazon Kendra.
Решение предоставляет диалоговый интерфейс для вопросов и ответов. Этот чат-бот позволяет пользователям задавать свои вопросы и быстро получать актуальные ответы.
О чем мы расскажем в этом посте:
- Создайте индекс Amazon Kendra, извлеките вопросы и ответы из полуструктурированного документа в FAQ Kendra.
- Разверните API WebSocket в API Gateway для обработки вопросов и ответов на сообщения.
- Создайте приложение React и используйте AWS Amplify для подключения и взаимодействия с этим чат-ботом через WebSocket.
- Создайте сервис в AWS Fargate, который позволит нашему боту вызывать API Кендры, чтобы предоставить ответ и отправить его обратно пользователю.
На следующей схеме показана архитектура вышеуказанных шагов:
Почему важен AWS Fargate?
Более простой подход к созданию чат-бота - использовать лямбда-функцию для запроса Amazon Kendra без использования Fargate. Однако с помощью AWS Fargate или EC2 мы можем расширить чат-бота пользовательскими моделями ИИ, чтобы сделать нашего бота более человечным, например. Мы можем создать чат-бота на основе модели Hugging Face State of the Art Conversational AI и запрашивать у Кендры только определенные данные.
Если ваша программа представляет собой длительную вычислительную задачу, которая требует большего объема памяти и более высокой производительности, Fargate, вероятно, будет лучшим вариантом.
Предпосылки
- Создать учетную запись AWS
- Установите последнюю версию aws-cli
- Установите Amplify cli
- Базовое понимание React
- Базовое понимание Docker
- Базовое понимание CloudFormation
- Установите или обновите Serverless Framework до последней версии.
- Jq установлен (необязательно)
А теперь приступим!
Создание индекса Amazon Kendra
Давайте создадим индекс Кендры. Amazon Kendra - это высокоточная и простая в использовании служба поиска для предприятий, основанная на машинном обучении. Kendra поддерживает неструктурированные и частично структурированные документы, такие как часто задаваемые вопросы, хранящиеся в S3, в нашем случае мы будем использовать часто задаваемые вопросы.
Сначала давайте загрузим набор данных QnA и загрузим его в S3. Мы можем использовать
Microsoft Research WikiQA Corpus для нашего чат-бота.
После загрузки набора данных давайте преобразуемся в поддерживаемый Kendra формат csv, как показано ниже:
Используйте следующий сценарий для преобразования набора данных и загрузки преобразованного CSV-файла в существующую корзину S3 my-kendra-index
:
Теперь мы готовы создать индекс Кендры. Чтобы создать индекс Кендры, выполните следующие действия:
- На консоли Amazon Kendra выберите Запустить Amazon Kendra.
- Создайте индекс и введите имя индекса, например
my-aq-index
. - Для роли IAM выберите
Create a new role
, чтобы создать роль, позволяющую Amazon Kendra получать доступ к журналам CloudWatch. - Создать индекс.
После создания индекса Кендры мы можем добавить наш документ с часто задаваемыми вопросами:
- Добавьте FAQ из консоли Amazon Kendra.
- Для S3 просмотрите S3, чтобы найти свою корзину, и выберите csv-файл FAQ. Здесь мы используем
s3://my-kendra-index/faq/faq.csv
. - Для роли IAM выберите
Create a new role
, чтобы разрешить Amazon Kendra доступ к объекту содержимого FAQ в корзине S3. - Добавьте FAQ.
Теперь, когда у нас есть рабочий индекс Кендры, перейдем к следующему шагу.
Развертывание WebSocket API в API Gateway для обработки сообщений QnA
В этом разделе мы создадим 1) API WebSockets в AWS API Gateway, 2) создадим лямбда-функции для управления маршрутами WebSockets ($ connect, $ disconnect, sendMessage ) и 3) создайте DynamoDb для хранения идентификаторов подключения WebSockets и имен пользователей.
Мы будем использовать Serverless Framework для создания и развертывания всех необходимых ресурсов. давайте создадим новый бессерверный проект и добавим в serverless.yml
следующую конфигурацию:
Обратите внимание, что идентификатор клиента приложения Cognito (/chatbot/dev/app_client_id
) и идентификатор пула пользователей Cognito (/chatbot/dev/user_pool_id
) в serverless.yml
еще не созданы. Здесь мы ссылаемся только на сведения о Cognito как SSM Parameters
, на следующем шаге мы создадим пул пользователей Cognito, используя Amplify Cli
, а затем мы может изменять связанные параметры SSM из консолиSystem Storage Manager
.
После изменения serviceless.yml
обновите handler.js
, чтобы создать лямбда-функции для маршрутов WebSockets: $connect
with _16 _, _ 17_, sendMessage
:
Выполните следующие команды, чтобы развернуть WebSocket API:
$sls deploy --stage dev --region YOUR_REGION
Создание приложения React с помощью AWS Amplify
В этом разделе мы создадим веб-приложение с использованием React и AWS Amplify с функцией аутентификации.
Полный проект находится в моем репозитории Github, в каталоге проекта вы можете найти следующие папки:
amplify/.config/
иamplify/backend/
.project-config.json
в.config/
папке.backend-config.json
вbackend/
папке.- Файлы CloudFormation в папке
backend/
.
Давайте загрузим исходный код и повторно инициализируем существующий проект Amplify, запустив:
$amplify init
затем нажмите изменения:
$amplify push
и развернуть:
$amplify
publish
Мы получим URL-адрес веб-приложения после развертывания проекта:
Теперь войдите в сервисную консоль AWS Cognito, и вы увидите, что пул пользователей AWS Cognito создан. Скопируйте идентификатор пула пользователей и идентификатор клиента приложения и используйте их в качестве параметров SSM, которые мы уже создали на предыдущем шаге.
Создание сервиса чат-бота в AWS Fargate
В этом разделе мы создадим задачу бота для запуска нашего сервиса чат-бота в AWS Fargate. Сначала задача чат-бота подключается к API веб-сокета. Затем, когда пользователь задает вопрос, бот может запросить индекс Кендры, и Кендра отобразит соответствующий ответ и отправит его обратно пользователю, задавшему вопросы.
Чтобы развернуть сервис Fargate, выполните следующие действия:
- Загрузите скрипт чат-бота и Dockerfile здесь.
- Создайте Docker, отметьте репозиторий Amazon ECR и отправьте образ в ECR. Дополнительные сведения см. В официальном руководстве AWS.
- Загрузите шаблоны CloudFormation и сценарии bash здесь.
- При использовании типа запуска Fargate требуется режим
awsvpc network
. Нам нужно развернутьVPC
иSecurity Groups
:
$bash create-infra.sh -d dev
5. Создайте определение задачи.
$bash create-task.sh -d dev
6. Разверните сервис чат-бота в AWS Fargate.
$bash deploy-service.sh -d dev
Основная логика находится здесь:
(Необязательно) Расширение чат-бота с помощью модели ConvAI
Чтобы расширить чат-бота с помощью модели ConvAI, вы можете попробовать приведенный ниже пример сценария, обратите внимание, что вам нужно будет приложить больше усилий, чтобы обучить модель и поместить ее в докер или Amazon EFS.
После того, как служба будет развернута, мы сможем задавать вопросы боту. Давайте зайдем в приложение React и попробуем его вживую!
Как очевидно выше, использования одних ключевых слов достаточно, чтобы система ответила правильным ответом.
Если вы хотите узнать больше о Amazon Kendra, есть официальное руководство по созданию чат-бота с помощью Лекса и Кендры здесь.
Я надеюсь, что вы нашли эту статью полезной. Исходный код этой публикации можно найти в моем репозитории GitHub.