Watson Assistant: Como criar o seu chatbot usando Skills e Assistants

Victor Shinya
15 min readDec 6, 2018

--

A cada dia fica mais difícil disputar a atenção das pessoas em um smartphone. De acordo com um estudo feito pela App Annie, os usuários estão acessando, em média, 30 aplicativos por mês, 10 aplicativos por dia. Enquanto isso, diariamente são lançados 9 aplicativos nas lojas.

As plataforma de comunicação mais utilizadas — Slack, Messenger, Telegram, Twitter, WhatsApp e Skype

Para um usuário, acessar uma nova ferramenta ou serviço sem precisar baixar é um sonho. Essa experiência é o que denominamos de frictionless (sem criar fricção). Em outras palavras, ao invés de trabalhar em um novo aplicativo, que será lançado na loja e, depois, criar uma ação de marketing para todos o baixem, é possível criar um serviço e usar as plataformas de comunicação, como Messenger ou WhatsApp, por exemplo, como a interface gráfica, para entregar valor aos seus clientes. Sem precisar gastar memória no smartphone e sem precisar gastar 4G ou Wifi para baixar.

“Trocar mensagens são umas das poucas coisas que as pessoas fazem mais do que usar as redes sociais.”

— Mark Zuckerberg, CEO e Co-fundador do Facebook (The Verge)

E com o aumento do número de mensagens trocadas entre empresas e clientes, vemos que o chatbot entra para ajudar a automatizar o tempo e esforço para atender todos os clientes, de maneira rápida e eficiente.

Mas o que é CHATBOT? De acordo com o Dicionário de Oxford, chatbot é:

“Um programa de computador projetado para simular conversas com usuários humanos, especialmente pela Internet.”

Com a evolução da inteligência artificial, hoje é possível criar chatbots com capacidades de aprendizado de máquina. Para construir um chatbot, você pode utilizar o serviço do Watson Assistant, um dos serviços de inteligência artificial da IBM.

O Watson Assistant (antigo Watson Conversation) é a API do Watson para a criação e desenvolvimento de interfaces conversacionais, ou chatbots. Este serviço possui uma interface simples e intuitiva para que profissionais não-técnicos possam usufruir de todos os recursos disponíveis, de forma simples e rápida.

O Assistant é alimentado pela tecnologia de Machine Learning e Processamento de Linguagem Natural. O serviço é treinado usando os dados do seu negócio para melhor suportar o seu caso de uso. Quanto mais dados você fornece, melhor será o resultado.

Processamento de Linguagem Natural (NLP)

A mesma pessoa pode fazer a mesma pergunta ou comentário de maneiras diferentes. Dessa forma, não podemos nos prender em palavras-chave (até por uma questão de nunca enviesar) dentro de uma frase como um "norte", ou um direcionamento. É nessa hora que entra o NLP (Natural Language Processing) para ajudar no entendimento da frase. Ao invés de classificar a partir das palavras-chave, você começa analisar itens, como o contexto, para compreender qual é a melhor intenção neste cenário.

Em alguns casos, não é possível entender o que o usuário quer dizer. Isso acontece porque o seu chatbot não possui o conhecimento necessário para responder a pergunta. Esse cenário é o que chamamos de Long-tail. Para resolver esse problema podemos considerar o uso de uma ferramenta chamada Watson Discovery — serviço com a capacidade de analisar dados não-estruturados dentro de arquivos (HTML, Word, JSON e PDF) através de queries.

"O Short-tail (com Chatbot) pode resolver 80% dos problemas com 20% de esforço, enquanto o Long-tail pode resolver 20% dos problemas com 80% de esforço."

- Victor Shinya, Developer Advocate na IBM

Hoje o serviço do Watson Assistant está disponível no catálogo da IBM Cloud e oferece planos para que desenvolvedores, designers, startups, pequenas empresas, médias empresas e grandes empresas possam utilizar a ferramenta. Veja abaixo os tipos de planos disponíveis:

Referente aos planos, dê uma olhada nos detalhes:

  • Lite: Você tem 10.000 mensagens recebidas (e processadas pelo Watson) de forma gratuita por mês. Este número somente é descontado através das chamadas de API. Além disso, é possível criar até 5 skills diferentes, com 100 intenções, 200 entidades e 100 nós de diálogo cada;
  • Standard: Você tem os mesmos benefícios do plano Lite, entretanto ao atingir 10.000 mensagens, o serviço não para. Após ultrapassar este valor, você começa a pagar R$0,007343 por cada mensagem recebida no mês. Além disso, você tem um acréscimo no número de skills, com o total de 20 skills em cada instância, com 2.000 intenções, 1.000 entidades e 500 nós de diálogo cada;
  • Plus Trial: Acesso a todas as funcionalidades do plano Plus por 30 dias. Com o limite de 50.000 mensagens gratuitas com o limite de 5.000 usuários (veja abaixo o modelo de cobrança do plano Plus).
  • Plus: Aqui você tem os mesmos benefícios do plano Standard, com o acréscimo de mais 30 skills, totalizando 50 skills por instância criada, com 2.000 intenções, 1.000 entidades e 100.000 nós de diálogo cada. É possível criar até 3 instâncias com este plano. Além disso, você tem acesso a funcionalidades extras dentro da ferramenta como Desambiguação, Recomendação de intenções, Detecção de conflitos nas intenções e integrações com sistemas de Service Desk. O modelo de cobrança deste plano é feito pelo número de usuários únicos que interagem com o Assistant durante um certo período de tempo. Para ter acesso a este plano, é necessário contactar o time de vendas de Watson (ibm.biz/contact-WA-plus);
  • Premium: Este plano oferece isolamento e segurança para os usuários que procuram isolar recursos e dados encriptados de ponta a ponta. Aqui você tem uma instância dedicada para o seu negócio. Você tem os mesmos benefícios do plano Plus, com o acréscimo do número de instâncias permitidas, com o total de 30 instâncias máximas permitidas, podendo até compartilhar logs e analytics entre as instâncias. O modelo de cobrança deste plano é feito pelo número de usuários únicos ativos. E, assim como no plano Plus, é necessário contactar o time de vendas de Watson para ter acesso a este plano (ibm.biz/contact-WA-plus).

Seu primeiro Chatbot

Agora que você já conheceu o serviço, na teoria, chegou a hora de colocar mão na massa. Iremos criar um novo chatbot e navegar por toda a ferramenta. Para isso, é necessário que você tenha uma conta na IBM Cloud (caso ainda não tenha acesse este link)

Não se preocupe. Para criar uma nova conta não é necessário um cartão de crédito. Basta ter um email e uma senha. Na IBM Cloud você tem acesso a uma camada gratuita, Lite, com um catálogo com mais de 50 serviços disponíveis, incluindo Watson e (Cloud Foundry Application) Runtimes de diversas linguagens de programação.

Neste passo a passo vamos usar um exemplo do nosso cotidiano. Iremos criar um bot para fazer pedidos em uma Temakeria. Vamos criar uma nova instância de Watson Assistant e a partir dela, iremos treinar a inteligência artificial e construir a árvore de decisão.

No catálogo da IBM Cloud

Acesse a sua conta e clique no botão azul de "Criar recuso" ou o item no menu superior chamado "Catálogo". Ambos irão te direcionar para a página com o catálogo de todos os serviços. Dentro do catálogo, desça até o item "Watson Assistant (anteriormente Conversation)" — você pode apertar o item no menu "IA" para filtrar os serviços ou clicar neste link para acessar os serviços de inteligência artificial diretamente. Clique no item (igual na imagem abaixo).

Catálogo de serviços — IBM Watson

Nesta página não há necessidade de mudar nenhuma informação. Apenas clique no botão "Criar" para criar uma nova instância do serviço na sua conta.

Criação de uma instância de Watson Assistant

Ao carregar a página da sua instância, espere carregar e logo irá aparecer um botão azul de "Ativar ferramenta" para abrir o Toolkit. Usaremos a ferramenta do serviço para fazer todo o treinamento.

Detalhes da sua instância de Watson Assistant

Criação do chatbot no Watson Assistant

Dentro da ferramenta, você consegue enxergar dois itens na aba superior: Skills e Assistants.

  • Skills (antigo Workspaces, ou áreas de trabalho / habilidades) é o conjunto da base de conhecimento e a lógica treinada (baseada no seu negócio).
  • Assistants (ou assistente) é o conjunto de Skills, no qual você agrupa as bases de conhecimento em um único assistente. Assim como a tradução literal diz, você dá ao assistente uma ou mais habilidades para poder lidar com diversos cenários com seu cliente.

Ao entrar, clique na aba "Skills" para criar a primeira habilidade do seu assistente.

Homepage da ferramenta do Watson Assistant

Clique no botão azul "Create new". Aqui é possível criar uma skills a partir de três formas diferentes: criar nova (Create new), usar um exemplo (Use sample skill) e importar skill (Import skill). Veja os detalhes abaixo:

  1. Create new: você pode criar uma nova skill;
  2. Use sample skill: você pode usar um exemplo, como "Serviço de atendimento ao Consumidor", disponível na lista.
  3. Import skill: você pode importar uma skill, com um arquivo JSON gerado na exportação de uma skills já pronta. Acesse alguns exemplos disponíveis em PT-BR no Dropbox e conheça o BAX (Bot Asset Exchange), um repositório de chatbots disponíveis no IBM Developer.

O propósito do tutorial é criar uma nova skill, então iremos permanecer na primeira aba. Para criar uma nova, você é obrigado a preencher dois campos: nome e linguagem. Defina o nome e ao selecionar uma linguagem, selecione "Brazilian Portuguese" (ou Português Brasileiro). A descrição é apenas usada para ajudar a identificar e localizar a skill, por isso não é um campo obrigatório. Após definir os campos, clique no botão "Create".

Se atente ao selecionar a linguagem correta, porque será selecionado o modelo daquela linguagem dentro do seu chatbot. A linguagem inglesa, por exemplo, não utiliza acentuações nas palavras e o reconhecimento de algumas palavras com acento usando Fuzzy Matching faz diferença, entre reconhecer e não reconhecer aquela intenção ou entidade.

Crie uma nova Skill dentro da sua conta

Após a criação, você será redirecionado para dentro da sua skill para fazer o treinamento. A partir disso, você treinará três itens importantes: Intenção, Entidade e Diálogo. Eu costumo definir esses três itens como "Os três pilares do Assistant", isso porque sem eles, não tem como ter um chatbot. Para você entender os três pilares, aqui está um resumo de cada um:

  • Intenção (ou Intent): considerado como propósito, objetivo. Você deve analisar a frase dos usuário com o objetivo de entender "Qual é o propósito dele ao fazer esta pergunta?". Aqui é onde você agrupa exemplos de frases a fim de poder analisar uma frase, não pelas palavras chaves, mas pelo contexto.
  • Entidade (ou Entity): considerado como complemento da informação. É usado para diferenciar uma frase da outra.
  • Diálogo (ou Dialog): é neste ponto onde você cria toda a árvore decisão do Assistant. Você une a intenção com a entidade (se houver) e cria-se todo o fluxo de diálogo.

Logo na tela inicial, você já consegue treinar o primeiro item: Intenção. Para isso você pode fazer de três formas: adicionar nova Intenção, usar exemplos do Catálogo de Conteúdo ou importar um arquivo CSV. Aqui usarei a primeira opção, para explicar com mais detalhes como funciona o treinamento da sua skill.

Clique no botão azul "Add intent". Repare que no primeiro campo, aparece um # (hashtag). Intenções aparecerão com um # (hashtag), enquanto Entidades aparecerão com um @ (arroba). Isso irá facilitar na identificação do que é cada um na aba de Diálogo. Agora dê um nome a esta intenção e defina pelo menos 5 exemplos — este é o número recomendável para se criar um modelo de intenção, minimamente, funcional. Os exemplos são serão usados para treinar o modelo da sua skill. Dica: defina o nome usando camel case (como no exemplo abaixo) ou separando as palavras com hífen.

Adicione uma nova Intenção dentro da Skill

Clique na seta, no canto superior esquerdo, para voltar a lista de intenções. Agora clique na aba "Entities" para acessar as Entidades. Aqui é possível você criar a sua própria Entidade ou importar um arquivo CSV. Além disso, você consegue usar entidades pré-definidas pela IBM, chamado "System entities". Segue abaixo uma visão das entidades de sistemas disponível na língua portuguesa:

  • @sys-currency: reconhece valores monetários na frase informada pelo usuário. Ex: 20 centavos, 50 reais, R$75,00
  • @sys-date: reconhece datas no formato tradicional e em outros formatos mais usuais dentro de uma conversa. Ex: 12/12/2018, 7 de setembro, hoje, amanha, agora, na próxima sexta.
  • @sys-number: reconhece números como dígitos e escritos. Ex: 21, vinte e um.
  • @sys-percentage: reconhece valores com o símbolo de % (porcentagem), ou escrito — porcentagem. Ex: 50%, 90 por cento.
  • @sys-time: reconhece tempo no formato tradicional e em outros formatos mais usuais dentro de uma conversa. Ex: 20:59, 10 da manhã, em 10 minutos, agora, daqui 1 hora.
Entidades de Sistema disponíveis em Português

Aqui iremos criar a nossa própria Entidade. Para isso, clique no botão azul "Add entity" e defina o nome. Quando trabalhamos com Entidade, não damos exemplos, e sim valores e seus sinônimos/padrões. Usamos sinônimos para ensinar variações daquela mesma palavra, por questões de variações regionais e variações até errôneas para trabalhar a informalidade, e usamos padrões para ensinar um padrão ao invés de ensinar diversas variações com a mesma estrutura, como CEP, CPF, nomes e outros. No caso da Temakeria, iremos criar uma Entidade de cardapio (sem acento) e os valores da Entidade com seus sinônimos, como sushi, sashimi, temaki e hot roll. Dica: ao criar uma nova Entidade, clique no botão Enter do seu teclado para criar, e ao definir o valor da Entidade e seus sinônimos, clique no botão azul "Add value".

Adicione uma nova Entidade dentro da Skill

Definido a Entidade de cardapio (sem acento), volte para a tela com a lista das Entidades e crie uma nova Entidade para cep. Dentro, defina o valor como cep (em minúsculo), mude de sinônimo para padrão (ou "Patterns") e use o RegEx (expressão regular) abaixo — não esqueça de adicionar o valor:

[0–9]{5}-[0–9]{3}
Adicione uma nova Entidade com padrões, ou RegEx (expressão regular)

Agora que temos a nossa Intenção #pedido e as Entidades @cardapio e @cep, chegou a hora de construir o fluxo de diálogo na próxima aba, de "Dialog". Clique no botão "Create" para criar a primeira estrutura de diálogo. No Diálogo, você verá dois retângulos, um debaixo do outro, de Bem-vindo e Em outros casos. No Watson Assistant, chamamos esse retângulo de Nó de Diálogo (ou Dialog Node). Quando um usuário faz uma pergunta, a pergunta dele dentro de um contexto é passado por cada nó até achar um nó, que o NLP do Watson (junto com o seu treinamento) tenha combinado. É dado o match com o nó de Bem-vindo a primeira interação do usuário no primeiro contato com o chatbot. E é dado match com o nó de Em outros casos no momento em que o chatbot não souber identificar a pergunta do usuário em uma das Intenções e/ou Entidades criadas. ELE SEMPRE SERÁ O ÚLTIMO NÓ DA SUA ÁRVORE. Dica: sempre mantenha os seus nós entre o Bem-vindo e o Em outros casos para que eles sempre sejam reconhecidos. Tudo o que vier depois do nó de Em outros casos, jamais será reconhecido pelo NLP do Watson dentro da árvore de decisão.

Defina um novo Fluxo de Diálogo para a Skill
Crie um novo , logo abaixo do nó de Bem-vindo

Crie um nó, entre ambos os nós iniciais — caso não saiba, basta clicar sobre o botão de três bolinhas azul do nó de Bem-vindo e clicar na opção "Add node below". Defina o campo "If assistant recognizes" com a intenção #pedido. Assim toda vez que o Watson reconhecer que o usuário está querendo fazer um pedido, ele irá cair nesse nó. É possível adicionar outros valores, como Intenção e Entidade, para criar essa validação. Dica: clique sobre o campo que você verá uma lista de opções. Basta clicar sobre as opções que você quer que o campo será preenchido automaticamente.

Defina o para reconhecer a Intenção #cardapio

Logo abaixo você verá o campo "Then respond with" e "And finally". O primeiro item você irá definir a resposta para o usuário. Neste campo é possível usar Textos, criar listas de Opções, dar uma Pausa ou enviar uma Imagem. No campo de Texto, você consegue definir uma ou mais frases que podem ser apresentadas, individualmente, de forma sequencial, randômica ou multilinhas (apresenta todas as respostas em balões diferentes, tudo de uma vez). E o segundo item é usado para definir se o chatbot deve esperar o usuário responder ou se deve, automaticamente, pular para outro nó.

Lista com as opções de resposta do Watson

Voltando para a skill, clique no botão "Customize", no canto superior direito. Uma caixa será aberta. Habilite o item Slot e clique no botão azul "Apply". Estamos liberando o uso da funcionalidade de Slot nesse nó específico. Esta função lhe permite armazenar dados fornecidos pelo usuário em Variáveis de Contexto (ou Context Variables), sinalizado pelo símbolo $ (cifrão). Assim que habilitar, você verá uma nova seção dentro do nó, chamado "Then check for". Inicialmente, é importante saber dos três campos iniciais para configurar um Slot. Assim como fizemos no campo "If assistant recognizes", o primeiro campo você deverá informar uma Intenção, Entidade ou Variável de Contexto. Definindo, o segundo campo automaticamente será preenchido com o mesmo nome, apenas substituindo o # ou @ por $ (de Variável de Contexto). O último campo você pode informar, no caso do usuário não fornecer nenhum dado, uma pergunta. Preencha os campos com as Entidades @cardapio e @cep, assim como na imagem abaixo.

Defina as Entidades reconhecidas no Slot

Com os campos todos preenchidos, basta definir a resposta, ou mais de uma resposta, para o usuário. Neste exemplo, deixei apenas uma frase. Repare que foi usado o $cardapio e $cep dentro do texto. Ao armazenar uma nova variável, é possível utilizar dentro da resposta do Watson.

Defina a resposta para o usuário

Chegou a hora de testar a skill treinada. Clique no botão "Try it" para abrir o chat interno da ferramenta. Faça um teste pedindo um sushi a Temakeria.

Teste com o chatbot usando a ferramenta de chat "Try it"

PRONTO! Você possui uma skill treinada! Chegou a hora de criar um Assistant.

Criando e definindo um Assistant

Volte para a tela inicial da ferramenta do Watson Assistant. Clique na aba de "Assistants" e clique no botão azul "Create new". Será aberto uma janela com dois campos, nome e descrição. É apenas obrigatório preencher o nome. Ao definir, clique no botão azul "Create".

Crie um novo Assistant dentro da sua conta

Agora você irá adicionar a skill de Temakeria no seu Assistant. Para isso, você verá um botão de "Add Dialog Skill".

Adicione as Skills dentro do Assistant criado

Clique no botão que irá abrir uma nova janela. Clique na aba "Add existing skill" e selecione na skill criada.

Selecione a Skill de Temakeria para ser adicionada no Assistant

PRONTO! Você possui um Assistant configurado! Agora é possível testar as integrações como Facebook Messenger, Preview Link e Slack, além das integrações no Wordpress e uma aplicação customizada. Para a opção de Preview Link, você consegue enviar este link para seus contatos para poderem testar o seu chatbot treinado!

Lista das integrações nativas disponíveis no Watson Assistant

Veja mais detalhes de como integrar o seu Watson Assistant no Messenger no último post na IBM Developer Brasil.

Ainda existem outras funcionalidades para serem tratadas como Jump To, Digressão, Respostas múltiplas, Pastas, entre outros. Em breve irei mostrar, na prática, como utilizá-las.

Abaixo está uma frase que eu sempre sigo para a construção de novos chatbots. Isso pode ajudar a criar um questionamento durante a construção.

“Criar um chatbot é como construir uma casa. Você pode fazê-la pequena ou grande. Você pode preenchê-la com funcionalidades ou deixá-la vazia. E quanto mais você a preenche, dentro de um design apropriado, mais feliz você fica com os resultados.”

— Bot Maker desconhecido

--

--

Victor Shinya

Enterprise Solutions Architect @AWS | Previously @IBMCloud @IBMDeveloper 🇧🇷