Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/armanoalves/desafio_tecnico_alura
Um desafio técnico que utiliza Flask e a API da OpenAI para analisar feedbacks de usuários, determinando o sentimento e armazenando os resultados em um banco de dados. Oferece endpoints para enviar feedbacks, e consultar os feedbacks e sentimentos analisados.
https://github.com/armanoalves/desafio_tecnico_alura
flask openai postgresql postman python sqlalchemy
Last synced: about 2 months ago
JSON representation
Um desafio técnico que utiliza Flask e a API da OpenAI para analisar feedbacks de usuários, determinando o sentimento e armazenando os resultados em um banco de dados. Oferece endpoints para enviar feedbacks, e consultar os feedbacks e sentimentos analisados.
- Host: GitHub
- URL: https://github.com/armanoalves/desafio_tecnico_alura
- Owner: armanoalves
- License: mit
- Created: 2024-08-15T12:07:18.000Z (5 months ago)
- Default Branch: main
- Last Pushed: 2024-08-16T14:16:31.000Z (5 months ago)
- Last Synced: 2024-10-13T11:06:21.536Z (3 months ago)
- Topics: flask, openai, postgresql, postman, python, sqlalchemy
- Language: Python
- Homepage:
- Size: 48.8 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Análise de Sentimentos Alumind
Este projeto é uma aplicação desenvolvida com Flask para realizar a análise de sentimentos de feedbacks de usuários. Ele utiliza a API da OpenAI para processar os textos fornecidos, determinando se o sentimento é `POSITIVO`, `NEGATIVO`, `INCONCLUSIVO` e `SPAM`, e identifica características específicas solicitadas pelos usuários.
![GIF que mostra o teste da rota de analise nos 4 tipos de retornos que ela pode apresentar](https://i.imgur.com/8aTVhJp.gif)
## Funcionalidades
- Recebe feedbacks de usuários via API.
- Análise de sentimentos usando a API da OpenAI.
- Armazena feedbacks, sentimentos e características solicitadas em um banco de dados.
- Retorna os resultados da análise em formato JSON.## Tecnologias Utilizadas
- **Python**: Linguagem principal.
- **Flask**: Framework web.
- **SQLAlchemy**: ORM para interagir com o banco de dados.
- **OpenAI API**: Para análise de sentimentos.
- **PostgreSQL**: Banco de dados relacional.
- **Postman**: Para testar as rotas da API.## Requisitos
- Python 3.12.3
- PostgreSQL## Estrutura do Banco de Dados
Estrutura das tabelas que compõem o banco de dados. Ao longo do desenvolvimento do código, sofreram alguns pequenos ajustes nos relacionamentos entre si, mas nada que se difere da estrutura mostrada na imagem.
![Captura de tela de tabelas na plataforma do BRModelo Online](https://i.imgur.com/jg7npqL.png)
## Estrutura do Projeto
A estrutura do projeto é organizada da seguinte forma:
```
projeto-analise-sentimentos/
│
├── app/
│ ├── __init__.py # Configurações iniciais do Flask, SQLAlchemy e outras extensões
│ ├── controllers.py # Controladores que gerenciam as rotas e a lógica de negócio
│ ├── models.py # Definições dos modelos de banco de dados
│ └── routes.py # Definição das rotas da aplicação
│
├── migrations/ # Migrações do banco de dados geradas pelo Flask-Migrate
│
├── venv/ # Ambiente virtual para as dependências do projeto
│
├── .env # Arquivo de configuração das variáveis de ambiente
├── .gitignore # Arquivo que especifica quais arquivos/directórios ignorar pelo Git
├── config.py # Configurações da aplicação
├── LICENSE # Licença do projeto
├── README.md # Documentação do projeto (este arquivo)
├── requirements.txt # Lista de dependências do projeto
└── run.py # Script para rodar o servidor Flask
```## Como Executar
### 1. Clonar o Repositório
```bash
git clone https://github.com/armanoalves/desafio_tecnico_alura.git
cd desafio_tecnico_alura
```### 2. Instalar Dependências
Utilize o comando abaixo para instalar todas as dependências necessárias para executar o projeto:
```bash
pip install -r requirements.txt
```### 3. Configurar as Variáveis de Ambiente
Preencha o arquivo `.env` com as informações necessárias para conectar ao banco de dados e utilizar a API da OpenAI. Crie um arquivo `.env` na raiz do projeto e adicione as seguintes variáveis:
```env
DB_USERNAME=seu_usuario_do_banco
DB_PASSWORD=sua_senha_do_banco
DB_HOST=localhost
DB_PORT=5432
DB_DATABASE=nome_do_seu_bancoOPENAI_API_KEY=sua_api_key
```### 4. Apontar para aplicação o arquivo principal
Para ser possível rodar os próximos comandos é importante estabelecer para o ambiente da aplicação qual o arquivo principal da mesma, você pode fazer isso usando o seguinte comando:
**Windows**
```bash
$env:FLASK_APP="run.py"
```ou
**Linux**
```bash
export FLASK_APP="run.py"
```### 5. Criar as Tabelas no Banco de Dados
Para realizar a migrações das tabelas criadas no model do projeto, é necessário rodar o seguinte comando:
```bash
flask db upgrade
```### 6. Executar a Aplicação
Após configurar as variáveis de ambiente, execute o comando abaixo para iniciar o servidor Flask:
```bash
python .\run.py runserver
```O servidor será iniciado e a aplicação estará disponível em `http://localhost:5000`.
## Endpoints
### 1. Analisar Feedback
**POST** `/openai_analizer`
**CASO 1**
- **Descrição**: Envia um feedback para análise de sentimentos e adiciona o feedback e o sentimento gerado ao banco de dados.
- **Corpo da Requisição**:```json
{
"feedback": "Exemplo de feedback para análise."
}
```- **Resposta**:
```json
{
"message": "Feedback e Sentimento adicionados ao banco com sucesso"
}
```**CASO 2**
- **Descrição**: Caso em que o Feedback analisado é reconhecido como um SPAM.
- **Corpo da Requisição**:```json
{
"feedback": "Coisas aleatórias escritas aqui"
}
```- **Resposta**:
```json
{
"message": "SPAM reconhecido, feedback e sentimento não foram adicionados ao banco"
}
```### 2. Listar Feedbacks
**GET** `/feedbacks`
- **Descrição**: Retorna o feedback enviado na requisição POST para análise.
- **Resposta**:
```json
[
{
"id": 1,
"feedback": "Exemplo de feedback para análise."
}
]
```### 3. Listar Sentimentos
**GET** `/sentiments`
- **Descrição**: Retorna o sentimento gerado na análise do feedback enviado.
- **Resposta**:
```json
[
{
"id": 1,
"sentiment": "POSITIVO",
"requested_features": [
{
"code": "EDITAR_PERFIL",
"reason": "O usuário gostaria de realizar a edição do próprio perfil"
}
]
}
]
```## Implementações Futuras
* Criar uma página frontend que lista os feedbacks com algum gráfico indicando a porcentagem de cada tipo: negativo, positivo, inconclusivo
* Implementar a documentação completa para cobrir todos os aspectos da aplicação incluindo API modelos de dados, sem contar os exemplos de uso.
* Aplicar um sistema de segurança para proteger dados dos usuários com autenticação via JWT proteção contra ataques como SQL Injection e XSS e criptografia de dados sensíveis.
## Licença
Este projeto está licenciado sob a licença MIT. Veja o arquivo [LICENSE](LICENSE) para mais detalhes.