Este projeto implementa um sistema RAG (Retrieval-Augmented Generation) completo usando PostgreSQL com pgvector e LangChain para processamento e geração de respostas baseadas em documentos PDF.
- 📄 Indexação de PDFs no PostgreSQL com pgvector
- 🔍 Busca semântica usando embeddings da OpenAI
- 💬 Chat inteligente baseado nos documentos indexados
- 🎯 Recuperação precisa com LangChain
- 🛠️ Interface CLI completa
- 🧪 Testes automatizados
- 📊 Monitoramento e logs detalhados
- Sistema RAG
- Ambientes Virtuais Python
- Configuração do Ambiente
- Comandos Básicos
- Uso do Sistema RAG
- Estrutura do Projeto
- Como Contribuir
RAG (Retrieval-Augmented Generation) é uma técnica que combina:
- Recuperação: Busca documentos relevantes em uma base de conhecimento
- Geração: Usa um modelo de linguagem para gerar respostas baseadas nos documentos recuperados
- 📄 Indexação: PDFs são divididos em chunks e convertidos em embeddings
- 💾 Armazenamento: Embeddings são armazenados no PostgreSQL com pgvector
- 🔍 Busca: Quando você faz uma pergunta, o sistema busca chunks similares
- 💬 Geração: O LLM gera uma resposta baseada nos chunks encontrados
- LangChain: Framework para aplicações LLM
- PostgreSQL + pgvector: Banco de dados vetorial
- OpenAI: Embeddings e modelo de linguagem
- PyPDF: Processamento de PDFs
Ambientes virtuais são espaços isolados que permitem instalar e gerenciar dependências específicas para cada projeto Python, evitando conflitos entre diferentes versões de bibliotecas.
Benefícios:
- ✅ Isolamento: Cada projeto tem suas próprias dependências
- ✅ Reprodutibilidade: Garante que o projeto funcione em qualquer ambiente
- ✅ Segurança: Evita conflitos entre pacotes
- ✅ Organização: Mantém o sistema Python limpo
- Para que serve: Permite instalar e gerenciar múltiplas versões do Python
- Por que usar: Diferentes projetos podem precisar de versões específicas do Python
- Vantagens:
- Controle total sobre versões do Python
- Ambientes virtuais integrados
- Ativação automática por diretório
- Para que serve: Combina gerenciamento de ambientes virtuais com controle de dependências
- Por que usar: Simplifica o processo de gerenciar dependências e ambientes
- Vantagens:
- Criação automática de ambientes virtuais
- Arquivo Pipfile para dependências
- Lockfile para versões exatas
- Separação entre dependências de produção e desenvolvimento
- Python 3.11+
- Git
- curl (para instalação)
# Instalar dependências do sistema
sudo apt update
sudo apt install -y make build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \
libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
# Instalar pyenv
curl https://pyenv.run | bash
# Adicionar ao shell (adicione ao ~/.zshrc ou ~/.bashrc)
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(pyenv init -)"' >> ~/.zshrc
# Recarregar shell
source ~/.zshrc
# Instalar plugin pyenv-virtualenv
git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.zshrc
source ~/.zshrc# Com Homebrew
brew install pyenv
# Adicionar ao shell
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(pyenv init -)"' >> ~/.zshrc
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.zshrc
source ~/.zshrc# Instalar pipenv
pip install pipenv
# Verificar instalação
pipenv --version# Listar versões disponíveis
pyenv install --list
# Instalar versão específica
pyenv install 3.11.0
# Listar versões instaladas
pyenv versions
# Definir versão global
pyenv global 3.11.0
# Ver versão atual
pyenv version# Criar ambiente virtual
pyenv virtualenv 3.11.0 desafio_rag_env
# Listar ambientes virtuais
pyenv virtualenvs
# Ativar ambiente
pyenv activate desafio_rag_env
# Desativar ambiente
pyenv deactivate
# Definir ambiente local (para diretório)
pyenv local desafio_rag_env
# Remover ambiente
pyenv uninstall desafio_rag_env# Verificar instalação
pyenv --version
# Atualizar pyenv
pyenv update
# Ver caminho do Python
pyenv which python
# Ver caminho do pip
pyenv which pip# Navegar para o projeto
cd /caminho/do/projeto
# Inicializar (cria Pipfile)
pipenv install
# Ou inicializar com Python específico
pipenv install --python 3.11# Instalar dependência de produção
pipenv install requests
# Instalar dependência de desenvolvimento
pipenv install --dev pytest
# Instalar todas as dependências
pipenv install
# Instalar apenas produção
pipenv install --deploy
# Remover dependência
pipenv uninstall requests
# Ver dependências
pipenv graph# Ativar ambiente virtual
pipenv shell
# Executar comando no ambiente (sem ativar)
pipenv run python app.py
pipenv run pytest
# Sair do ambiente
exit # ou Ctrl+D# Ver informações do ambiente
pipenv --venv
# Ver localização do Python
pipenv --py
# Verificar segurança
pipenv check
# Limpar cache
pipenv clean
# Remover ambiente virtual
pipenv --rm# Verificar instalação
pipenv --version
# Ver logs
pipenv --support
# Forçar recriação do ambiente
pipenv --rm
pipenv install
# Ver variáveis de ambiente
pipenv --env- Docker e Docker Compose (para PostgreSQL)
- Python 3.11+
- Chave da API OpenAI
# 1. Clonar o repositório
git clone <url-do-repositorio>
cd desafio_rag
# 2. Configurar banco de dados com Docker
./scripts/setup_docker.sh
# 3. Configurar variáveis de ambiente
cp env.example .env
# Editar .env com suas configurações
# 4. Configurar ambiente Python
pyenv virtualenv 3.11.0 desafio_rag_env
pyenv local desafio_rag_env
pip install -r requirements.txt
# 5. Testar conexões
python scripts/test_connection.py
# 6. Testar sistema
python src/main.py info# 1. Clonar o repositório
git clone <url-do-repositorio>
cd desafio_rag
# 2. Criar ambiente virtual
pyenv virtualenv 3.11.0 desafio_rag_env
# 3. Definir ambiente local
pyenv local desafio_rag_env
# 4. Instalar dependências
pip install -r requirements.txt
# 5. Configurar variáveis de ambiente
cp env.example .env
# Editar .env com suas configurações
# 6. Verificar instalação
python --version
which python# 1. Clonar o repositório
git clone <url-do-repositorio>
cd desafio_rag
# 2. Inicializar projeto
pipenv install
# 3. Configurar variáveis de ambiente
cp env.example .env
# Editar .env com suas configurações
# 4. Ativar ambiente
pipenv shell
# 5. Testar sistema
python src/main.py info# Menu interativo (recomendado)
python src/main.py
# Indexar um PDF
python src/main.py index /caminho/para/documento.pdf
# Fazer uma pergunta
python src/main.py chat "Qual é o tema principal do documento?"
# Buscar documentos similares
python src/main.py search "palavra-chave"
# Ver informações da coleção
python src/main.py info
# Modo interativo
python src/main.py interactive# 1. Indexar um documento
python src/main.py index documentos/meu_documento.pdf
# 2. Fazer perguntas
python src/main.py chat "Quais são os principais tópicos?"
python src/main.py chat "Resuma o conteúdo em 3 pontos"
# 3. Buscar por palavras-chave
python src/main.py search "inteligência artificial" -k 5from src.rag_chain import RAGChain
# Inicializar sistema
rag = RAGChain()
# Indexar PDF
rag.index_pdf("documento.pdf")
# Fazer pergunta
result = rag.chat("Qual é o tema principal?")
print(result['result'])
# Buscar documentos
docs = rag.search_only("palavra-chave", k=3)desafio_rag/
├── README.md
├── requirements.txt
├── env.example
├── example_usage.py
├── docker-compose.yml # Configuração Docker
├── init.sql # Script de inicialização do banco
├── scripts/
│ ├── setup_docker.sh # Script de setup Docker
│ └── test_connection.py # Teste de conexões
├── src/
│ ├── __init__.py
│ ├── config.py # Configurações e variáveis de ambiente
│ ├── vector_store.py # Gerenciador do PostgreSQL + pgvector
│ ├── rag_chain.py # Pipeline RAG com LangChain
│ └── main.py # Interface CLI
├── tests/
│ ├── __init__.py
│ └── test_rag_system.py # Testes automatizados
├── docs/
│ ├── setup.md # Documentação de setup
│ └── docker_setup.md # Documentação Docker
└── data/
└── documents/ # PDFs para indexar
| Ação | pyenv | pipenv |
|---|---|---|
| Criar ambiente | pyenv virtualenv 3.11.0 nome_env |
pipenv install |
| Ativar | pyenv activate nome_env |
pipenv shell |
| Desativar | pyenv deactivate |
exit |
| Instalar pacote | pip install pacote |
pipenv install pacote |
| Executar comando | python script.py |
pipenv run python script.py |
| Ver ambiente | pyenv version |
pipenv --venv |
- Fork o projeto
- Crie uma branch para sua feature (
git checkout -b feature/AmazingFeature) - Configure o ambiente usando pyenv ou pipenv
- Commit suas mudanças (
git commit -m 'Add some AmazingFeature') - Push para a branch (
git push origin feature/AmazingFeature) - Abra um Pull Request
- Use pyenv para gerenciar versões do Python
- Use pipenv para gerenciar dependências
- Mantenha o
requirements.txtatualizado - Escreva testes para novas funcionalidades
- Documente mudanças importantes
- Configure variáveis de ambiente no arquivo
.env - Use PostgreSQL com pgvector para armazenamento vetorial
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
Se você encontrar algum problema ou tiver dúvidas:
- Para problemas com Docker: Consulte docs/docker_setup.md
- Para problemas gerais: Consulte docs/setup.md
- Execute testes de conexão:
python scripts/test_connection.py - Verifique logs Docker:
docker-compose logs -f - Abra uma issue
# Iniciar containers
docker-compose up -d
# Parar containers
docker-compose down
# Ver logs
docker-compose logs -f postgres
# Acessar PostgreSQL
docker-compose exec postgres psql -U rag_user -d rag_database
# Acessar pgAdmin (http://localhost:8080)
# Email: admin@rag.local | Senha: admin123