Este projeto implementa um bot para WhatsApp que permite buscar informações no Reddit e processar os resultados usando um modelo de linguagem (LLM). Quando um usuário envia uma mensagem para o número do WhatsApp configurado, o sistema busca conteúdo relevante no Reddit, utiliza um modelo de linguagem para resumir as informações e envia as respostas formatadas de volta para o usuário.
- Recebe mensagens do WhatsApp via Webhook
- Busca conteúdo relevante no Reddit baseado no termo pesquisado
- Gera múltiplas perguntas semelhantes para melhorar os resultados da busca
- Processa o conteúdo usando um modelo de linguagem para gerar resumos em português
- Exibe barras de progresso para acompanhar o status das buscas e do processamento
- Envia os resultados formatados de volta para o usuário via WhatsApp
- Executa o processamento em segundo plano para não bloquear o webhook
- Lida com diferentes tipos de eventos da API do WhatsApp (mensagens e status)
- Python 3.11 ou superior
- Bibliotecas:
- Flask >= 2.0.0
- Flask-Smorest >= 0.35.0
- Requests >= 2.31.0
- PRAW (Python Reddit API Wrapper) >= 7.7.0
- Rich >= 13.7.0
- python-dotenv >= 1.0.0
- watchdog (para o script monitor.py)
-
Clone o repositório:
git clone https://github.com/seu-usuario/reddit-llm-search.git cd reddit-llm-search
-
Crie um ambiente virtual e ative-o:
python -m venv venv source venv/bin/activate # No Windows use `venv\Scripts\activate`
-
Instale as dependências:
pip install -r requirements.txt
-
Configure as credenciais:
- Renomeie
config.example.json
paraconfig.json
e adicione suas credenciais da API do Reddit:{ "client_id": "seu_client_id_do_reddit", "client_secret": "seu_client_secret_do_reddit", "user_agent": "seu_user_agent" }
- Crie um arquivo
.env
na raiz do projeto e adicione seu token da API do WhatsApp:WHATSAPP_API_TOKEN=seu_token_aqui
- Renomeie
app.py
: Aplicação Flask principal com o webhook para o WhatsAppreddit_llm_search.py
: Implementa a classe RedditLLMSearcher para buscar no Reddit e processar com LLMutils.py
: Contém funções utilitárias como limpeza de texto, carregamento de configurações e truncamentomonitor.py
: Script para monitorar alterações nos arquivos Python durante o desenvolvimentorequirements.txt
: Lista de dependências do projetoconfig.json
: Configurações da API do Reddit (não incluso no repositório)config.example.json
: Exemplo de arquivo de configuração para a API do Reddit.env
: Arquivo com variáveis de ambiente (não incluso no repositório)serverless.yml
: Configuração para implantação serverless (opcional)
-
Inicie o servidor Flask:
python app.py
-
Configure o webhook no WhatsApp Business Cloud API para apontar para o seu endpoint:
https://seu-dominio.com/webhook
Para desenvolvimento local, você pode usar ferramentas como ngrok:
ngrok http 5000
-
Envie uma mensagem para o número de telefone do WhatsApp associado à sua conta do WhatsApp Business:
- A mensagem deve conter o termo que você deseja pesquisar no Reddit
- O sistema confirmará o recebimento da mensagem
- Em aproximadamente 2 minutos, você receberá os resultados formatados
- O usuário envia uma mensagem para o número do WhatsApp
- O webhook recebe a mensagem via POST
- O sistema envia uma confirmação de recebimento
- Em segundo plano, o processo de busca no Reddit é iniciado:
- Gera perguntas semelhantes baseadas no termo original
- Busca postagens relevantes no Reddit
- Processa cada resultado usando o modelo de linguagem
- Formata as respostas e remove tags desnecessárias
- Os resultados são enviados de volta para o usuário
- Verifica se a mensagem recebida contém a chave 'messages' ou 'statuses'
- Trata erros de rate limit da API do Reddit com espera automática
- Implementa retentativas para chamadas ao modelo de linguagem
- Fornece feedback sobre o progresso do processamento
O projeto inclui um script monitor.py
que pode ser usado durante o desenvolvimento para monitorar alterações nos arquivos Python:
python monitor.py
O projeto inclui um arquivo serverless.yml
para implantação em ambientes serverless, como AWS Lambda.
Contribuições são bem-vindas! Sinta-se à vontade para abrir um pull request ou relatar problemas.
Este projeto está licenciado sob a MIT License - veja o arquivo LICENSE para mais detalhes.