Node.js

Criação de um chatbot com Couchbase, Amazon Lex e Node.js

Nic Raboy é um defensor das modernas tecnologias de desenvolvimento móvel e da Web. Ele tem experiência em Java, JavaScript, Golang e uma variedade de estruturas, como Angular, NativeScript e Apache Cordova. Nic escreve sobre suas experiências de desenvolvimento relacionadas a tornar o desenvolvimento móvel e da Web mais fácil de entender.

Nic Raboy

Não há dúvida de que o futuro será automatizado. Temos veículos autônomos automatizados, assistentes de voz, call center e bots baseados em texto, e muito mais. No entanto, o que é necessário para trazer a automação para sua empresa?

A resposta curta é que não é preciso muito mais do que criar aplicativos padrão se você estiver usando as ferramentas certas.

Neste tutorial, vamos explorar a criação de um chatbot que pode tirar parte da carga de trabalho de seus funcionários humanos, aproveitando Amazon Lex para aprendizagem profunda e interfaces de conversação, Couchbase NoSQL como o banco de dados, e Node.js para interagir com o banco de dados.

Requisitos para este tutorial

Há alguns requisitos de software que devem ser atendidos para que este tutorial e projeto sejam bem-sucedidos:

  1. O Couchbase Server 5.0+ deve estar instalado e disponível remotamente.
  2. Uma conta do AWS.
  3. Docker ou um software de máquina virtual.

Como usaremos produtos da Amazon, como Lex e Lambda, é necessário ter uma conta AWS disponível. Ambos os produtos são pagos conforme o uso, portanto, uma camada gratuita provavelmente será mais do que suficiente. Como usaremos produtos da Amazon, esses produtos precisam acessar o Couchbase. Por esse motivo, o Couchbase não pode ser executado a partir do host local, ele deve ser instalado remotamente em algum lugar. Por fim, como o SDK do Couchbase Node.js usa dependências nativas, o Docker ou algum outro software de máquina virtual deve estar disponível para baixar as dependências como Linux, que é o que o Lambda espera.

Configuração do Amazon Lex para interação com o usuário

Antes de entrarmos no código, podemos dedicar nosso tempo à configuração do Lex. Embora o Lambda nos permita tornar nosso bot útil, você não precisa de nenhum tipo de backend para brincar com o Lex.

Ir para Lex em seu portal da AWS e escolha criar um novo bot personalizado.

aws-lex-custom-bot

Como estamos criando um bot baseado em texto, a voz de saída deve ser nenhuma. Todo o resto deve ser apenas o padrão ou o que você considerar mais apropriado.

Com o bot personalizado criado, a primeira etapa é começar a criar intents. Para este exemplo, vamos criar um Sobre a intenção, GetProfileIntent e UpgradeServiceIntentdois dos quais usarão o Couchbase para obter informações.

Vamos começar com o Sobre a intenção.

aws-lex-aboutintent

A ideia por trás do Sobre a intenção é apenas para começarmos. Não usaremos o banco de dados para essa intenção, mas ele acabará se conectando à nossa função Lambda. Essa intenção é nos fornecer informações sobre o bot.

Para acionar nossa intenção, precisamos definir alguns exemplos de enunciados que são basicamente uma lista de frases possíveis. Veja, por exemplo, o seguinte:

As frases acima são o que um usuário pode perguntar. Quanto mais, melhor, pois o Lex aprenderá com os dados de treinamento e será capaz de preencher as lacunas se alguém perguntar algo que não esteja na lista.

Por enquanto, vamos deixar Atendimento como Retornar parâmetros ao clientemas, eventualmente, mudaremos para o Lambda.

Vamos dar uma olhada em GetProfileIntent Agora.

aws-lex-getprofileintent

Essa intenção é um pouco diferente porque queremos poder aceitar informações dinâmicas do usuário, algo que mudará entre diferentes usuários. Podemos permitir informações dinâmicas por meio de variáveis de slot.

Veja os seguintes exemplos de enunciados que contêm variáveis de slot:

Nem todos os exemplos de enunciados precisam conter variáveis de slot, mas observe que a variável está entre colchetes. Cada variável usada pode ser definida na configuração de intenção. Por exemplo, nosso AccountId é definido como um AMAZON.EmailAddress com uma frase de prompt padrão.

Então, o que isso significa?

Quando o Lex determina que nossa variável de slot existe, ela deve ser um endereço de e-mail válido. Se o Lex determinar que estamos tentando executar o comando GetProfileInfo mas a variável não existe, ele usará nossa frase de prompt para solicitar ao usuário as informações da variável. Isso torna a conversa fluida, mas sem omitir nenhum dado necessário.

Por fim, vamos dar uma olhada em UpgradeServiceIntent.

aws-lex-upgradeserviceintent

O UpgradeServiceIntent é semelhante ao nosso GetProfileIntentmas, desta vez, temos duas variáveis de slot possíveis. Veja os seguintes exemplos de enunciados:

Lembre-se de que dois exemplos de enunciados não são suficientes, mas espero que você tenha entendido a ideia de como as variáveis podem ser usadas. A ideia é que você queira que a conversa com esse chatbot seja fluida como a de uma pessoa real, pois assim você poderá substituir a pessoa real pelo bot.

No entanto, há uma exceção com o UpgradeServiceIntent variáveis de slot. As Serviço é um slot personalizado que devemos criar.

aws-lex-custom-slot

Em nosso exemplo, queremos criar um CustomServiceSlot em que o nome não é importante, mas os dados são. Queremos definir as coisas possíveis que podem existir dentro da variável. Em nosso exemplo, estamos dizendo que o slot pode ser qualquer um dos seguintes:

  • Prata
  • Ouro
  • Ultimate

Estamos assumindo que os três itens acima são serviços possíveis. Este é apenas um exemplo e suas necessidades podem variar.

Nesse momento, você pode salvar cada uma das três intenções e criar seu bot.

Desenvolvendo a lógica do AWS Lambda com JavaScript simples e Couchbase

Temos nossas intenções, nossos exemplos de enunciados e nossas variáveis de slot. É hora de criar a lógica para responder ao usuário quando as intenções forem acionadas.

Você já deve ter o Couchbase instalado, configurado e pronto para usar. O objetivo deste tutorial não é como configurar o Couchbase, mas como usá-lo com o Lex.

No Couchbase, adicione o seguinte documento ao seu Bucket:

Vamos supor que o documento acima seja um cliente e que ele tenha atualmente o plano "Silver", seja lá o que isso signifique. Em teoria, esse exemplo poderia ser útil para qualquer organização que tenha uma linha de chamada ou de bate-papo. Por exemplo, pense na Comcast para internet. Se você criar um bot, seus usuários poderão ligar ou conversar por chat e solicitar alterações em suas contas. O bot poderia interpretar isso e fazer as alterações sem que uma pessoa as fizesse.

Em seu computador, crie um novo diretório e execute o seguinte:

Os comandos acima criarão um novo package.json e instalar o arquivo SDK do Couchbase. Estamos usando o URL do GitHub porque ele tem dependências nativas que precisam ser criadas a partir da fonte. Se você não tiver o toque crie um comando index.js manualmente.

Dentro do index.js adicione o seguinte código padrão:

Há alguns aspectos a serem observados no código acima. Eu adicionei apenas informações de espaço reservado para o host, nome de usuário, senha e Bucket. Você precisará substituí-las pelas informações da sua instalação real do Couchbase.

O que está acontecendo acima é que estamos criando uma função Lambda com uma função de despachante. Quando o Lex recebe uma mensagem de bate-papo, ele cria um objeto de solicitação a ser enviado ao Lambda. Em nosso cenário, o Lambda pega o objeto de solicitação e o alimenta em um expedidor depois de estabelecer uma conexão com o banco de dados. Dentro do despachante, um objeto de resposta é criado e a intenção é analisada.

No momento, todas as intenções são más intenções, pois só atingirão a condição padrão. Vamos mudar isso.

Vamos começar nos preocupando com nosso Sobre a intenção por ser o mais simples:

Se a Lex determinar que o usuário está solicitando informações e escolher a opção Sobre a intenção responderemos com uma mensagem básica, mas apropriada. Caso contrário, a solicitação continuará falhando.

Agora vamos dar uma olhada em uma intenção mais complicada, por exemplo, a GetProfileIntent:

A ideia por trás dessa intenção é que, quando o usuário solicita informações sobre seu perfil, o documento deve ser retornado. O que estamos fazendo é criar um Consulta N1QL com o e-mail como a condição. Lembre-se da Lex AccountId é apenas um e-mail para o nosso exemplo. Os resultados dessa consulta são serializados e retornados ao Lex para serem exibidos ao usuário.

Agora vamos complicar um pouco mais as coisas. Vamos dar uma olhada em nosso UpgradeServiceIntent:

Vamos fazer outra consulta N1QL, mas, desta vez, uma consulta ATUALIZAÇÃO operação. A ideia é que o usuário queira atualizar seu serviço. Ele fornece as informações de sua conta e o serviço que deseja, e nossa lógica Lambda lida com isso sem intervenção humana.

Não estamos fazendo nenhuma higienização de dados, mas poderíamos.

Neste ponto, nossa função Lambda está pronta. Podemos responder a três consultas diferentes por meio de um bate-papo humano fluido com Lex. Mencionei que o SDK do Couchbase usa dependências nativas. Como o foco deste tutorial não é o Lambda, vou indicar a você um tutorial anterior que escrevi intitulado, Implantação de dependências nativas do Node.js no AWS Lambda.

Depois de carregar o pacote Lambda, você precisa voltar ao painel do Lex e, para cada intenção, escolher Função AWS Lambda como o Atendimento opção. Uma vez feito isso, reconstrua e seu chatbot deverá obter os dados do seu código Lambda, que está obtendo os dados do Couchbase.

Conclusão

Você acabou de ver como criar um chatbot simples, mas potencialmente útil, com o Amazon Lex e o Couchbase. Os chatbots são muito úteis e provavelmente são o futuro quando se trata de substituir humanos em call centers ou outras linhas de suporte.

Em um cenário de produção, você provavelmente desejará fazer a validação de dados em qualquer coisa que venha do Lex. Por exemplo, verificar se os dados existem ou até mesmo fazer as coisas com mais segurança. Neste exemplo, eu poderia alterar o serviço de qualquer pessoa apenas fornecendo o endereço de e-mail. É provável que você queira alterar isso na produção.

Esta postagem foi trazida a você pelo Couchbase Programa de Redação Comunitária

Compartilhe este artigo
Receba atualizações do blog do Couchbase em sua caixa de entrada
Esse campo é obrigatório.

Autor

Postado por Laura Czajkowski

Laura Czajkowski é a Snr. Developer Community Manager da Couchbase, supervisionando a comunidade. Ela é responsável pelo nosso boletim informativo mensal para desenvolvedores.

Deixe um comentário

Pronto para começar a usar o Couchbase Capella?

Iniciar a construção

Confira nosso portal do desenvolvedor para explorar o NoSQL, procurar recursos e começar a usar os tutoriais.

Use o Capella gratuitamente

Comece a trabalhar com o Couchbase em apenas alguns cliques. O Capella DBaaS é a maneira mais fácil e rápida de começar.

Entre em contato

Deseja saber mais sobre as ofertas do Couchbase? Deixe-nos ajudar.