🤖 Build RAG Simples: Retrieval Augmented Generation Localmente
📌 Pra que serve
RAG é quando você alimenta o LLM com documentos relevantes antes de pedir uma resposta, melhorando precisão sem treinar modelo novo. Este tutorial monta um pipeline completo em ~50 linhas de Python, rodando tudo no seu PC ou Mac com Ollama — ideal pra chatbots corporativos, assistentes documentação ou processamento handbook interno.
🛠️ Passo a passo
1. Instale Ollama e baixe os modelos
## macOS/Linux/Windows: ollama.com
ollama pull nomic-embed-text # embedding 274MB
ollama pull qwen:3-4b-instruct # chat 2.5GB2. Prepare seus documentos
Pegue um arquivo (PDF, .txt, handbook) e divida por parágrafo. No exemplo, um handbook vira 11 chunks (separados por linha em branco).
3. Transforme chunks em vetores
import requests
import numpy as npdef embed(text):
resp = requests.post('http://localhost:11434/api/embed',
json={"model": "nomic-embed-text", "input": text})
return np.array(resp.json()["embeddings"][0])
Embed todos os chunks
embeddings = [embed(chunk) for chunk in chunks]4. Procure chunks relevantes por similaridade
def cosine_similarity(a, b):
return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))def retrieve(query, top_k=3):
q_vec = embed(query)
scores = [cosine_similarity(q_vec, e) for e in embeddings]
return [chunks[i] for i in np.argsort(scores)[-top_k:]]
5. Mande pro LLM com contexto
relevant_chunks = retrieve("Qual é a política de férias?")
prompt = f"Contexto:\n{' '.join(relevant_chunks)}\n\nPergunta: Qual é a política de férias?"resp = requests.post('http://localhost:11434/api/generate',
json={"model": "qwen:3-4b-instruct", "prompt": prompt, "stream": False})
print(resp.json()["response"])
💡 Dica: Comece testando com um documento pequeno (handbook com <20 páginas). Se precisar maior: use chunking por caracteres fixos (256-5
12) em vez de parágrafo. Qwen 3 4B é leve; em laptop moderno roda em segundos.
🔗 Links e instalação
- Ollama: https://ollama.ai — roda LLMs localmente, sem GPU obrigatória
- Nomic Embed Text: modelos pequenos de embedding (já incluso no Ollama)
- Qwen 3 4B: Alibaba, eficiente, suporta português
Instale via pip install requests numpy e está pronto. Video completo tá linkado na fonte.