A Taís é uma assistente virtual desenvolvida pelo LAPPIS - Laboratório Avançado de Produção, Pesquisa e Inovação em Software (FGA/UnB), em parceria com o Ministério da Cultura. O nome é uma sigla para Tecnologia de Aprendizado Interativo do Salic.
Esse repositório contém o código do framework do chatbot Tais, composto por:
- Bot: Inteligencia artificial do próprio bot, feito em Rasa.
- Analytics: Sistema de análise das conversas dos usuários com o chatbot, feito com o Kibana.
- Notebooks: Notebooks Jupyter para a análise da estrutura do chatbot.
- Web: Página com verificação de usuário para Beta Testers.
- O que é a Tais? 🤔 Conheça a Tais
- Quero ler a documentação! 📚 Acesse nosso GitHub Pages e veja a nossa wiki
- O que é o Lappis? ✏️ Conheça o Lappis
- Estou preparado para testar a Tais! 💻 Teste a tais em produção no Portal da Lei Rouanet ou veja ela em produção em nosso github pages
- Como posso rodar a Tais no meu computador? ⚙️ Veja e entenda como subir cada parte do ambiente de desenvolvimento da Taís ou simplesmente rode os comandos do QuickStart
- Estou com dúvidas... ❓ Veja como conseguir ajuda
- Gostaria de Contribuir! 🤗 Veja como contribuir
A Tais é um chatbot desenvolvido pelo LAPPIS junto com a Secretaria Especial da Cultura para o projeto da Lei Rouanet. A Lei Rouanet é o principal mecanismo de fomento a cultura do Brasil, e a Tais tem o objetivo de ajudar os proponentes nos momentos de dúvida. Para saber mais sobre o que é a Lei Rouanet, SALIC e como funciona todo o processo acesse o Portal da Lei Rouanet lá Tais está em produção e também pode explicar esses conceitos.
É utilizado na Tais diversas tecnologias que interagem entre si para obter um melhor resultado. Veja a arquitetura implementada:
O usuário interage com a Tais via RocketChat ou Telegram, que manda as mensagens para o Rasa NLU através de conectores, onde ele identifica a intent, e responde pelo Rasa Core, de acordo com as stories e actions. As models utilizadas para a conversação foram geradas pelo módulo trainer e depois transferidas para o bot, estes modelos podem ser versionados e evoluídos entre bots. Os notebooks avaliam o funcionamento de acordo com o formato das intents e stories. O elasticsearch coleta os dados da conversa e armazena para a análise feita pelo kibana, que gera gráficos para avaliação das conversas dos usuários e da Tais.
Para testar a Tais utilizando da plataforma do RocketChat, siga os seguintes comandos para subir os containers em seu computador:
sudo docker-compose up -d rocketchat
# aguarde o container subir
sudo docker-compose up botApós esses comandos o RocketChat deve estar disponível na porta 3000 do seu computador. Entre em http://localhost:3000 para acessar. Será pedido que faça login. Por padrão é gerado um usuário admin:
username: admin
senha: admin
Para colocar a Tais em um site você precisa inserir o seguinte código em Javascript na sua página:
<!-- Start of Rocket.Chat Livechat Script -->
<script type="text/javascript">
(function(w, d, s, u) {
// !!! Mudar para o seu host AQUI !!!
host = 'http://localhost:3000';
// !!! ^^^^^^^^^^^^^^^^^^^^^^^^^^ !!!
w.RocketChat = function(c) { w.RocketChat._.push(c) }; w.RocketChat._ = []; w.RocketChat.url = u;
var h = d.getElementsByTagName(s)[0], j = d.createElement(s);
j.async = true; j.src = host + '/packages/rocketchat_livechat/assets/rocketchat-livechat.min.js?_=201702160944';
h.parentNode.insertBefore(j, h);
})(window, document, 'script', host + '/livechat');
</script>
<!-- End of Rocket.Chat Livechat Script -->Atenção: Você precisa alterar a variável host dentro do código acima para a url do site onde estará o seu RocketChat.
Para testar somente o diálogo com o bot, não é necessário rodar o RocketChat. Caso queira apenas rodar a Tais pelo seu terminal, rode os seguintes comandos:
sudo docker-compose run --rm bot make run-consoleEssa forma de rodar trás também os logs e previsão de intents do Rasa.
Caso precise atualizar os dialogos com o bot após modificações nas intents e stories (coach/data/intents e stories), utilize o seguinte comando na pasta raiz do projeto para treinar o bot novamente:
make trainCaso queira atualizar o treinamento padrão da aplicação, será necessário atualizar a versão da imagem Coach no dockerhub do lappis:
make train
sudo docker push lappis/coach:latestNesse repositório temos também o site para beta testers da Tais. Ele se conecta com a Tais via RocketChat, então para ela estar hospedada é necessário subir o RocketChat.
Antes de rodá-lo é necessário fazer algumas configurações e criar um usuário. Para isso rode os comandos abaixo e crie o seu usuário.
sudo docker-compose run --rm web python manage.py migrate
sudo docker-compose run --rm web python manage.py createsuperuserPara rodar o site em localhost suba o container com esse comando:
sudo docker-compose up -d webVocê pode acessar o site por padrão na url http://localhost:8000. Será necessário fazer o login, com o usuário criado, esse usuário é um super usuário, então ele tem acesso a parte admin, que poderá ser acessada em http://localhost:8000/admin/ e poderá criar novos usuários.
Dashboards que disponibilizamos para a Secretaria Especial da Cultura.
sudo docker-compose run --rm kibana-web python manage.py migrate
sudo docker-compose run --rm kibana-web python manage.py createsuperusersudo docker-compose up -d kibana-webVocê pode acessar o site por padrão na url localhost:8080
Para a análise dos dados das conversas com o usuário, utilize o kibana, e veja como os usuários estão interagindo com o bot, os principais assuntos, média de usuários e outras informações da análise de dados. As mensagens são inseridas no cluster do Elastic Search utilizando o broker RabbitMQ.
Para subir o ambiente do ElasticSearch rode os seguintes comandos:
sudo docker-compose up -d elasticsearch
sudo docker-compose run --rm -v $PWD/analytics:/analytics bot python /analytics/setup_elastic.pyPara habilitar o backup rode o seguinte comando:
sudo docker exec -it tais_elasticsearch_1 curl -XPUT -H "Content-Type: application/json;charset=UTF-8" 'http://localhost:9200/_snapshot/backup' -d '{
"type": "fs",
"settings": {
"location": "/elasticseacrh/backup",
"compress": true
}
}'
# A resposta esperada é: {"acknowledged": true}Inicie o serviço do servidor do RabbitMQ:
sudo docker-compose up -d rabbitmqInicie o serviço do consumidor do RabbitMQ, que ficará responsável por enviar as mensagens para o ElasticSearch:
sudo docker-compose up -d rabbitmq-consumerLembre-se de configurar as seguintes variáveis de ambiente do serviço rabbitmq-consumer no docker-compose.
ENVIRONMENT_NAME=localhost
BOT_VERSION=last-commit-hash
RABBITMQ_DEFAULT_USER=admin
RABBITMQ_DEFAULT_PASS=adminSendo que as configurações de RABBITMQ_DEFAULT_USER e RABBITMQ_DEFAULT_PASS devem ser as mesmas definidas no serviço do rabbitmq.
Para visualização do site rode o comando:
sudo docker-compose up -d kibanaPara acesso do site é necessário fazer o login. Por padrão o usuário criado é admin e a senha é admin
Você pode acessar o kibana no http://locahost:5601
Visualizações de métricas importantes para o desenvolvimento de chatbots, estão disponibilizados para este contexto. Para usar estes templates execute os seguintes passos:
- Suba o container do Kibana e acesse
http://locahost:5601; - Na interface, acesse
Managemente clique emSaved Objects; - Clique em
Import; - Utilize o arquivo
export.jsonna pastaelasticsearch/do projeto.
Existem duas formas para executar a Tais com o broker. A primeira delas é via linha de comando.
Para utilizar esta forma é preciso definir Dentro do arquivo endpoints.yml as configurações do broker:
event_broker:
url: rabbitmq
username: admin
password: admin
queue: bot_messagesDepois basta executar o bot:
sudo docker-compose run --rm bot make run-console-brokerA segunda forma é utilizando o script run-rocketchat que é utilizado quando o bot é executado com o RocketChat como canal. Para isso, as mesmas variáveis devem ser configuradas no arquivo docker/bot/bot.env.
Lembre-se também de configurar como True a seguinte variável do serviço bot no docker-compose.
# Analytics config
ENABLE_ANALYTICS=True
# Broker config
BROKER_URL=rabbitmq
BROKER_USERNAME=admin
BROKER_PASSWORD=admin
QUEUE_NAME=bot_messages
Dashboards mais básicos do Analytics, sem permissão de admin, que disponibilizamos para a Secretaria Especial da Cultura.
Rode as configurações:
sudo docker-compose run --rm kibana-web python manage.py migrate
sudo docker-compose run --rm kibana-web python manage.py createsuperuserPara visualização do site, rode o comando:
sudo docker-compose up -d kibana-webVocê pode acessar o site por padrão na url http://localhost:8080
Para análise de como estão as intents e stories construidas, se está havendo alguma confusão por intents similares ou outros problemas, utilize os notebooks para gerar os gráficos de matriz de confusão e diagrama da estrutura das stories.
Levante o container notebooks
docker-compose up -d notebooksAcesse o notebook em http://localhost:8888. Lá entre na pasta notebooks e vá para a pasta intents ou stories, dependendo do que quer analisar, e abra o arquivo .ipynb.
É possível testar os fluxos de conversação utilizando o Evaluation do Rasa Core. Para testá-los na Tais basta adicionar um arquivo dentro do diretório bot/e2e/ com as histórias a serem testadas. Essas histórias devem ser descritas normalmente, porém com exemplos de frases para cada uma das Intents sendo testadas, segundo o formato abaixo:
## História de teste 1
* definicao_tais: quem é a tais?
- utter_definicao_tais
- utter_objetivo
* afirmar: sim
- utter_processo_como_funciona
* afirmar: sim
- utter_cadastro_salic_video
- utter_cadastro_salic_video
* afirmar: quero
- utter_salic_cadastro_usuario
- utter_continuar_conversa
* negar: não senhora
- utter_despedir
Uma vez que os arquivos de teste foram adicionados ao diretório correto, basta rodar os testes com a task da TAIS:
sudo docker-compose run --rm bot make test-storiesA Tais, no ambiente de produção, consiste no Rasa, RocketChat, página para Beta Testers e o Kibana. Para levantar todo esse ambiente, use os seguintes comandos:
sudo docker-compose up -d rocketchat
sudo docker-compose run --rm web python manage.py migrate
sudo docker-compose run --rm web python manage.py createsuperuser
sudo docker-compose up -d web
sudo docker-compose up -d kibana
sudo docker-compose run --rm -v $PWD/analytics:/analytics bot python /analytics/setup_elastic.py
# aguarde os containers serem levantados
sudo docker-compose up -d botA documentação feita está no github pages, veja no link: lappis-unb.github.io/tais
A documentação se encontra na pasta docs deste repositório. É feita com Jekyll para o github pages. Para rodar a página em seu computador basta rodar o comando:
jekyll serve
Ou rode com docker (atualmente nem sempre funciona o mapeamento de porta - issue #441):
docker-compose up
Acesse a pagina em http://localhost:4000.
A criação de uma nova versão Release é bem simples. Os seguintes passos são necessários para lançar uma nova versão
- edite o CHANGELOG.rst, crie uma nova seção para a release e crie uma nova master loggins section
- Edite o guia de migração para dar assistência para usuários atualizarem para a nova versão
- Commite todas as mudanças acima e gere uma tag para a nova versão usando
git tag -f 0.7.0 -m "Some helpful line describing the release"
git push origin 0.7.0- Rasa - Inteligência Artificial do Bot
- RocketChat - Mensageiro de comunicação do Bot
- Django - Site para beta testers
- Jupyter Notebook - Notebooks para análise da estrutura de intents e stories
- Elasticsearch - Para coleta de dados para análise
- Kibana - Análise dos dados coletados a partir das conversas
- Docker - Os ambientes são todos dockerizados
Ficaremos muito felizes de receber e incorporar suas contribuições. Tem algumas informações adicionais sobre o estilo do código e a documentação.
Em geral o processo é bem simples:
- Crie uma issue descrevendo uma feature que você queira trabalhar (ou olhe as issues com o label
help-wantedegood-first-issue) - Escreva seu código, testes e documentação
- Abra um pull request descrevendo as suas alterações propostas
- Seu pull request será revisado por um dos mantenedores, que pode levantar questões para você sobre eventuais mudanças necessárias ou questões.
Leia o Guia de Contribuição para melhores informações.
Parte da documentação técnica do framework da Tais está disponível na wiki do repositório. Caso não encontre sua resposta, abra uma issue com a tag duvida que tentaremos responder o mais rápido possível.
Em caso de dúvidas em relação ao Rasa, veja o grupo Telegram Rasa Stack Brasil, estamos lá também para ajudar.
Veja mais informações de contato em nosso site: https://lappis.rocks
Todo o framework da Tais é desenvolvido sob a licença GPL3
Veja a lista de dependências de licenças aqui
