Projeto Consulta de Documentos

Inteligência que transforma documentos em conhecimento

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 PyPDF2 com fallback para PyPDFLoader.
  • 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-mini baseada 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:

  1. Conecte o repositório no Railway.
  2. Configure todas as variáveis de ambiente no painel do Railway.
  3. O deploy ocorre automaticamente a cada git push na branch main.
  4. 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.