Python

Como Criar um Chatbot com Rasa Open Source

Fala Galera! Tudo bem por aí? O tema de hoje já faz parte da vida de todos. Quem nunca conversou com um chatbot? Então, agora você pode criar um chatbot para chamar de seu. A área de processamento de linguagem natural, também conhecida como NLP, é fascinante. Além do mais, tem evoluído de uma forma exponencial com o avanço da inteligência artificial.

A ideia é apresentar a criação de um chatbot de uma forma bem simplista. Criar um chatbot em python, como vamos fazer aqui, não quer dizer que você é um especialista. Mas, já dá para ter uma noção do que pode ser feito, além de entender a estrada que tem pela frente para ser um profissional especialista na área.

Primeiramente, vamos entender alguns conceitos importantes. Em seguida, conhecer um pouco mais sobre o Rasa. E para finalizar, um parque de diversões na prática com o Rasa. Sem mais delongas, partiu criar um chatbot.

Conceitos Importantes sobre Chatbot

Iniciamos com alguns conceitos que devem estar claros para começar a brincadeira. O funcionamento de um chatbot acontece a partir da interação de uma pessoa com a máquina. Dessa forma, para que isso seja possível, precisamos estruturar o chatbot para que ele compreenda a interação do usuário e o mesmo seja direcionado para o objetivo final.

Vamos exemplificar para ficar mais claro. Pense em um chatbot que diz ao usuário qual o artigo do site que é mais adequado para o problema dele. Sendo assim, de uma forma bem simples, o usuário acessa o site digita uma frase para o bot, que por sua vez indica quais artigos podem auxiliar o usuário com seu problema.

Cada ação, seja do usuário ou do chatbot, requer programação. Então, vamos a cada uma dessas etapas a seguir.

Intenção do Chatbot

A intenção está no núcleo do chatbot, é onde ocorre a compreensão de linguagem natural (também conhecida como NLU). Esse é o momento quando o usuário interage com o bot, demonstrando o que deseja. Essa intenção é alimentada com exemplos para treinamento do modelo do chatbot. Ao receber uma intenção, como resultado será emitida uma resposta programada.

Resposta do Chatbot

A resposta é a voz do bot. Nesta etapa precisamos programar todas as respostas possíveis para o bot. Assim, a cada interação do usuário o bot tem uma resposta programada. Em alguns casos, se programado, essa resposta pode vir em forma de uma ação do bot.

Ação do Chatbot

A ação é um evento em forma de programa. Sendo assim, algumas intenções do usuário podem acioná-lo. Esta ação pode ser uma consulta no banco de dados, algum cálculo ou qualquer outro exemplo nesse sentido. Todas essas etapas configuram o fluxo do chatbot.

Fluxo do Chatbot

Os fluxos do chatbot são as histórias exemplos para treinamento do bot. Dessa forma, o bot aprende como interagir com o usuário em determinada situação. A estrutura da interação direciona a intenção do usuário para uma resposta ou ação do bot. 

Agora, que já estamos familiarizados com esses conceitos, podemos conhecer o Rasa. Apresentaremos essa ferramenta na criação do chatbot.

O que é o Rasa Open Source Conversational AI?

O Rasa é um framework de machine learning open source para criação de chatbots. Uma das vantagens do Rasa é a sua documentação e a comunidade, ambos fornecem uma gama de exemplos e até soluções pré-prontas. Em seguida vamos para a melhor parte, bater código. Vamos lá!!!

Instalação do Rasa

Temos alguns pré-requisitos para a instalação do Rasa. O python deve estar instalado e de forma opcional, a criação de um ambiente virtual. Lembrando que vamos trabalhar em ambiente Linux Ubuntu, caso utilize outro sistema operacional, basta procurar o comando semelhante do seu SO.

Configuração do Ambiente Python

Com o python configurado, podemos verificar se está tudo certo checando a versão com o comando abaixo.

python3 --version

Em seguida, vamos verificar a configuração do pip, com o comando abaixo.

pip3 --version

A imagem abaixo exibirá a saída dos comandos de versões do Python e do pip quando executados.

Caso precise instalar o python ou o pip, aqui vai encontrar tudo o que precisa Instalando o Python no Linux.

Configuração do Ambiente Virtual

Para configurar o ambiente virtual, vamos utilizar o venv. Caso o venv não esteja instalado, utilize o comando a seguir: 

sudo apt-get install python3-venv.

Com o comando abaixo criamos o ambiente virtual, note que no lugar de nome_ambiente_virtual você pode optar pelo nome que lhe for mais conveniente.

python3 -m venv ./nome_ambiente_virtual

Em seguida, precisamos ativar o ambiente com o comando abaixo.

source ./nome_ambiente_virtual/bin/activate

Após ativar o ambiente virtual, ele exibirá conforme a última linha da imagem abaixo. Note que o nome do ambiente virtual é exibido entre parênteses (venv) no início, o que significa que o ambiente virtual está ativo.

Com o ambiente virtual configurado, conseguimos separar os ambientes de desenvolvimentos. Assim é possível instalar versões do python e de bibliotecas diferentes em cada ambiente. Agora vamos instalar o Rasa no ambiente virtual criado acima.

Instalação do Rasa Open Source

Mais simples de instalar impossível, através do comando pip abaixo tudo vai ficar pronto para começar a brincadeira.

pip3 install rasa

Após a instalação, podemos verificar se o Rasa foi instalado corretamente através do comando.

rasa --version

Rasa instalado, vamos ver os comandos para trabalhar com ele.

Rasa Command Line Interface

O rasa possui uma série de comandos para que seja possível, configurar, treinar e testar o nosso chatbot. Abaixo uma relação extraída da documentação do próprio Rasa. Mas vamos por partes, aqui só vamos ver alguns desses comandos.

Basicamente vamos, iniciar um novo projeto, treinar o modelo e fazer testes com ele. Então, precisamos conhecer os comandos abaixo: 

1rasa init —> Para criar um novo projeto exemplo com toda a estrutura necessária para desenvolvimento.
2 – rasa train —> Para treinar o modelo de acordo com as configurações de intenções, respostas, ações e histórias.
3 – rasa shell —> Para carregar o modelo treinado e interagir com o bot via linha de comando.

Prática com o Rasa

Ao executar o rasa init, você criará a estrutura de arquivos abaixo. Nesses arquivos podemos fazer as modificações necessárias para que o bot funcione da forma como você espera.

Observe na imagem abaixo que temos exatamente a mesma estrutura prevista para iniciar o projeto com o Rasa.

Dando sequência a configuração do rasa init veremos algumas perguntas que serão feitas para configuração do projeto.

Perguntas na configuração do rasa init.

  • ? Please enter a path where the project will be created [default: current directory] MyProjectRasa – Informar o diretório onde será configurado o projeto Rasa.
  • ? Path ‘MyProjectRasa’ does not exist 🧐. Create path? Yes – Caso a estrutura de pastas não exista, ele vai criar.
  • ? Do you want to train an initial model? 💪🏽 Yes – Realizar o treinamento inicial do modelo padrão Rasa (rasa train).
  • ? Do you want to speak to the trained assistant on the command line? 🤖 Yes – Iniciar o chatbot via linha de comando (rasa shell).

Mesmo sem fazer nenhuma alteração, já podemos treinar esse modelo padrão e ver ele em funcionamento, com as respostas dadas acima. Observe na imagem abaixo.

Já podemos interagir com o bot, será que ele já entende alguma coisa?

O modelo padrão inicial já vem com uma configuração básica, porém no idioma em inglês. Agora, algumas modificações para compreender o funcionamento do chatbot.

Alterando o Idioma para Português

A primeira alteração a ser feita, será do idioma. No arquivo config.yml podemos informar a linguagem que o bot irá trabalhar. Então, na linha 3 no campo language deve ser alterado de en para pt ou simplesmente de inglês para português.

Alteração realizada e salva, vamos configurar a intenção.

Configurando uma Intenção no Rasa Chatbot

O nosso arquivo de intenção é o nlu.yml, e ele tem a seguinte estrutura:

nlu:
-   intent: nome_da_intenção
    examples:
        - exemplo_1
        - exemplo_2

Pensando na nossa primeira interação com o bot, colocamos a mensagem Olá e ele não entendeu. Então, com a intenção de saudação greet vamos acrescentar mais um exemplo, que pode ser observado na linha 6 do arquivo nlu.yml

Após as alterações feitas, precisamos treinar novamente o modelo através do comando rasa train. Em seguida vamos iniciar a interação através do comando rasa shell.

Observe que agora o nosso bot entendeu a mensagem e retornou perguntando como eu estava. Mas, ainda no idioma em inglês, apesar da alteração do idioma principal do bot, ainda precisamos alterar as intenções e respostas para o idioma configurado.

Configurando uma Resposta no Rasa Chatbot


Devemos criar as respostas no arquivo domain.yml, que possui a seguinte estrutura:

intents:
    - nome_da_intenção_1
    - nome_da_intenção_2
responses:
 nome_da_resposta:
    - text: "texto da resposta"

Sendo assim, vamos responder a intenção de saudação greet com a resposta utter_greet na linha 13 informando um texto resposta a ser dado pelo bot na linha 14, Oi! Como você está?.

Mais uma vez, precisamos treinar novamente o modelo através do comando rasa train. Em seguida vamos iniciar a interação através do comando rasa shell.

Agora o nosso boot além de entender a mensagem Olá respondeu adequadamente com o texto Oi! como você está?, que configuramos na resposta. Dessa forma, começamos a construir um fluxo de interação entre o usuário e o bot. 

Criando um Fluxo no Rasa Chatbot

A configuração do fluxo ou histórias é feita no arquivo stories.yml, mas pode ser necessário voltar nos dois passos acima ( intenções e respostas). Abaixo a estrutura do arquivo stories.yml

stories:
    - story: nome_da_história
      steps:
        - intent: nome_da_intenção_1
        - action: nome_da_resposta_1
        - intent: nome_da_intenção_2
        - action: nome_da_resposta_2

Seguindo o fluxo de conversa com o bot. Ao inserir uma intenção com a mensagem mais ou menos, não foi possível interpretar essa intenção. Então, precisamos criar um fluxo para essa nova possibilidade de intenção.

O primeiro passo é criar uma intenção para as novas possibilidades de interações do usuário. Vamos chamar de mood_so e citar alguns exemplos possíveis para essa nova intenção. Abaixo os detalhes da criação da nova intenção no arquivo nlu.yml, da linha 4 a 8. 

Em seguida, criaremos uma resposta para esta nova interação do usuário. Batizada pelo nome de utter_mood_so e descrito o texto resposta do bot, nas linhas 14 e 15. Ainda incluímos a nova intenção criada também no arquivo domain.yml como se vê na linha 11. 

Para finalizar, incluímos a intenção do usuário e a resposta dada pelo bot na criação do fluxo. Aproveitando a história happy path, adicionamos a intenção mood_so e a resposta utter_mood_so como pode ser observado abaixo no arquivo stories.yml nas linhas 9 e 10.

Fluxo devidamente configurado partiu treinar o modelo e interagir.

Antes da criação do fluxo ao inserir mensagem mais ou menos o bot não entendeu a intenção do usuário. Porém, após o fluxo devidamente configurado, observe como a interação do bot foi muito mais coerente. E assim devemos criar todos os fluxos necessários para que o chatbot resolva o seu problema. Seja de sugestão de conteúdo ou para pedir uma pizza.

Chatbot com Rasa ao Cubo

E assim finalizamos essa introdução de como criar um chatbot com Rasa Open Source. Aprendemos alguns conceitos importantes sobre chatbots. Fizemos a instalação do Rasa no detalhes e começamos as alterações do modelo padrão para entender o funcionamento e a lógica por trás dele.

Mas lembre-se que esse conteúdo é só o dedo mindinho, dá para fazer muita coisa legal com o Rasa. A sua criatividade é o limite!

Então, espero que vocês tenham curtido essa introdução a criação de chatbot com Rasa, compartilhem com a sua rede e não esqueçam de mandar aquele feedback do que você achou do conteúdo. Um abraço e até a próxima.

Conteúdos ao Cubo

Por fim, deixo algumas sugestões de conteúdos que você pode encontrar no Dados ao Cubo, sempre falando sobre o mundo dos dados.

Então, finalizo com um convite para você ser Parceiro de Publicação Dados ao Cubo e escrever o próximo artigo, compartilhando conhecimento para toda a comunidade de dados. Mas, não esqueça de assinar a nossa Newsletter para ficar por dentro de todas as novidades. 

Recent Posts

Manipulando Dados no MongoDB com Python

Fala Galera do mundo dos dados, hora de manipular dados no MongoDB com Python. Dessa…

2 meses ago

Manipulando Dados no Cassandra com Python

Fala Galera do mundo dos dados, hora de manipular dados no Cassandra com Python. Dessa…

2 meses ago

Aprender a Função Select do Spark

Fala galera do mundo dos dados, hoje é dia de aprender a função Select do Spark.…

2 meses ago

Transformar Consultas SQL em Visualização no Metabase

Fala galera do mundo dos dados, hoje é dia de transformar consultas SQL em visualizações…

3 meses ago

Banco de Dados com SQL

Fala galera do mundo dos dados, dando continuidade às consultas de banco de dados com…

3 meses ago

Bancos de Dados NoSQL com Python

Fala galera do mundo dos dados, hora de conhecer os bancos de dados NoSQL com…

3 meses ago