RAG Local: Contexto Privado, Sem Concessões
Um LLM sem contexto específico é como um consultor brilhante que nunca leu nenhum documento da sua empresa. RAG resolve isso — e quando implementado localmente, resolve sem abrir mão de privacidade.
O que é RAG
Retrieval-Augmented Generation é um padrão onde, antes de chamar o LLM, você:
- Converte sua pergunta em um vetor de embedding
- Busca chunks de documentos semanticamente similares no seu vector store
- Injeta esses chunks como contexto no prompt
- O LLM responde baseado tanto no seu conhecimento pré-treinado quanto no contexto recuperado
Stack local completa
Documentos → Chunking → Embeddings locais → ChromaDB (local)
↓
Pergunta → Embedding → Busca vetorial → Contexto relevante
↓
Ollama (LLM local) → Resposta
Ferramentas
- Embeddings:
nomic-embed-textvia Ollama, sem API externa - Vector store: ChromaDB ou Qdrant, self-hosted
- Orquestração: LangChain ou LlamaIndex, ambos suportam Ollama nativamente
- Interface: Open WebUI com RAG embutido (opção zero-código)
Exemplo mínimo com LangChain
from langchain_ollama import OllamaEmbeddings, OllamaLLM
from langchain_chroma import Chroma
from langchain.chains import RetrievalQA
embeddings = OllamaEmbeddings(model="nomic-embed-text")
vectorstore = Chroma(persist_directory="./db", embedding_function=embeddings)
llm = OllamaLLM(model="llama3.1")
qa = RetrievalQA.from_chain_type(llm=llm, retriever=vectorstore.as_retriever())
resposta = qa.invoke("Qual é a política de segurança de dados?")
Quando usar RAG vs fine-tuning
Use RAG quando os dados mudam com frequência ou quando você precisa de rastreabilidade (citar a fonte). Use fine-tuning quando você quer mudar o comportamento base do modelo. Para a maioria dos casos de uso corporativo, RAG é a escolha certa.


