Back-End

5 jul, 2018

Desenvolvendo Bots com Microsoft Bot Framework & Node.Js – Parte 04

Publicidade

Enquanto rolava o jogo Brasil x México, eu aproveitei o tempo disponível para falar sobre o LUIS. Então vamos dar continuidade à nossa série!

Vamos nessa?

Breve resumo

Nos últimos artigos, já falamos sobre o desenvolvimento de Bots com Microsoft Bot Framework e com isso, criamos bots simples.

Mas, como mencionado no artigo anterior, agora vamos colocar um pouco mais inteligência em nosso Bot, usando justamente um dos Serviços Cognitivos.

Mas o que seriam os Serviços Cognitivos da Microsoft? O próprio site nos explica o que seria:

“Turbine aplicativos, sites e bots com algoritmos para que eles vejam, ouçam, falem, entendam e interpretem as necessidades do usuário por meio de métodos naturais de comunicação. Transforme os seus negócios com a inteligência artificial hoje mesmo.”

Resumindo, é uma coleção de API’s inteligentes que nos permite deixar as nossas aplicações mais interativas e que chega mais ‘próximo’ da linguagem humana.

E os principais serviços cognitivos disponíveis na plataforma da Microsoft, são:

Nesse artigo, estaremos explorando um dos serviços cognitivos da Microsoft, que nos permite deixar a nossa aplicação compreender melhor a linguagem humana, que é o LUIS!

Mas afinal, o que é LUIS?

LUIS (Language Understanding Intelligent Service) é um serviço de nuvem, que tem como objetivo fazer com que a interação entre ser humano e computador seja mais simples. O LUIS pode interpretar texto, extrair intenções ou entidades ao mesmo tempo.

O mais legal disso tudo é que você pode usar o LUIS em diferentes contextos de aplicações:

  • Chatbots
  • IOT Devices
  • Commerce Chatbot

Nessa imagem temos um modelo exemplo de uma arquitetura de um Chatbot que usa a API do LUIS:

Os conceitos importantes de LUIS, são:

  • Utterance (Enunciados – input):

Pode ser uma mensagem falada ou escrita. Resumindo, são os enunciados. Ex.: “Quero comprar bilhete para Paris!”

  • Intent (Intenções – output):

Representa as ações que os usuários querem obter. Ex.: App de viagem: BookFlight

  • Entity (Entidades – output):

Representa as informações mais detalhadas que serão relevantes ao enunciado. Ex.: “Reserve um bilhete para Paris.”

Caso queiram saber mais informações detalhadas sobre o LUIS, usem e abusem da documentação neste link.

Feito esse pequeno resumo, vamos ao que interessa! Vamos começar a usar o LUIS!

Usando o LUIS

Para usarmos o LUIS, vamos acessar o site oficial desse Serviço Cognitivo: https://www.luis.ai/home e depois clique em Log in/Sign in (para acessar a página há necessidade de criar uma conta Microsoft de e-mail).

Depois que fizer o login, vocês verão a seguinte página abaixo. Cliquem em “Create New App“:

Depois de clicar em “Create New App“, abrirá uma janela popup como segue a imagem abaixo e depois clique em “Done“:

Seguindo esses passos, o site direcionará para a página da aplicação criada:

Vamos criar as Intenções!

Nas palestras que eu tenho feito sobre uso de Bots com LUIS, eu tenho comentado a importância de sabermos usar cada contexto de palavras de acordo com as intenções e ações para justamente facilitar o LUIS.

Nesta parte, vamos criar as Intents (Intenções) da nossa aplicação. Para isso, vamos adicionar várias intenções. Façam o seguinte:

Clique em Intents. Ao fazermos isso, aparecerá uma nova página para adicionarmos as nossas intenções, conforme segue a imagem abaixo:

Feito isso, clique agora em “Create new Intent“. É justamente aí que iremos criar as nossas intenções. Abrirá uma nova janela, conforme segue a imagem abaixo, e depois clique em “Done“.

Depois de clicarmos em “Done“, seremos direcionados para uma outra página do LUIS, conforme segue a imagem abaixo:

Agora criaremos cada frase que poderá ser usadas dentro das nossas intenções:

Notem que são possíveis frases que o usuário poderá usar durante uma determinada solicitação do ChatBot. Sintam-se a vontade para incluir mais intenções aqui. Fica esse exercício para vocês fazerem.

Definindo a Entities (Entidades)

Nas palestras também eu sempre digo que as entities seriam o substantivo principal que estaremos lidando. Por ex.: numa aplicação que lida com pedido de pizza, qual seria a nossa entidade? a Pizza! É de suma importância saber identificar o que é cada um: o que seria a Entidade e o que seriam as Intenções.

Para a nossa aplicação, como estamos lidando com uma Lanchonete, nossa entidade será: ”Lanche’. Depois que definirmos a nossa Entidade, criaremos ela no dashboard na página do LUIS, conforme segue a imagem abaixo:

Feito isso, vamos agora incluir uma Entidade pré-definida. No site do LUIS, podemos ver uma lista de Entidades pré-definidas que podemos usar em nossa aplicação. No nosso caso, usaremos a “DateTime“.

Clique em “Add or remove prebuilt entities” e coloque na label “datetime”. Selecione e clique em “Done“, conforme segue a imagem abaixo:

Agora estamos ‘listos’ e prontos para melhorar os nossos modelos criados no Intents. Vamos prosseguir!!!

Especificando melhor o nosso Modelo

Voltem agora no Intents para melhorarmos nosso modelo da seguinte maneira (incluir mais intenções aqui. Fiz algumas alterações, conforme segue a imagem abaixo):

Feito isso, agora vamos ‘Treinar’ os nossos Intents. Para isso, cliquem no botão: ‘Train” (localizado no canto esquerdo).

Depois de clicar em ‘Train“, clique em “Publish” e vai abrir a seguinte página, conforme a imagem abaixo:

É de suma importância que escolham a opção to TimeZone de São Paulo. Notem que, quando for gerar a key, aparecerá uma url e no final dela com o parâmetro -180.

Peguem essa mesma key e guardem, pois iremos precisar para usar na nossa aplicação. Após isso, cliquem em “Publish“.

Feito! Agora estamos prontos para começar a codificar o nosso Bot com Node.js! Vamos nessa!

Criando um ChatBot com: Node.Js + LUIS!

Agora vou pedir para vocês abrirem o VS Code e criarem a seguinte estrutura da aplicação, conforme a imagem abaixo:

Notem que criei uma nova pasta chamada “parte-4” e dentro dela um arquivo chamado “lanchoneteApp.js“. É justo aí que vamos criar a nossa lógica que ligará com o LUIS. E também criei um outro arquivo “.env“. Esse arquivo é onde estará a url gerada lá na página do LUIS, pois como esse arquivo está listado no .gitignore, quando fizermos o commit da aplicação ele não será enviado ao repositório.

Abram o arquivo: package.json e adicionem os seguintes pacotes:

  • dotenv-extended: para saber mais a respeito desse pacote, cliquem aqui.
  • moment: para saber mais a respeito desse pacote, cliquem aqui.

Copiem e colem o código do “lanchoneteApp.js“:

E agora incluam a url contida no site do LUIS dentro do arquivo .env. Feito isso, testaremos a nossa aplicação no Bot Emulator!

Beleza! Feito isso, abra o cmder ou prompt comando, vá até o local onde está o arquivo “lanchoneteApp.js” e digite: nodemon lanchoneteApp.js.

Vejam como fica a nossa interação com o ChatBot com o pedido da Lanchonete Rio Mais:

O pacote “moment” é responsável por fazer a lógica do tratamento de tempo dentro da aplicação.

Agora vamos verificar e ver se o nosso pedido irá chegar a tempo:

Note que o usuário perguntou que horas chegaria o pedido dele, e com isso o LUIS foi até o endpoint de “Verificar” e retornou a resposta para o usuário. Legal, né?

Mas, vamos supor que esse pedido esteja demorando de mais e o usuário não queira mais; vamos ver se a intenção criada no LUIS funcionará para o cancelamento de pedido?

Quando o usuário digitou “cancelar pedido” dentro de um contexto de uma frase, o LUIS automaticamente entendeu que o endpoint era justo de “Cancelar“, e retornou ao usuário a resposta de acordo com o que foi solicitado. Nosso chatbot da Lanchonete Rio Mais está completo e funcional!

Se vocês notarem, dentro da página do LUIS há uma parte pra analisar todas as inclusões que o usuário está escrevendo. Ou seja, diariamente esse chatbot ficará mais inteligente conforme você for ‘treinando’ ele! E por mais que você não tenha definido nos Intents, o LUIS mostrará qual será a probabilidade que aquela determinada frase digitada pelo usuário pertencerá ao determinado Intent.


Muito legal, não é mesmo? Dá para fazer muita coisa legal com o LUIS. Fica a dica para vocês deram uma lida na documentação desse maravilhoso e incrível serviço cognitivo da Microsoft!

Palavras Finais

Estes últimos quatro artigos eu fiz com o objetivo de vocês conhecerem mais o SDK do Bot Framework, que nos permite desenvolver incríveis ChatBots, tanto em Javascript, C#, PHP, Ruby e Python.

Lembrando que, a partir dessa semana, estarei de volta dando continuidade às vídeo aulas do Hands on de Bots com Node.Js.

Espero que tenham gostado dessa série de artigos e caso tenham alguma dúvida inerente a algum artigo não hesitem em deixar um Issue no repositório do Github dessa série que se encontra aqui.

Até o próximo artigo, pessoal! Abraços a todos.