Um chatbot de inteligência artificial que roda localmente na rede comunitária, com funcionalidades de transcrição de áudio e processamento de PDFs, sem necessidade de internet externa. Desenvolvido para a Rede Comunitária Portal Sem Porteiras.
Este projeto utiliza a variável de ambiente OLLAMA_HOST para definir o endereço do servidor Ollama:
- Padrão:
http://localhost:11434(ideal para rodar tudo na mesma máquina) - Para usar outro servidor na rede: edite o arquivo
.enve definaOLLAMA_HOSTpara o IP desejado, por exemplo:http://10.208.173.206:11434
Exemplo de
.env:OLLAMA_HOST=http://localhost:11434Ou para servidor remoto:
OLLAMA_HOST=http://10.208.173.206:11434
Sempre copie .env.example para .env e ajuste conforme seu ambiente!
- IA Local: Processamento local sem dependência de serviços externos
- Aceleração GPU: Suporte a GPU NVIDIA para processamento mais rápido
- Upload de PDFs: Faça upload de documentos PDF para que a IA responda baseada no conteúdo
- 🎵 Transcrição de Áudio: Upload e transcrição automática de arquivos de áudio usando Whisper
- Múltiplos Modelos: Suporte a diferentes modelos de IA (LLaMA 2, Mistral, Code Llama)
- Interface Web: Interface moderna e responsiva com tabs para PDFs e áudios
- Histórico: Salva e exporta conversas
- Cache Inteligente: Cache de PDFs e áudios processados para melhor performance
- Sistema: Debian 12 ou Ubuntu 22.04+
- GPU: NVIDIA RTX 4060 ou superior (recomendado)
- RAM: Mínimo 8GB, recomendado 16GB+
- Armazenamento: 20GB livres para modelos e cache
- Docker e Docker Compose: Instalados
- FFmpeg: Para conversão de áudio (instalado automaticamente)
- Acesso à rede local: 10.208.173.206
# Clone o repositório
git clone https://github.com/seu-repo/ia-local-audio.git
cd ia-local-audio
# Deploy inteligente (detecta mudanças automaticamente)
chmod +x deploy.sh
./deploy.sh# Status dos containers
docker-compose ps
# Logs em tempo real
docker-compose logs -f chatbot
# Testar conectividade com servidor Ollama
curl http://10.208.173.206:11434/api/tags# Configurar ambiente de desenvolvimento
chmod +x setup_dev.sh
./setup_dev.sh
# Executar em modo desenvolvimento
chmod +x run_dev.sh
./run_dev.shia-local-audio/
├── app.py # Aplicação principal Flask
├── pdf_processor.py # Processamento de PDFs
├── audio_processor.py # Processamento de áudio (NOVO!)
├── templates/ # Templates HTML
├── static/ # CSS, JS, imagens
├── uploads/ # PDFs e áudios enviados pelos usuários
├── cache/ # Cache de processamento
├── logs/ # Logs da aplicação
├── docker-compose.yml # Configuração Docker produção
├── docker-compose.dev.yml # Configuração Docker desenvolvimento
├── deploy.sh # Script de deploy inteligente
└── requirements.txt # Dependências Python
- Interface web amigável
- Integração com modelo llama2 via Ollama
- Respostas rápidas usando GPU RTX 4060
- Upload de múltiplos PDFs
- Extração de texto usando PyPDF2 e pdfplumber
- OCR para PDFs escaneados
- Uso do conteúdo como contexto para o chat
- Listagem e remoção de PDFs
- Upload de múltiplos formatos de áudio (MP3, WAV, M4A, FLAC, OGG, AAC, WMA)
- Transcrição automática usando Whisper (OpenAI)
- Fallback para SpeechRecognition (Google)
- Conversão automática de formatos usando FFmpeg
- Metadados de áudio (duração, formato, qualidade)
- Uso da transcrição como contexto para o chat
- Listagem e remoção de áudios
- Gerenciamento de PDFs e áudios
- Tabs separados para cada tipo de arquivo
- Logs de sistema
- Status de conectividade
- URL:
http://10.208.173.206:11434 - Modelo: llama2
- GPU: RTX 4060 (no servidor remoto)
- URL:
http://localhost:8080 - Porta: 8080
- Acesso: Rede local
- Tempo de resposta: 2-5 segundos
- Utilização de memória: ~6GB VRAM
- Temperatura: 45-55°C
- Throughput: ~15-20 tokens/segundo
- Whisper: Alta precisão, suporte a português
- Tempo de processamento: 1-3x duração do áudio
- Formatos suportados: MP3, WAV, M4A, FLAC, OGG, AAC, WMA
- Limite de arquivo: 100MB
- CPU (antes): 30-60 segundos por resposta
- GPU (agora): 2-5 segundos por resposta
- Melhoria: 10-15x mais rápido
# Deploy inteligente
./deploy.sh
# Parar containers
docker-compose down
# Rebuild completo
docker-compose build --no-cache
# Ver logs
docker-compose logs -f chatbot
# Reiniciar apenas o chatbot
docker-compose restart chatbot# Setup inicial
./setup_dev.sh
# Executar em desenvolvimento
./run_dev.sh
# Ativar ambiente virtual
source venv/bin/activate
# Instalar dependências
pip install -r requirements.txt# Status do sistema
docker-compose ps
# Uso de recursos
docker stats
# Logs do sistema
tail -f logs/app.log
# Testar API
curl http://localhost:8080/api/health# Verificar se servidor Ollama está acessível
curl http://10.208.173.206:11434/api/tags
# Verificar rede local
ping 10.208.173.206
# Verificar porta
telnet 10.208.173.206 11434# Verificar uso de GPU no servidor remoto
nvidia-smi
# Verificar logs do Ollama
docker-compose logs ollama
# Verificar conectividade de rede
iperf3 -c 10.208.173.206# Limpar cache Docker
docker system prune -a
# Rebuild completo
docker-compose build --no-cache
# Verificar espaço em disco
df -h
# Verificar permissões
ls -la# Verificar se FFmpeg está instalado
ffmpeg -version
# Verificar dependências de áudio
docker-compose exec chatbot pip list | grep -E "(whisper|torch|pydub)"
# Verificar logs de transcrição
docker-compose logs chatbot | grep -i audio- Localização:
logs/app.log - Nível: INFO, ERROR, DEBUG
- Rotação: Automática
# Logs do chatbot
docker-compose logs chatbot
# Logs do servidor Ollama (remoto)
# Verificar no servidor 10.208.173.206- Tempo de resposta: Monitorado automaticamente
- Uso de recursos: Via Docker stats
- Erros: Logs estruturados
- Acesso restrito à rede local
- Sem exposição à internet
- Comunicação criptografada (se configurado)
- Validação de tipos de arquivo
- Limite de tamanho configurável (100MB)
- Sanitização de conteúdo
- Teste as funcionalidades
- Reporte bugs ou melhorias
- Sugira novos recursos
- Ajude na documentação
- Fork do repositório
- Crie uma branch para sua feature
- Commit suas mudanças
- Push para a branch
- Abra um Pull Request
- Grupo: [Link do grupo]
- Canal: [Link do canal]
- Email: [Email de contato]
- PERFORMANCE.md - Análise detalhada de performance
- PDF_FEATURE.md - Documentação da funcionalidade de PDFs
- TROUBLESHOOTING.md - Guia de solução de problemas
Portal Sem Porteiras - Rede Comunitária Local IA Local para Todos 🤖🌐🎵
- Upload de PDF: Clique no botão "📄" no painel lateral
- Seleção: Arraste um arquivo PDF ou clique para selecionar
- Processamento: O sistema extrai automaticamente o texto do PDF
- Ativação: Clique em um PDF na lista para ativá-lo como contexto
- Chat: A IA responderá baseada no conteúdo do PDF ativo
- Extração Inteligente: Usa múltiplos métodos para extrair texto (PyPDF2 + pdfplumber)
- OCR: Suporte a PDFs escaneados usando Tesseract
- Cache: PDFs processados são cacheados para evitar reprocessamento
- Metadados: Extrai título, autor, número de páginas e outras informações
- Limite de Tamanho: Máximo 100MB por arquivo
- Contexto Limitado: Limita o contexto enviado para a IA (2000 caracteres)
- ✅ PDFs com texto (recomendado)
- ✅ PDFs escaneados (OCR básico)
- ✅ PDFs com imagens e tabelas
- Upload de Áudio: Clique no botão "🎤" no painel lateral
- Seleção: Arraste um arquivo de áudio ou clique para selecionar
- Transcrição: O sistema transcreve automaticamente o áudio para texto
- Ativação: Clique em um áudio na lista para ativá-lo como contexto
- Chat: A IA responderá baseada na transcrição do áudio ativo
- Transcrição Inteligente: Usa Whisper (OpenAI) para alta precisão
- Fallback: SpeechRecognition (Google) como alternativa
- Conversão Automática: FFmpeg converte formatos automaticamente
- Metadados: Extrai duração, formato, qualidade e outras informações
- Cache: Áudios processados são cacheados para evitar reprocessamento
- Limite de Tamanho: Máximo 100MB por arquivo
- Contexto Limitado: Limita o contexto enviado para a IA (2000 caracteres)
- ✅ MP3 (recomendado)
- ✅ WAV
- ✅ M4A
- ✅ FLAC
- ✅ OGG
- ✅ AAC
- ✅ WMA
- Whisper (Padrão): Alta precisão, suporte nativo ao português
- SpeechRecognition: Fallback usando API do Google
- Detecção Automática: Escolhe o melhor método automaticamente
- Documentação Local: Upload de manuais, regulamentos e documentos da comunidade
- Educação: Material didático e apostilas para cursos locais
- Administração: Processamento de formulários e relatórios
- Pesquisa: Análise de documentos históricos da comunidade
- 🎵 Reuniões: Transcrição de gravações de reuniões comunitárias
- 🎵 Entrevistas: Processamento de entrevistas e depoimentos
- 🎵 Palestras: Transcrição de palestras e apresentações
- 🎵 Podcasts: Análise de conteúdo de podcasts locais
- Manual da Rede: "Como configurar um novo nó na rede?"
- Regulamento: "Quais são as regras para uso do servidor?"
- Relatório: "Resuma os principais pontos do relatório mensal"
- Apostila: "Explique o conceito de roteamento em redes"
- 🎵 Reunião: "Quais foram as decisões tomadas na reunião de ontem?"
- 🎵 Entrevista: "Resuma os principais pontos da entrevista com o coordenador"
- 🎵 Palestra: "Quais foram os tópicos abordados na palestra sobre segurança?"
# .env
OLLAMA_HOST=http://localhost:11434
MODEL_NAME=llama2- llama2: Modelo geral (padrão)
- mistral: Modelo mais rápido e eficiente
- codellama: Especializado em código
- llama2:13b: Versão maior e mais precisa
- Acesse a interface web
- Selecione o modelo desejado no dropdown
- Clique em "Baixar Modelo"
- Aguarde o download (pode demorar alguns minutos)
# Ver logs do chatbot
docker-compose logs chatbot
# Ver logs do Ollama
docker-compose logs ollama
# Logs de chat
tail -f logs/chat_history.json# Backup dos modelos
sudo docker run --rm -v ollama_data:/root/.ollama -v $(pwd):/backup alpine tar czf /backup/ollama-models-$(date +%Y%m%d).tar.gz -C /root/.ollama .
# Backup de arquivos e cache
tar czf backup-files-$(date +%Y%m%d).tar.gz uploads/ cache/# Limpar cache de arquivos
rm -rf cache/*
# Limpar uploads
rm -rf uploads/*
# Limpar logs antigos
find logs/ -name "*.json" -mtime +30 -delete-
GPU não detectada:
nvidia-smi # Verificar se GPU está funcionando sudo docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi -
Modelo não baixa:
# Verificar espaço em disco df -h # Verificar logs do Ollama docker-compose logs ollama
-
PDF não processa:
# Verificar dependências docker-compose exec chatbot pip list | grep -E "(PyPDF2|pdfplumber)" # Verificar logs docker-compose logs chatbot
-
🎵 Áudio não transcreve:
# Verificar se FFmpeg está instalado ffmpeg -version # Verificar dependências de áudio docker-compose exec chatbot pip list | grep -E "(whisper|torch|pydub)" # Verificar logs de transcrição docker-compose logs chatbot | grep -i audio
-
Interface não carrega:
# Verificar se porta está livre netstat -tlnp | grep 8080 # Reiniciar serviços docker-compose restart
# Ativar logs detalhados
docker-compose up -d --build
docker-compose logs -f chatbotPara contribuir com o projeto:
- Fork o repositório
- Crie uma branch para sua feature
- Faça commit das mudanças
- Abra um Pull Request
Este projeto está licenciado sob a licença MIT - veja o arquivo LICENSE para detalhes.
- Ollama: Framework de IA local
- Whisper: Transcrição de áudio
- Flask: Framework web
- NVIDIA: Suporte a GPU
- FFmpeg: Conversão de áudio
- Comunidade Portal Sem Porteiras: Testes e feedback
Para suporte técnico ou dúvidas:
- Email: suporte@portalsemporteiras.org
- Telegram: @portalsemporteiras
- Issues: GitHub Issues
Desenvolvido com ❤️ para a Rede Comunitária Portal Sem Porteiras
