Um sistema inteligente de chat baseado em Retrieval-Augmented Generation (RAG) que permite fazer perguntas sobre editais acadêmicos e receber respostas contextualizadas baseadas no conteúdo dos documentos.
- Processamento de PDFs: Carrega e processa documentos PDF de editais acadêmicos
- Vetorização Local: Usa embeddings gratuitos e locais (HuggingFace) para evitar limites de API
- Banco de Dados Persistente: Armazena embeddings no ChromaDB para reutilização
- Chat Interativo: Interface de chat no terminal para perguntas e respostas
- Avaliação Inteligente: Sistema que decide se usar contexto do documento ou conhecimento geral
- LangGraph: Fluxo de trabalho estruturado com nós condicionais para processamento inteligente
- Python 3.13
- LangChain: Framework para aplicações LLM
- LangGraph: Orquestração de fluxos de trabalho
- ChromaDB: Banco de dados vetorial
- Google Gemini: Modelos de linguagem para geração de respostas
- HuggingFace Transformers: Embeddings locais gratuitos
- Poetry: Gerenciamento de dependências
- Python 3.13+
- Poetry (gerenciador de dependências)
- Chave da API do Google Gemini (GOOGLE_API_KEY)
- Clone o repositório:
git clone https://github.com/seu-usuario/ragpei2.git
cd ragpei2- Instale as dependências:
poetry install-
Configure o ambiente:
- Crie um arquivo
.envna raiz do projeto - Adicione sua chave da API do Google Gemini:
GOOGLE_API_KEY=sua_chave_aqui - Crie um arquivo
-
Prepare o documento:
- Coloque o PDF do edital em
ragpei2/docs/edital_mestrado_ppgi_2025_2.pdf - Ou ajuste o caminho no código em
main.py
- Coloque o PDF do edital em
Se precisar de um arquivo requirements.txt para deploy em ambientes que não usam Poetry, gere com:
poetry export -f requirements.txt --output requirements.txtIsso criará um arquivo requirements.txt com todas as dependências do projeto.
com isso sera sera possivel instalar as dependencias usando pip install -r requirements.txt
- Ative o ambiente virtual:
poetry shell- Execute o chat:
poetry run python ragpei2/main.py- Interaja com o chat:
- Digite suas perguntas sobre o edital
- Digite "sair" para encerrar
O sistema segue este fluxo inteligente:
- Carregamento: Processa o PDF e divide em chunks
- Vetorização: Cria embeddings usando modelo local (sentence-transformers)
- Armazenamento: Salva no ChromaDB (persistente)
- Chat Loop:
- Recebe pergunta do usuário
- Busca documentos relevantes no banco vetorial
- Avalia se os documentos são suficientes para responder
- Gera resposta usando contexto (RAG) ou conhecimento geral (fallback)
ragpei2/
├── pyproject.toml # Configuração do Poetry
├── README.md # Esta documentação
├── ragpei2/
│ ├── __init__.py
│ ├── main.py # Código principal do chat RAG
│ └── docs/ # Diretório para documentos
│ └── edital_mestrado_ppgi_2025_2.pdf
├── tests/
│ └── __init__.py
└── chroma_db/ # Banco vetorial (criado automaticamente)
💬 CHAT RAG - Digite 'sair' para encerrar
==================================================
🤔 Você: Qual é o período de inscrição?
🔍 Processando...
--- NÓ: RETRIEVE_DOCS ---
Documentos encontrados: 3
--- NÓ: GRADE_DOCUMENTS (Avaliação) ---
Resultado da avaliação: sim
--- NÓ: GENERATE_ANSWER (RAG) ---
🤖 Assistente: As inscrições para o Mestrado em Informática do PPGI 2025/2 estarão abertas
no período de 01 de dezembro de 2024 a 31 de janeiro de 2025. Os candidatos devem enviar
toda a documentação exigida para o email ppgi@ufma.br até as 23h59 do dia 31 de janeiro de 2025.
--------------------------------------------------
Para usar um modelo diferente de embedding, modifique em main.py:
embeddings = HuggingFaceEmbeddings(
model_name="outro-modelo-huggingface",
model_kwargs={'device': 'cpu'}
)Modifique o número de documentos recuperados:
retriever = vectorstore.as_retriever(search_kwargs={"k": 5}) # Busca top-5Ajuste o tamanho dos chunks de texto:
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=1500, # Tamanho do chunk
chunk_overlap=300, # Sobreposição entre chunks
length_function=len,
)Também é possível interagir com o sistema via uma interface de chat moderna na web usando Streamlit.
- Execute o frontend Streamlit:
poetry run streamlit run app.py- Acesse no navegador:
- O Streamlit exibirá um link (geralmente http://localhost:8501)
- Faça perguntas diretamente na interface web, com histórico de chat e visual moderno
Obs: O backend não será reprocessado a cada execução do Streamlit, apenas consultas ao banco vetorial já criado.
- Fork o projeto
- Crie uma branch para sua feature (
git checkout -b feature/nova-feature) - Commit suas mudanças (
git commit -am 'Adiciona nova feature') - Push para a branch (
git push origin feature/nova-feature) - Abra um Pull Request
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
Para dúvidas ou sugestões, abra uma issue no GitHub ou entre em contato com os mantenedores do projeto.
Desenvolvido com ❤️ para facilitar o acesso a informações acadêmicas