Pular para conteúdo

Aula 18 - Recuperação Aumentada por Geração (RAG) com Vector DBs 📚

Objetivo Pedagógico

Objetivo: Arquitetura de Recuperação Aumentada por Geração (RAG): Estratégias de Chunking, Embeddings Semânticos, Bancos Vetoriais (Qdrant, Chroma, Pgvector) e Reranking.


📑 1. Fundamentos Teóricos & Análise Técnica

Grandes Modelos de Linguagem sofrem de duas limitações severas: Alucinação (Hallucination) (fabricação de fatos falsos com tom convincente) e Corte Temporal de Conhecimento (Knowledge Cutoff), além de não terem acesso aos dados privados da organização.

O padrão RAG (Retrieval-Augmented Generation) resolve essas limitações fundamentando as respostas do modelo em documentos reais recuperados sob demanda: 1. Pipeline de Ingestão (Offline): - Os documentos corporativos (PDFs, Markdown, bancos) são fatiados em blocos de texto contextuais (Chunks). - Cada bloco é convertido em um vetor numérico denso de alta dimensionalidade (Embedding Vector, ex: 1536 dimensões) através de um modelo de embeddings. - Os vetores são indexados em um Banco de Dados Vetorial (Vector DB) com algoritmos de busca de vizinhos mais próximos (HNSW - Hierarchical Navigable Small World). 2. Pipeline de Inferência (Online): - A pergunta do usuário é convertida em embedding. - O banco vetorial localiza os chunks com maior similaridade de cosseno. - Um modelo de Reranking refina a ordenação e injeta os documentos mais relevantes como contexto no prompt final do LLM.

📐 Arquitetura Conceitual & Diagrama de Fluxo

sequenceDiagram
    autonumber
    actor User as Usuário
    participant App as RAG Orchestrator
    participant VecDB as Banco Vetorial (HNSW Index)
    participant LLM as Modelo de Linguagem (LLM)

    User->>App: "Qual a política de reembolso da empresa?"
    App->>App: Gera Embedding da Pergunta
    App->>VecDB: Busca por Similaridade de Cosseno (Top-K)
    VecDB-->>App: Retorna Chunks Relevantes do Manual Interno
    Note over App: Monta Prompt com Contexto Injetado
    App->>LLM: Prompt: "Com base no contexto anexo: [Chunks], responda: ..."
    LLM-->>App: Resposta Fundamentada e Sem Alucinações!
    App-->>User: Entrega Resposta com Citações das Fontes

🔍 Pilares e Diretrizes Técnicas

Nesta unidade, aprofundamos os seguintes conceitos fundamentais: - Similaridade de Cosseno: Métrica matemática que avalia o ângulo entre vetores semânticos independentemente do comprimento do texto. - Chunking Semântico com Overlap: Divisão de texto com sobreposição (ex: 500 caracteres com 50 de overlap) para não cortar frases ao meio. - Busca Híbrida (Hybrid Search): Combinação de busca vetorial densa com busca léxica tradicional (BM25 / Full-Text Search). - Reranker Cross-Encoder: Modelo especializado que avalia a relevância par a par entre a pergunta e o documento recuperado.


🛠️ 2. Implementação Prática em RAG, Vector Databases e Embeddings

Abaixo está a implementação técnica de referência, estruturada com padrões de engenharia de software e foco em robustez:

// rag_pipeline.py (Implementação Básica de RAG com Injeção de Contexto)
import numpy as np

# Simulação de base vetorial em memória
documents = [
    "A política de reembolso permite devoluções em até 30 dias após a compra.",
    "O suporte técnico atende de segunda a sexta das 08h às 18h.",
    "O frete é grátis para compras acima de R$ 200 em todo o território nacional."
]

def cosine_similarity(a, b):
    return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))

def generate_rag_prompt(query: str, retrieved_docs: list[str]) -> str:
    context_block = "\n".join([f"- {doc}" for doc in retrieved_docs])
    prompt = f"""Você é um assistente corporativo confiável.
Responda à pergunta do usuário utilizando EXCLUSIVAMENTE as informações fornecidas no contexto abaixo.
Se a resposta não estiver no contexto, declare expressamente que não possui a informação.

--- CONTEXTO FORNECIDO ---
{context_block}

--- PERGUNTA DO USUÁRIO ---
{query}
"""
    return prompt

prompt = generate_rag_prompt("Quantos dias tenho para pedir reembolso?", [documents[0]])
print(prompt)

💡 Análise Passo a Passo do Código

  1. Construção do Prompt de Sistema: Instrui o modelo a agir como assistente estrito, reduzindo o risco de respostas inventadas.
  2. Injeção do Contexto Dinâmico: O bloco de documentos recuperados é concatenado dinamicamente antes da pergunta do usuário.
  3. Citações Transparentes: Facilita auditoria e verificação factual das respostas entregues aos clientes.

🎯 3. Próximos Passos & Sequência Didática