Skip to content

AluMind Feedback Analysis é uma aplicação web que analisa e visualiza feedbacks dos usuários da AluMind, uma plataforma de bem-estar. Utiliza Python, Flask, MySQL, Azure, Google Gemini, LLMs, Redis, Langchain, HTML/CSS/JS e Git para processar feedbacks, classificar sentimentos e gerar relatórios semanais.

Notifications You must be signed in to change notification settings

lucasboot/feedback-analysis-alumind

Repository files navigation

Feedback Analysis System - AluMind

Capa Projeto

🚧 Feedback Analysis System - AluMind 🚧

Status Em Desenvolvimento

Seções

💻 Sobre o projeto

AluMind Feedback Analysis é uma aplicação web desenvolvida para a análise e visualização de feedbacks dos usuários da plataforma AluMind, que oferece meditações guiadas, sessões de terapia e conteúdos educativos sobre saúde mental. A aplicação tem como objetivo principal processar e exibir feedbacks dos usuários, classificar a análise de sentimentos e gerar relatórios semanais. No intuito de cumprir seus requisitos funcionais, as principais tecnologias utilizadas foram: Python, Flask, MySQL, Azure, Google Gemini, LLMs, Redis, Langchain, HTML/CSS/JS e Git.

Acesse via Browser | Deploy: Ainda não disponível, há um issue encontrado no Vercel ao instalar a biblioteca langchain Acesse o issue aqui


⚙️ Funcionalidades

  • Classificação Feedbacks:

    • Receber um feedback armazenado no banco para processamento;
    • Classificar o feedback em POSITIVO, NEGATIVO ou INCONCLUSIVO;
    • Elencar as features sugeridas pelo feedback, se houver;
    • Armazenar uma razão para qual aquela feature sugerida é relevante;
    • Retornar a análise de determinado feedback.
  • Relatório em página web:

    • Exibição de todos os feedbacks armazenados no banco de dados em forma de tabela;
    • Classificar o status de cada feedback de acordo com o processamento feito ou não dele;
    • Exibir um gráfico do tipo pie para evidenciar as porcentagens de tipos de feedbacks analisados;
    • Exibir um histograma para demonstrar as 10 features mais solicitadas.
  • Resumo Semanal:

    • Gerar uma coleção de informações contendo as %s de feedbacks positivos e negativos;
    • Gerar uma coleção de informações contendo as 5 features mais pedidas e suas razões;
    • Agendar uma rotina semanal às 17h de toda sexta-feira para enviar um email com o resumo para os stakeholders.
  • Página de simulação:

    • Enviar a carga da tabela "feedbacks" para a aplicação, simulando a atividade de outra equipe;
    • Enviar o email de relatório semanal forçadamente no intuito de testar a funcionalidade.

⚙️ Levantamento de Requisitos e discussões

Os requisitos desse projeto foram levantados e dividios em artefatos. Como parte do processo de entendimento do case técnico, uma discussão a respeito das tomadas de decisões feitas para este experimento foram feitas no documento. Além disso, também há um esboço da modelagem do banco de dados: LINK DO ARQUIVO

⚙️ Estrutura da Aplicação

  • init: criação do app com as configurações do Celery

  • celery_config: método para criação do objeto Celery com suas configurações

  • config: configurações gerais da aplicação, como dados para acesso ao banco MySQL

  • models: criação dos modelos de dados utilizados, para melhor manutenção e escalabilidade do projeto

  • Routes:

    • feedback_routes (/feedbacks, /feedbacks_ingestion, /run_script e /generate_weekly_report): rotas para ingestão de feedbacks, análise e geração de relatório semanal
    • pages_routes (/report, /simulation, /feedback/<feedback_id>, /sentiment_distribution e /top-features, /run_weekly_routine): rotas para carregar os templates html, coletar os dados exibidos (tabela e gráficos).
  • Services:

    • database_service: métodos para manipular os dados do banco MySQL, principalmente os de inserção;
    • feedback_service: métodos relacionados ao uso de LLM para analisar feedback e classificar como spam.
  • Static:

    • css: estilos utilizados nas páginas do projeto;
    • js: adição da lógica da página web de report.
  • Templates:

  • Utils:

    • database.py: método para conexão com o banco de dados;
    • send_weekly_report: criação da task Celery para envio do email e geração do conteúdo dele;
    • sending_simulation: script para simular o envio dos feedbacks por alguém de outro time de desenvolvimento.

🌐 Rotas da Aplicação

  • POST /feedbacks - principal, basta enviar um feedback existente no banco de dados para análise:
{
    "id": "6c9d778b-46f3-450f-b0b5-2654ed9ef648",
    "feedback": "Estou usando o AluMind há algumas semanas e já notei algumas mudanças. Ainda não tenho certeza se os resultados são consistentes."
}
  • POST /feedbacks_ingestion - rota secundária para inserir novos feedbacks no banco e simular a alimentação por outra equipe de desenvolvimento
[
  {
    "feedback": "Estou usando o AluMind há algumas semanas e já notei algumas mudanças. Ainda não tenho certeza se os resultados são consistentes."
  },
  {
    "feedback": "O suporte ao cliente demorou muito para responder minha solicitação. Isso é inaceitável."
  },
  {
    "feedback": "O aplicativo oferece muitos recursos úteis, mas não tenho certeza se todos eles são aplicáveis ao meu caso específico. Preciso de mais tempo para avaliar."
  }
]

🎨 Layout

Web /report

Home Page - imagem 01 Home Page - imagem 02 Home Page - imagem 03 Home Page - imagem 04

Home Page - imagem 05 Home Page - imagem 06


🛣️ Como executar o projeto

Pré-requisitos

Antes de começar, você vai precisar ter instalado em sua máquina as seguintes ferramentas: Git, Python 3.11+, MySQL e MySQL Workbench. Além disso, é bom ter um editor para trabalhar com o código como VSCode

🎲 Rodando o projeto localmente

# Clone este repositório
$ git clone git@github.com:lucasboot/feedback-analysis-alumind.git

# Acesse a pasta do projeto no terminal/cmd
$ cd feedback-analysis-alumind

# Uso de environment isolado (Opcional)
$  python -m venv myenv 
## Windows
$  myenv\Scripts\activate 
## MacOS e Linux
$ source myenv/bin/activate


# Instale as dependências
$  pip install -r .\requirements.txt   

# Execute a aplicação local
$ python app.py

# O projeto executará na porta: 5000 - acesse http://127.0.0.1:5000/

🎒 Instruções para uso

  • ✅ Crie um arquivo .env na raíz do projeto e adicione:

    • MYSQL_USER=usuario_banco_dados;
    • MYSQL_PASSWORD=senha_banco_dados
    • MYSQL_HOST=host_banco_dados
    • MYSQL_DB=alumind_db
    • GOOGLE_AI_API_KEY=sua_chave_da_google_api
    • 🔴 Você pode criar uma chave da Google API gratuitamente AQUI
    • 🔴 Se você gostaria de utilizar o banco hospedado na Azure, sinta-se livre para me enviar um email com seu IP de conexão, pois é necessário adicionar o seu IP na lista de permissões do firewall.
  • ✅ No MySQL Workbench, execute o script de criação do banco

  • ✅ Com a aplicação em execução, alimente o banco de dados pela rota POST http://127.0.0.1:5000/feedbacks_ingestion adicionando um JSON no body em formato de lista, como no arquivo: feedbacks para inserção

  • ✅ Agora que os feedbacks estão armazenados no banco, para enviá-los para a API analisar, basta acessar a página (http://127.0.0.1:5000/simulation), que só existe no escopo desse protótipo para simular o envio deles por outra equipe de desenvolvimento e clique no botão "Enviar feedbacks" e aguarde o processamento de todos (Essa etapa pode demorar um tempo considerável, dependendo da quantidade de feedbacks adicionados na /feedbacks_ingestion)

  • ✅ Após finalizar a etapa anterior, já é possível acessar a página de report (http://127.0.0.1:5000/report), caso você tente acessar antes de adicionar feedbacks/criar o banco, uma página sinalizando isso é exibida no lugar

  • ✅ A aplicação está configurada para enviar o relatório semanal de feedbacks toda sexta-feira às 17h, mas você pode testar a qualidade do email gerado (que também é gerado com LLMs!) substituindo no ARQUIVO o parâmetro schedule por 'schedule': crontab(minute='*') para que o email seja enviado a cada 1 minuto. Não esqueça de adicionar o seu email como destinatário para poder recebê-lo na lista "to_emails" do ARQUIVO

  • ✅ Uma outra forma de testar o envio de email, é acessar a rota /simulation e clicar no botão "Forçar envio do email semanal"

  • 🔴 O Redis Cache utilizado para administrar o uso da biblioteca Celery foi criado e está com sua configuração inserida no próprio código, caso o seu uso esteja indisponível, crie um gratuitamente Link e edite as variáveis dele no ARQUIVO

  • 🔴 A quota de uso do Gemini gratuito pode chegar em exaustão enquanto os feedbacks são analisados, mas isso não cancela sua execução, enquanto na página /simulation, aguarde um alert surgir para sinalizar o fim do processamento.

🛠 Tecnologias E Versões

As seguintes ferramentas/bibliotecas foram usadas na construção do projeto:

Desenvolvimento

  • Python 3.11.1
  • MySQL 8.0.21
  • Flask 2.3.1
  • langchain-google-genai 1.0.7
  • Redis Stack 7.2.3
  • Git/Github

Utilitários

🚀 Melhorias Futuras

  1. Concluir os testes dos modulos da aplicação, falta aumentar a cobertura e criar testes para alguns scripts;
  2. Adição e melhoria dos logs da aplicação para facilitar a resolução de bugs;
  3. Revisar os comentários do código;
  4. Analisar a necessidade da criação de View no banco de dados para agilizar alguma consulta;
  5. Refatorar a lógica de carregamento da página /report para iniciar a consulta ao banco de dados só depois de renderizar a página;
  6. Adição do campo de timestamp nos feedbacks para o relatório semanal levar a data em consideração;
  7. Criaçao do Swagger da aplicação.

💪 Como contribuir para o projeto

  1. Faça um fork do projeto.
  2. Crie uma nova branch com as suas alterações: git checkout -b my-feature
  3. Salve as alterações e crie uma mensagem de commit contando o que você fez: git commit -m "feature: My new feature"
  4. Envie as suas alterações: git push origin my-feature

🧙‍♂️ Autor

Feito por Lucas Alves👋🏽 Entre em contato!


About

AluMind Feedback Analysis é uma aplicação web que analisa e visualiza feedbacks dos usuários da AluMind, uma plataforma de bem-estar. Utiliza Python, Flask, MySQL, Azure, Google Gemini, LLMs, Redis, Langchain, HTML/CSS/JS e Git para processar feedbacks, classificar sentimentos e gerar relatórios semanais.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published