RAG — Assistente de Conhecimento (Retrieval-Augmented Generation)
O que é: técnica que permite IA acessar conhecimento EXTERNO (documentos, FAQ, banco de dados da empresa) para dar respostas precisas e baseadas nos dados do cliente — em vez de respostas genéricas do modelo.
Conceitos-chave
📋 PIPELINE DE RAG: ├── 1. INGESTÃO: carregar documentos ├── 2. INDEXAÇÃO: dividir em chunks + gerar embeddings ├── 3. RETRIEVAL: buscar chunks relevantes à pergunta └── 4. GERAÇÃO: modelo responde usando o contexto recuperado
Técnicas avançadas (aplicar conforme necessidade)
├── Query Translation: melhorar a pergunta antes de buscar │ ├── Multi-Query (várias versões da pergunta) │ ├── RAG Fusion (combina resultados) │ ├── Decomposition (quebra pergunta complexa) │ ├── Step Back (pergunta mais geral) │ └── HyDE (gera resposta hipotética para buscar) ├── Routing: direcionar pergunta ao modelo/fluxo certo ├── Indexing avançado: RAPTOR, ColBERT ├── CRAG (Conditional RAG): corrigir retrieval com base no grau de confiança └── Adaptive RAG: decide quando buscar mais dados ou responder direto
Embeddings
- Convertem texto em vetores numéricos (capturam significado)
- Similaridade de COSSENO (padrão), Euclidiana, Dot Product
- Modelos: OpenAI, Gemini, Cohere, open source (sentence-transformers)
- pt-BR:
paraphrase-multilingual-MiniLM-L12-v2(entende português) - CRÍTICO: usar o MESMO modelo para documentos e perguntas
pythonfrom sentence_transformers import SentenceTransformer modelo = SentenceTransformer("paraphrase-multilingual-MiniLM-L12-v2") doc = modelo.encode("Horário de funcionamento da clínica") pergunta = modelo.encode("A que horas abre?")
Chunking — lição importante
NÃO dividir por contagem de palavras (mistura assuntos e recupera seção errada).
Dividir por SEÇÕES temáticas (títulos ##), cada seção vira um chunk com
o título prefixado como contexto: f"{titulo}: {corpo}". Isso mantém cada
chunk coerente e a busca fica muito mais precisa.
pythondef chunking_por_secoes(texto): """Divide texto em seções (##) em vez de cortar por palavras.""" secoes = [] atual = {"titulo": "geral", "corpo": []} for linha in texto.splitlines(): if linha.startswith("## "): if atual["corpo"]: secoes.append(atual) atual = {"titulo": linha[3:].strip(), "corpo": []} elif linha.strip(): atual["corpo"].append(linha.strip()) if atual["corpo"]: secoes.append(atual) return [f"{s['titulo']}: {' '.join(s['corpo'])}" for s in secoes if s["corpo"]]
Busca semântica (retrieval)
pythonimport numpy as np def buscar(pergunta, chunk_embeddings, textos, top_k=3): q = modelo.encode(pergunta) scores = [np.dot(q, c) / (np.linalg.norm(q) * np.linalg.norm(c)) for c in chunk_embeddings] melhores = np.argsort(scores)[-top_k:][::-1] return [(textos[i], scores[i]) for i in melhores]
Fluxo de trabalho (para cliente real)
⚙️ IMPLEMENTAÇÃO: ├── 1. Levantar os documentos do cliente (FAQ, políticas, catálogo) ├── 2. Estruturar o conteúdo (seções claras) ├── 3. Rodar chunking + embeddings ├── 4. Testar busca com perguntas reais ├── 5. Conectar geração (API do modelo) ├── 6. Integrar ao canal (WhatsApp/site) ├── 7. Testar respostas e ajustar ├── 8. Definir limite (quando passar para humano) └── 9. Manutenção e atualização do conhecimento
Venda como serviço (preços de referência)
💰 PRECIFICAÇÃO: ├── Chatbot básico: R$ 1.000-3.000 ├── Assistente RAG completo: R$ 3.000-8.000 ├── Assistente avançado (multi-função): R$ 8.000-15.000 ├── Manutenção mensal: R$ 500-2.000 └── Licença/uso recorrente: R$ 300-1.500/mês
Pitfalls
- Chunking por seção, não por palavra (crítico para qualidade)
- Embeddings locais = busca sem custo; usar modelo multilingue para pt-BR
- Testar sempre com perguntas reais do cliente
- Definir limite claro de quando passar para atendimento humano
- Proteger dados sensíveis (LGPD) — não vazar informações confidenciais
- Atualizar o conhecimento periodicamente
- Transparência: avisar que é assistente de IA
Quando usar
- Cliente pede chatbot/assistente inteligente
- Criar produto/ebook de RAG (tema com demanda)
- Quer diferenciar de chatbot genérico


