MAIA — Meeting AI Assistant
Grave, transcreva e analise suas reuniões com Inteligência Artificial
Instalação •
Arquitetura •
Configuração •
Deploy •
API
📖 Sobre o Projeto
O MAIA (Meeting AI Assistant) é uma plataforma desenvolvida pela ASAP Telecom para gravar, transcrever e analisar reuniões automaticamente usando Inteligência Artificial.
✨ Funcionalidades Principais
- 🎙️ Gravação contínua de reuniões via navegador (sem gaps, usando MediaRecorder API com timeslice)
- 📝 Transcrição automática com Whisper.cpp na GPU (modelo large-v3, alta precisão)
- 👥 Diarização de speakers — identifica quem falou o quê (SpeechBrain ECAPA-TDNN, ~85% precisão)
- 🤖 Análise com IA — resumo, pontos de ação e insights com LLM (deepseek-v3.1)
- 🔐 Autenticação SSO via Keycloak
- 📱 PWA instalável em Android e iOS
- 🔎 Histórico com busca de reuniões passadas
- 👤 Identificação de speakers por enrollment de voz
🏗️ Arquitetura
┌─────────────────────────────────────────────────────────────────┐
│ CLIENTE │
│ Browser / PWA (React 18 + Vite + TypeScript) │
│ MediaRecorder API → chunks de áudio → upload automático │
└────────────────────────┬────────────────────────────────────────┘
│ HTTPS
▼
┌─────────────────────────────────────────────────────────────────┐
│ APP SERVER (5.0.0.181) │
│ ┌─────────────┐ ┌──────────────────┐ ┌──────────────────┐ │
│ │ Nginx :80 │ │ Backend API :8090 │ │ Diarization :5060│ │
│ │ (Frontend) │ │ FastAPI + Celery │ │ FastAPI+SpeechBr.│ │
│ └─────────────┘ └────────┬─────────┘ └────────┬─────────┘ │
│ │ │ │
│ ┌─────────────┐ ┌────────▼─────────┐ │ │
│ │ PostgreSQL │ │ Redis (Celery) │ │ │
│ └─────────────┘ └──────────────────┘ │ │
└────────────────────────────┬──────────────────────┼────────────┘
│ │
┌──────────────▼──────┐ ┌──────────▼───────────┐
│ GPU SERVER │ │ LLM Server │
│ 10.100.16.13 :5003 │ │ asapai.asaptelecom. │
│ Whisper.cpp GPU │ │ com.br/ollama │
│ AMD GPU, large-v3 │ │ deepseek-v3.1:671b │
└─────────────────────┘ └──────────────────────┘
┌─────────────────────┐
│ Keycloak SSO │
│ Autenticação/Authz │
└─────────────────────┘
📁 Estrutura do Monorepo
Maia/
├── frontend/ # PWA React 18 + Vite + TypeScript
├── backend/ # API FastAPI + Celery + PostgreSQL
├── diarization/ # API de Diarização com SpeechBrain
├── README.md
└── CHANGELOG.md
⚙️ Requisitos
| Componente |
Requisito |
| Node.js |
18+ |
| Python |
3.11+ |
| PostgreSQL |
14+ |
| Redis |
7+ |
| GPU |
AMD/NVIDIA (para Whisper GPU) |
| RAM |
16 GB mínimo (32 GB recomendado) |
| VRAM |
8 GB mínimo para Whisper large-v3 |
🚀 Instalação
Frontend
cd frontend
npm install
cp .env.example .env
# Edite o .env com as variáveis necessárias
npm run dev # desenvolvimento
npm run build # produção
Backend
cd backend
python -m venv venv
source venv/bin/activate # Linux/Mac
venv\Scripts\activate # Windows
pip install -r requirements.txt
cp .env.example .env
# Edite o .env com as variáveis necessárias
alembic upgrade head # aplicar migrações
uvicorn app.main:app --host 0.0.0.0 --port 8090
Diarization API
cd diarization
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
uvicorn main:app --host 0.0.0.0 --port 5060
🔧 Configuração
Variáveis de Ambiente — Backend (backend/.env)
DATABASE_URL=postgresql://user:password@localhost:5432/maia
REDIS_URL=redis://localhost:6379/0
KEYCLOAK_URL=https://seu-keycloak.exemplo.com
KEYCLOAK_REALM=seu-realm
KEYCLOAK_CLIENT_ID=maia-backend
OLLAMA_URL=https://llm.exemplo.com/ollama
OLLAMA_MODEL=deepseek-v3.1:671b-cloud
WHISPER_URL=http://gpu-server:5003
Variáveis de Ambiente — Diarization API (diarization/.env)
WHISPER_ORIGIN=http://gpu-server:5003
VOICE_DB_PATH=/data/voice_db
SPEAKER_CONFIDENCE_THRESHOLD=0.75
HF_TOKEN=seu_token_huggingface
SPEECHBRAIN_CACHE=/data/speechbrain_cache
Variáveis de Ambiente — Frontend (frontend/.env)
VITE_API_URL=http://seu-backend:8090
VITE_KEYCLOAK_URL=https://seu-keycloak.exemplo.com
VITE_KEYCLOAK_REALM=seu-realm
VITE_KEYCLOAK_CLIENT_ID=maia-frontend
🐳 Deploy
Com Podman/Docker Compose
# Na raiz do projeto
podman-compose up -d
Deploy Manual
Backend (systemd)
# /etc/systemd/system/maia-backend.service
[Unit]
Description=MAIA Backend API
After=network.target postgresql.service redis.service
[Service]
User=maia
WorkingDirectory=/opt/Backend/meeting-assistant-api
ExecStart=/opt/Backend/venv/bin/uvicorn app.main:app --host 0.0.0.0 --port 8090
Restart=always
[Install]
WantedBy=multi-user.target
Celery Worker
celery -A app.celery_app worker --loglevel=info -Q transcription,analysis
Frontend (Nginx)
server {
listen 80;
root /var/www/maia;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
location /api/ {
proxy_pass http://localhost:8090/;
}
}
🔌 Endpoints Principais da API
Backend API (http://server:8090)
| Método |
Endpoint |
Descrição |
POST |
/meetings/ |
Criar nova reunião |
GET |
/meetings/ |
Listar reuniões |
GET |
/meetings/{id} |
Detalhes da reunião |
DELETE |
/meetings/{id} |
Deletar reunião |
POST |
/meetings/{id}/upload-chunk |
Upload de chunk de áudio |
POST |
/meetings/{id}/finalize |
Finalizar e processar reunião |
GET |
/meetings/{id}/transcript |
Transcrição completa |
GET |
/meetings/{id}/analysis |
Análise da IA |
POST |
/speakers/enroll |
Enrollar speaker com voz |
GET |
/speakers/ |
Listar speakers |
GET |
/admin/users |
(Admin) Listar usuários |
Diarization API (http://server:5060)
| Método |
Endpoint |
Descrição |
POST |
/transcribe |
Transcrever + diarizar áudio |
POST |
/enroll |
Enrollar voz de speaker |
GET |
/speakers |
Listar speakers cadastrados |
DELETE |
/speakers/{name} |
Remover speaker |
GET |
/health |
Health check |
🛠️ Tecnologias
Frontend
| Tecnologia |
Versão |
Uso |
| React |
18 |
Framework UI |
| Vite |
5 |
Build tool |
| TypeScript |
5 |
Tipagem estática |
| Zustand |
4 |
Gerenciamento de estado |
| Axios |
1.x |
Cliente HTTP |
| Workbox |
7 |
PWA / Service Worker |
| MediaRecorder API |
— |
Gravação de áudio |
Backend
| Tecnologia |
Versão |
Uso |
| FastAPI |
0.110+ |
Framework API |
| SQLAlchemy |
2.x |
ORM |
| Alembic |
1.x |
Migrações de banco |
| PostgreSQL |
14+ |
Banco de dados |
| Celery |
5.x |
Processamento assíncrono |
| Redis |
7+ |
Broker/Cache |
| httpx |
0.27+ |
Cliente HTTP assíncrono |
Diarização & IA
| Tecnologia |
Uso |
| Whisper.cpp |
Transcrição de áudio (GPU) |
| SpeechBrain ECAPA-TDNN |
Diarização de speakers |
| pyannote.audio |
Diarização (fallback) |
| librosa |
Processamento de áudio |
| deepseek-v3.1 |
Análise e resumo de reuniões |
Infraestrutura
| Tecnologia |
Uso |
| Podman |
Containerização |
| Nginx |
Reverse proxy / Servir frontend |
| systemd |
Gerenciamento de serviços |
| Keycloak |
SSO / Autenticação |
📄 Licença
Proprietário — ASAP Telecom. Todos os direitos reservados.
Desenvolvido com ❤️ pela equipe ASAP Telecom