Sistema RAG com Ollama LLM para responder perguntas sobre o Regulamento Pedagógico da ESTG
Explorar a documentação »
Ver Demonstração
·
Reportar Bug
·
Solicitar Funcionalidade
Índice
Este projeto implementa um sistema de Retrieval-Augmented Generation (RAG) utilizando o modelo LLM local Ollama para responder a perguntas sobre o Regulamento Pedagógico da ESTG. O sistema foi desenvolvido como parte do Trabalho Prático 3 da disciplina de Inteligência Artificial do curso de Engenharia Informática do IPVC.
O projeto adapta a plataforma UROBOT para utilizar o modelo LLM local Ollama em vez do ChatGPT, aplicando a técnica de Retrieval-Augmented Generation (RAG) para melhorar a precisão das respostas sobre o Regulamento Pedagógico da ESTG. A interface web foi desenvolvida com Streamlit, proporcionando uma experiência interativa e amigável.
Principais características:
- Interface web interativa desenvolvida com Streamlit
- Processamento de PDF e divisão em chunks otimizados
- Embeddings e vectorstore local com ChromaDB
- Pipeline RAG completo com LangChain
- Sistema de cache multi-camada para performance otimizada
- Documentação detalhada para uso e desenvolvimento
O projeto foi desenvolvido utilizando as seguintes tecnologias:
Para obter uma cópia local em funcionamento, siga estas etapas simples.
- Python 3.10+
- Ollama (servidor local de LLM)
- Dependências Python listadas em
requirements.txt
:langchain>=0.1.0 langchain-community>=0.1.0 langchain-ollama>=0.1.0 chromadb>=0.4.22 pypdf>=3.17.0 streamlit>=1.30.0 pydantic>=2.5.0 python-dotenv>=1.0.0 tqdm>=4.66.0
- Clone o repositório
git clone https://github.com/lucasmaciel03/ipvc-rag-ollama.git cd ipvc-rag-ollama
- Crie e ative um ambiente virtual
python -m venv streamlit_env source streamlit_env/bin/activate # No Windows: streamlit_env\Scripts\activate
- Instale as dependências
pip install -r requirements.txt
- Instale e inicie o Ollama
# Instale o Ollama seguindo as instruções em ollama.com/download ollama serve
- Em outro terminal, baixe os modelos necessários
ollama pull llama3 ollama pull nomic-embed-text
Para instruções de instalação mais detalhadas, consulte o Guia de Instalação.
# Ativar o ambiente virtual (se ainda não estiver ativado)
source streamlit_env/bin/activate
# Executar a aplicação Streamlit
streamlit run app_refactored.py
A interface web estará disponível em http://localhost:8501
- Clique em Iniciar Sistema RAG na barra lateral
- Aguarde o carregamento do PDF e a criação do vectorstore
- Digite sua pergunta sobre o Regulamento Pedagógico da ESTG
- Clique em Enviar Pergunta ou pressione Enter
- Veja a resposta e os documentos fonte utilizados
- "Quais são os tipos de avaliação previstos no regulamento?"
- "Como funciona a época especial de exames?"
- "Quais são as condições para obter o estatuto de estudante-atleta?"
- "Qual o prazo para revisão de provas?"
Para instruções de uso mais detalhadas e dicas de otimização, consulte o Guia de Uso.
O sistema utiliza a arquitetura de Retrieval-Augmented Generation (RAG) para melhorar a qualidade das respostas do modelo LLM:
-
Processamento de Documentos:
- Carregamento do PDF do Regulamento Pedagógico
- Divisão em chunks de texto (800 caracteres com 80 de sobreposição)
-
Criação de Embeddings:
- Geração de embeddings usando o modelo
nomic-embed-text
do Ollama - Armazenamento em um vectorstore ChromaDB persistente
- Geração de embeddings usando o modelo
-
Pipeline de Recuperação:
- Busca semântica para encontrar os 2 chunks mais relevantes para a pergunta
- Recuperação dos documentos para fornecer contexto ao LLM
-
Geração de Respostas:
- Modelo Ollama
llama3
recebe a pergunta e o contexto recuperado - Prompt personalizado em português para instruir o modelo
- Modelo Ollama
Para uma explicação detalhada do conceito RAG e sua implementação, consulte RAG Explicado e Arquitetura do Sistema.
O sistema implementa várias otimizações para melhorar o desempenho:
-
Sistema de Cache Multi-camada:
- Cache do vectorstore (TTL: 1 hora)
- Cache de respostas (TTL: 30 minutos)
- Cache local em session_state
- Normalização de consultas para melhorar hits de cache
-
Configuração do Modelo:
- Temperatura baixa (0.1) para respostas mais consistentes
- Contexto reduzido para processamento mais rápido
- Uso de múltiplas threads e GPU quando disponível
-
Processamento de Documentos:
- Tamanho de chunk otimizado para equilibrar precisão e velocidade
- Recuperação de apenas 2 documentos mais relevantes
-
Interface Responsiva:
- Feedback visual durante o processamento
- Estilização CSS para melhor legibilidade
-
Funcionalidades Úteis:
- Histórico de chat
- Exemplos de perguntas pré-definidas
- Exibição de documentos fonte
- Tempo de resposta
- Interface web interativa com Streamlit
- Implementação do pipeline RAG completo
- Sistema de cache multi-camada
- Documentação detalhada
- Implementação de testes automatizados
- Suporte a múltiplos documentos
- Interface de administração para gerenciar documentos
- Avaliação de qualidade das respostas
Veja os issues abertos para uma lista completa de funcionalidades propostas (e problemas conhecidos).
O projeto inclui documentação detalhada para ajudar usuários e desenvolvedores:
-
- Instruções passo a passo para configurar o ambiente
- Solução de problemas comuns de instalação
- Configurações opcionais para melhor desempenho
-
- Como utilizar a interface Streamlit
- Exemplos detalhados de perguntas eficazes
- Dicas para otimizar o desempenho do sistema
- Perguntas frequentes (FAQ)
-
- Explicação detalhada dos componentes do sistema
- Diagrama de arquitetura do pipeline RAG
- Descrição do fluxo de dados e processamento
- Considerações de desempenho e melhorias futuras
-
- Conceito de Retrieval-Augmented Generation
- Comparação com outras abordagens de IA
- Implementação específica no projeto
- Desafios e soluções
Contribuições são o que tornam a comunidade open source um lugar incrível para aprender, inspirar e criar. Qualquer contribuição que você fizer será muito apreciada.
Se você tiver uma sugestão para melhorar isso, por favor faça um fork do repositório e crie um pull request. Você também pode simplesmente abrir um issue com a tag "melhoria". Não se esqueça de dar uma estrela ao projeto! Obrigado novamente!
- Faça um Fork do Projeto
- Crie sua Branch de Funcionalidade (
git checkout -b feature/FuncionalidadeIncrivel
) - Faça Commit de suas Alterações (
git commit -m 'Adiciona alguma FuncionalidadeIncrivel'
) - Faça Push para a Branch (
git push origin feature/FuncionalidadeIncrivel
) - Abra um Pull Request
Distribuído sob a Licença MIT. Veja LICENSE
para mais informações.
Lucas Maciel - @lucasmaciel03 - lucasmaciel@ipvc.pt
Link do Projeto: https://github.com/lucasmaciel03/ipvc-rag-ollama
- Ollama - Por fornecer uma forma fácil de executar LLMs localmente
- LangChain - Pelo framework que facilita a criação de aplicações com LLMs
- Streamlit - Pela ferramenta que permite criar interfaces web rapidamente
- IPVC ESTG - Pela oportunidade de desenvolver este projeto
- Best-README-Template - Pelo template utilizado neste README
.
├── app.py # Aplicação Streamlit principal
├── app_refactored.py # Versão refatorada da aplicação
├── requirements.txt # Dependências do projeto
├── resources/ # PDFs e outros recursos
│ └── ESTG_Regulamento-Frequencia-Avaliacao2023.pdf
├── src/ # Código fonte modularizado
│ ├── __init__.py
│ ├── config/ # Configurações do sistema
│ ├── data/ # Processamento de documentos
│ ├── models/ # Modelos e embeddings
│ └── utils/ # Utilitários e helpers
├── docs/ # Documentação detalhada
│ ├── ARCHITECTURE.md # Arquitetura do sistema RAG
│ ├── INSTALLATION.md # Guia de instalação detalhado
│ ├── USAGE_GUIDE.md # Guia de uso e otimização
│ └── RAG_EXPLAINED.md # Explicação do conceito RAG
├── urobot/ # Código original do UROBOT
└── vector_store/ # Armazenamento de embeddings (ChromaDB)