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
- Construção do Prompt de Sistema: Instrui o modelo a agir como assistente estrito, reduzindo o risco de respostas inventadas.
- Injeção do Contexto Dinâmico: O bloco de documentos recuperados é concatenado dinamicamente antes da pergunta do usuário.
- Citações Transparentes: Facilita auditoria e verificação factual das respostas entregues aos clientes.
🎯 3. Próximos Passos & Sequência Didática
-
Slides da Aula
-
Quiz de Fixação
-
Exercícios Práticos
-
Desafio de Projeto