Desenvolvimento

14 nov, 2016

Criando chat bots no Facebook com o IBM Watson

Publicidade

Quando a IBM criou o Watson em 2011, talvez ela não tivesse em mente que ele poderia virar um atendente de call center, vendedor de ingressos de cinema ou assistente de investimentos. Bom, esse tempo chegou e o sistema que ganhou o nome do fundador da empresa faz tudo isso e muito mais. Na web, no celular ou até mesmo no Facebook, o Watson pode te auxiliar a trazer uma experiência mais humana entre máquina e usuário.

Watson Conversation

A API Conversation foi a última a ser lançada no Bluemix em julho. Os devs do Watson resolveram juntar algumas funcionalidades do Natural Language Classifier (NLC), do Dialog e novidades com uma interface bem simples que permite que o cara que não é de TI possa criar conteúdo para o seu Bot.

Mas por onde começar?

Pode parecer complicado montar um agente inteligente que responda às respostas mais frequentes do seu usuário, mas na verdade nem é. Com um pouco de criatividade e um conhecimento mínimo de código, você pode criar o seu bot. Aqui vamos fazê-lo no Facebook.

Por questões de logística, vou dividir este artigo em dois:

  • Este artigo vai mostrar como criar o bot utilizando o Bluemix (PaaS da IBM)
  • O segundo vai mostrar como integrar o seu bot com o Facebook (esse é mais técnico e vai precisar de um pouco de conhecimento de código).

Começando pelo começo

Pra começar, você vai precisar de uma conta no Bluemix. É bem tranquilo de criar e o primeiro mês é de graça =). Depois ainda tem um número de chamadas que você pode fazer sem pagar (acho que pra API que vamos usar são 1.000 chamadas por mês).

Quando você já tiver sua conta no Bluemix, basta você clicar no Catálogo (no topo da página), depois selecionar Watson (no menu lateral esquerdo) e então criar uma instância do Conversation.

Eu escolhi alterar o nome do serviço e das credenciais, mas você não precisa disso.

figura_01

Eu escolhi alterar o nome do serviço e das credenciais, mas você não precisa disso.

Agora você provavelmente já foi redirecionado pra página do Conversation e basta clicar em Launch Tool pra começar a diversão. Se por algum motivo você saiu e não tá mais achando o serviço, é só ir em Dashboard e achar o serviço que você criou.

figura_02Aqui você abre a interface de criação de conteúdo do seu bot.

Ao clicar nesse botão, outra aba vai abrir com o link https://www.ibmwatsonconversation.com. Esse é o link que você poderá passar pro seu usuário de negócio de modo que ele possa criar conteúdo sem precisar alterar nenhuma configuração do serviço.

Dentro da interface do Conversation, você vai criar seu primeiro workspace, que basicamente é o conjunto de conhecimento que aquele bot possuirá. Um ponto importante é escolher a língua correta que seu bot falará. O Watson já fala português do Brasil, então quando você escrever alguma coisa ele já identificará verbos, substantivos etc.

figura_03

Intenções

A primeira aba que você vê ao entrar no seu workspace é a de intenções. Uma intenção é aquilo que o usuário está buscando por trás de uma pergunta – nós podemos falar a mesma coisa de mil maneiras diferentes. Criar um sistema que tratasse cada uma delas seria extremamente exaustivo, então a IBM criou as intenções, nas quais você dá exemplos de frases (no mínimo cinco pra ter um nível mínimo de assertividade) e depois o sistema extrapola esses exemplos de modo que uma pergunta que não estava naquele conjunto inicial possa ser identificada como daquele tipo.

figura_04Se você falasse: cara qual é a localização da IBM? Ele te responderia da forma correta, mesmo nunca tendo visto esse exemplo ;).

Pra criar uma intenção, basta clicar no botão “create”, dar um nome curto que identifique os exemplos e dar os exemplos. Aqui eu vou criar uma de início de conversa, uma de fim de conversa e a de buscar localização. No fim, fica mais ou menos assim:

figura_05

Pra nosso bot ter um pouco mais de conteúdo, vou colocar outras três intenções: uma de formas de pagamento.

figura_06

Outra de troca de mercadorias:

figura_07

E, por último, uma intenção que identifica aquilo que não tem nada a ver com o que nosso bot se propõe: a intenção fora de escopo. Aqui é interessante ter exemplos bastante diferentes (em conteúdo e em tamanho) para que o nosso bot não se confunda.

figura_08

Entidades

Entidades, como o nome diz, são itens que você deseja identificar no seu texto e extrair para que possa realizar algum tipo de tratamento. Você deve agrupar as entidades semelhantes em categorias e usar os sinônimos daquelas palavras para identificar um mesmo valor. Aqui vamos utilizar as entidades tamanho, sexo e produto.

figura_09

figura_10

figura_11

Diálogo

O diálogo é a última parte da construção do seu bot, é nele que você definirá o fluxo de conversa e que ações devem ser executadas.

Ele possui dois comandos básicos: o hashtag (#), para representar as intenções, e o arroba (@), para representar as entidades (existem comandos mais avançados, mas estes não serão necessários nesse momento).

Antes de iniciar o seu fluxo de conversa, você precisa tomar uma decisão:

Se você escolheu a primeira opção, então terá que usar um comando especial na condição do primeiro nó: é o conversation_start e, ao criá-lo, ele já traz o Anything else, que é a resposta para quando ele não encontra nada.

figura_12

Aqui você já poderia começar a testar o seu bot; para isso, basta clicar no balão no canto superior direito e escrever algo – ele te retornará uma resposta, a intenção que encontrou e as entidades naquela frase.

figura_13Aqui no exemplo eu já criei dois nós #inicioConversa e #fimConversa que possuem respostas simples.

Agora precisamos criar casos reais de uso. Eu vou simular um auxiliar de loja de vestuário (não é difícil imaginar um totem, um robô ou app tendo essa conversa). A primeira dúvida que ele vai resolver é onde ficam as coisas dentro da loja; para isso, eu vou criar um nó com a intenção #pegarLocalizacao (vamos deixar esse nó sem resposta alguma) e vamos criar nós “filhos” com as entidades de produto que definimos. Vai ficar mais ou menos assim:

figura_14

O que está acontecendo nesse fluxo é que quando fazemos uma pergunta do tipo “Onde ficam as calças?”, ele identifica a intenção de buscar a localização de algo, mas como não temos resposta ele para por aí (dificilmente o usuário vai perguntar a localização de algo genérico). Como podemos fazer para que ele entenda que queremos pegar a localização e que estamos falando de um produto específico? Resposta: usando o Continue From.

Para utilizar esse comando, basta clicar nos três pontinhos do nó, selecionar o comando e depois mostrar para que nó você quer enviar aquela conversa. Aqui ele vai perguntar se você quer ir para a condição ou resposta daquele novo nó. Vamos escolher condição, pois, do contrário, ele nunca avaliaria se realmente estamos falando de calça ou outro produto, simplesmente mostraria a resposta de calça.

figura_15

Adicionamos os outros dois nós como mostrado um pouco acima, e pronto! Agora seu bot já consegue responder onde ficam as calças e as camisas de uma loja.

Não entendeu o que aconteceu aqui? Quando eu coloquei o @Produtos:Calça, o que essa condição procura é: tem alguma entidade do tipo Produtos no input do usuário? Esse produto é uma calça? Se as duas forem verdadeiras, então retorna a resposta desse nó; do contrário, vai pro próximo. Mas e se nenhuma condição for atendida? Para isso, adicionamos o último nó com a condição true – ela sempre é atendida e permite que você faça tratamentos de exceção.

Finalizando

Pra acabar o meu bot, eu adicionei duas outras intenções no primeiro nível (clicando mais abaixo no nó #pegarLocalizacao): um para formas de pagamento e outro para troca de mercadorias. Com isso, já é possível ter uma conversa simples:

figura_16Várias dessas frases não foram mapeadas, mas ele consegue entender o que queremos por trás delas.

Mas e se ele responder errado?

A pergunta nem é SE ele responder errado, é QUANDO ele responder errado. Não se engane, ele não vai acertar tudo (principalmente na primeira semana) – o que ele precisa é de mais exemplos para ir acertando cada vez mais.

figura_17

A interface permite que você corrija esses problemas de maneira rápida; para isso, basta clicar na seta pra baixo do lado direito da intenção errada que veio e digitar a correta (se a correta ainda não existir, você pode criar uma nova por aí mesmo, mas precisará de mais exemplos depois). Depois dessa alteração, o Watson será retreinado e então responderá corretamente.

figura_18figura_19

Agora funcionando.

Fim

Bom, este é o fim da primeira parte. A próxima será um pouco mais técnica, pois nela farei a integração desse bot que criamos com o Facebook messenger. Se ficou alguma dúvida ou se você tem alguma sugestão do que posso mudar (ou escrever em uma próxima ocasião), basta comentar aqui mesmo.