Criando um robô conversacional inteligente com o Wit.ai

filipeguelber
bawilabs
Published in
6 min readNov 19, 2016

[For english version, click here!]

A interação com o usuário passou por diversas fases: aplicativos desktop, web, mobile e agora os chatbots. Talvez seja cedo para dizer que os chatbots são os novos apps, mas não dá pra esconder as vantagens de um chatbot:

  1. Bots são muito mais fáceis de instalar do que mobile apps.
  2. Bots são facilmente distribuídos.
  3. Apps de qualidade são caros para serem construídos, mantidos e deployados.
  4. Existem inúmeros casos de uso de “cauda longa” bem específicos que não justificam o uso de um mobile app.
  5. Apps de mensagens são ubíquos e dominam o engajamento de clientes mobile.
  6. As pessoas estão passando por uma fadiga de aplicativos.
  7. As interações com Bots são intrinsecamente bi-direcionais.
  8. Mover a complexidade para a nuvem reduz a carga cognitiva do usuário. Todo mundo sabe, por exemplo, como encontrar um restaurante japones aberto perto de si: basta ir ao google, pesquisar, achar o enderço e olhar no maps. Entretanto, não seria mais fácil perguntar ao bot: ‘Ache o restaurante japones melhor avaliado e perto de mim’?
  9. Bots são extremamente portáveis para diversas plataformas.
  10. Ciclo de desenvolvimento de Bots são extremamente rápidos.
  11. Seres humanos são muito ligados e naturalmente feitos para linguagem e conversação.
  12. Não subestime o poder dos emojis. 👊

A construção de um chatbot passa basicamente por dois grandes desafios: processamento de linguagem natural (Natural language processing (NLP)) e entendimento de linguagem natural (Natural language understanding (NLU)).

O primeiro diz respeito a quebrar uma sentença em partes chamadas entidades e o segundo significa entender o que a sentença significa. Seria como se a NLP fosse a pré-escola e NLU a universidade.

Fazer tudo isso do zero é certamente um trabalho muito grande, mas existem serviços como Wit.ai que tornam as coisas bem mais fáceis.

O Wit.ai oferece uma API que pega um texto ou entrada de voz e retorna intents e entities.

  • Intents: significa a intenção do usuário, o que ele pretendia com aquela sentença. Por exemplo: previsão do tempo, listar tarefas etc.
  • Entities: entidades são variáveis que contém detalhes da tarefa do usuário. Por exemplo, considerando a entidade previsão do tempo, você deve ser capaz de identificar a partir da entrada de voz ou texto para qual lugar o usuário quer a previsão. Wit oferece vários built-in entity types como localização, números, valores em dinheiro, idade, distância, data e horário. Além desses também é possível criar os seus próprios.

Dependendo das intents e entities que você obtém como entrada do usuário, sua aplicação pode tomar ações ou até mesmo fazer novas perguntas ao usuário.

Mão na massa

O Wit tem o conceito de stories. É a partir delas tudo começa e onde os truques do Wit aparecem. Uma story tem basicamente 4 componentes:

1. User says

Nesse componente você escreve o que é esperado que o usuário digite em uma conversa. Você vai perceber que automaticamente o Wit tentará identificar as entities.

Neste caso o Wit já identificou “Filipe” como sendo um contact.

Atente-se que as Entities próprias do Wit possuem o “wit/” antes. Sempre que possível utilize as entities nativas, pois funcionam incrivelmente bem!

Perceba que neste exemplo o Wit não identifica as minhas entities por serem específicas. Nesse caso basta ensinar a ele :)

2. Bot sends

Este componente é o que o seu Bot deve enviar ao usuário.

3. Jump

O Jump permite ir para qualquer ponto da story. Para fazer isso você precisa criar um bookmark em algum ponto da história e depois configurar um “Jump” pra ele.

4. Bot executes

Eles são as ações propriamente ditas. Cada ação corresponde a uma função do seu código. Esta função descreve a regra de negócio a ser executada e não é feita diretamente na interface do Wit, mas sim no seu código.

Exemplo em node,js

O código completo pode ser encontrado em: https://github.com/filipeguelber/node-wit/blob/master/examples/quickstart.js

Falaremos mais tarde sobre essa parte.

Essa função recebe dois argumentos: o context e as entidades que o Wit descobriu na entrada do usuário. Depois de executar as ações necessárias no seu código, você deve atualizar as keys desejadas no context para que elas fiquem acessíveis pelo Wit no decorrer da conversa.

Essas variáveis de contexto, no exemplo acima “achei”, ficam acessíveis ao Wit e você pode usá-las na branch da sua história.

No caso acima, a branch “pics && achei” significa que caso essas keys estejam presentes no context (alterado pela sua regra de negócio) o Wit seguirá esse caminho.

Repare que qualquer context-key pode ser utilizado nas ações do Bot. No exemplo acima, eu estou usando-as na resposta.

Treinando o seu Bot

Embora o Wit seja muito esperto, em algumas situações você pode querer ensiná-lo. Para fazer isso clique na aba understanding.

É aqui que você ensina quais as expressões o usuário pode encontrar e seus significados em relação às intent e entities.

Você pode, por exemplo, ensiná-lo sinônimos:

E pode verificar o que já ensinou clicando em cada entity:

Put it on

Agora que suas stories estão criadas e seu bot está treinado, vamos colocá-lo pra funcionar! O caminho mais rápido é clonar o repositório:

git clone https://github.com/filipeguelber/node-wit

Instalar o node-wit

npm install --save node-wit

E executar:

# Node.js <= 6.x.x, add the flag --harmony_destructuring
node --harmony_destructuring examples/basic.js <MY_TOKEN>
# Node.js >= v6.x.x
node examples/basic.js <MY_TOKEN>

Lembre-se de substituir o <MY_TOKEN> pelo token que pode ser encontrado nas configurações do seu projeto no wit.

Pronto! Você verá seu chat executando a partir do seu terminal. Basta iniciar sua conversa com ele e verá a mágica acontecer.

Caso você digite algo que o seu Bot não reconheça, a entrada poderá ser encontrada na aba “inbox” e por lá você vai ensinando seu Bot.

Se alguém digitar “imagens de gatos” e você não havia pensado nessa possibilidade, basta ir até o Wit, aba inbox e ensiná-lo que imagens de gatos é a intent verFotos e a categoria é gatos. Pronto, na próxima interação seu usuário já receberá a resposta correta.

So what ?

Integrar seu Bot em aplicações é verdadeiramente fácil. É possível fazer com uma interface web ou app, e até mesmo integrá-lo ao Slack ou ao Messenger do Facebook (o que não demora 5 minutos).

--

--