Visão geral
Aplicação RAG (Retrieval-Augmented Generation) desenvolvida com Streamlit, LangChain, Azure OpenAI e Azure AI Search para consulta inteligente de documentos PDF. Realiza extração, fragmentação e indexação vetorial de conteúdo utilizando embeddings text-embedding-3-large, recuperando trechos relevantes por busca semântica para gerar respostas contextualizadas com gpt-5.4-mini. Possui isolamento de sessão, suporte a múltiplos PDFs e deploy via Railway.
Sobre o Projeto
O RAG Document Query é uma aplicação web que combina Azure OpenAI e Azure AI Search para permitir consultas em linguagem natural sobre documentos PDF enviados pelo usuário. O fluxo é simples: o usuário faz upload de um ou mais PDFs, a aplicação os fragmenta, gera embeddings vetoriais e os indexa no Azure AI Search. A cada nova pergunta, os trechos mais relevantes são recuperados e enviados ao modelo GPT para gerar uma resposta contextualizada.
Upload e Processamento de Documentos
- Upload de múltiplos arquivos PDF (até 200 MB cada) via interface web.
- Extração de texto via
PyPDF2com fallback paraPyPDFLoader. - Fragmentação inteligente com
TokenTextSplitter. - Barra de progresso e preview do conteúdo extraído.
Consulta com IA
- Interface de chat para perguntas em linguagem natural.
- Pipeline RAG com LCEL (LangChain Expression Language).
- Recuperação dos trechos mais relevantes via busca vetorial.
- Geração de resposta com
gpt-5.4-minibaseada apenas no contexto recuperado.
Indexação Vetorial
- Geração de embeddings com
text-embedding-3-large(3072 dimensões). - Indexação no Azure AI Search com busca por similaridade vetorial.
- Limpeza automática do índice antes de cada novo processamento, garantindo isolamento total entre documentos.
Infraestrutura
- Suporte a dois recursos Azure OpenAI distintos (embeddings e chat em regiões separadas).
- Variáveis de ambiente via
.env(sem credenciais no código). - Deploy pronto para Railway com
Procfile.
Tecnologias
Streamlit
Interface web.
Azure OpenAI
Embeddings (text-embedding-3-large) e Chat (gpt-5.4-mini).
Azure AI Search
Indexação e busca vetorial.
LangChain
Orquestração do pipeline RAG.
langchain-openai
Integração LangChain com Azure OpenAI.
langchain-community
AzureSearch, PyPDFLoader.
azure-search-documents
SearchIndexClient para gerenciar índices.
PyPDF2
Extração de texto de PDFs.
python-dotenv
Carregamento de variáveis de ambiente.
Estrutura do Projeto
rag_document_query/
├── app.py # Aplicação principal (UI + pipeline RAG)
├── requirements.txt # Dependências Python
├── Procfile # Configuração de deploy para Railway
├── .env # Variáveis de ambiente (não versionado)
└── .gitignore # Ignora .env e __pycache__
Arquitetura RAG
PDF Upload
│
▼
PyPDF2 / PyPDFLoader
│ (extração de texto)
▼
TokenTextSplitter
│ (fragmentação em chunks)
▼
AzureOpenAIEmbeddings (text-embedding-3-large)
│ (geração de vetores 3072d)
▼
Azure AI Search Index
│
│ ← Pergunta do usuário
▼
Busca por Similaridade Vetorial
│ (k trechos mais relevantes)
▼
AzureChatOpenAI (gpt-5.4-mini)
│ (geração de resposta contextualizada)
▼
Resposta ao Usuário
Variáveis de Ambiente
Crie um arquivo .env na raiz do projeto e adicione
as seguintes variáveis:
# Azure AI Search
AZURE_AI_SEARCH_SERVICE_NAME=https://<seu-servico>.search.windows.net
AZURE_AI_SEARCH_API_KEY=<sua-chave>
AZURE_AI_SEARCH_INDEX_NAME=<nome-do-indice>
# Azure OpenAI — Embeddings (ex: swedencentral)
AZURE_OPENAI_ENDPOINT=https://<seu-recurso-embeddings>.openai.azure.com/
AZURE_OPENAI_API_KEY=<chave-embeddings>
AZURE_EMBEDDING_MODEL=text-embedding-3-large
# Azure OpenAI — Chat (ex: northcentralus)
AZURE_OPENAI_CHAT_ENDPOINT=https://<seu-recurso-chat>.openai.azure.com/
AZURE_OPENAI_CHAT_API_KEY=<chave-chat>
AZURE_OPENAI_MODEL=gpt-5.4-mini
Como Executar - Pré-requisitos
- Python 3.10+
- Recursos Azure: Azure OpenAI (embeddings + chat) e Azure AI Search
Passo a passo
# 1. Clonar o repositório
git clone https://github.com/DevRogerFer/rag_document_query.git
cd rag_document_query
# 2. Criar e ativar o ambiente virtual
python -m venv venv
source venv/bin/activate # Linux/macOS
venv\Scripts\activate # Windows
# 3. Instalar dependências
pip install -r requirements.txt
# 4. Configurar variáveis de ambiente
# Crie o arquivo .env conforme a seção acima
# 5. Iniciar a aplicação
streamlit run app.py
Deploy
O projeto está configurado para deploy no Railway:
- Conecte o repositório no Railway.
- Configure todas as variáveis de ambiente no painel do Railway.
- O deploy ocorre automaticamente a cada
git pushnabranch main. - O Procfile já instrui o Railway a iniciar o Streamlit na porta correta.
web: streamlit run app.py --server.port=$PORT --server.address=0.0.0.0
Resumo técnico
Aplicação RAG desenvolvida com Streamlit, LangChain, Azure OpenAI e Azure AI Search para consulta inteligente de documentos PDF. Realiza extração de texto, fragmentação em chunks, geração de embeddings vetoriais, indexação semântica e recuperação de contexto para responder perguntas em linguagem natural com base exclusivamente no conteúdo dos documentos enviados.