Infraestrutura para RAG: o que você precisa
Para RAG (Retrieval-Augmented Generation) em produção você precisa de três componentes: um modelo de embeddings (para vetorizar documentos e queries), um banco de dados vetorial (para recuperar os trechos mais relevantes) e um LLM (para gerar a resposta com o contexto recuperado). Os três podem rodar self-hosted na mesma VPS para volumes pequenos e médios.
Os 3 componentes do pipeline RAG
O fluxo completo tem duas fases: indexação (offline) e consulta (online). Na indexação, documentos são quebrados em chunks, vetorizados e armazenados. Na consulta, a query é vetorizada, os chunks mais similares são recuperados e passados como contexto ao LLM.
Modelo de embeddings: opções self-hosted
O modelo de embeddings transforma texto em vetores numéricos. Para RAG self-hosted, as opções mais práticas são:
# Via Ollama (mais fácil — mesma infraestrutura do LLM)
ollama pull nomic-embed-text
# Gerar embedding via API
curl http://localhost:11434/api/embeddings \
-d '{"model": "nomic-embed-text", "prompt": "Seu texto aqui"}'Banco vetorial: Qdrant (produção) ou pgvector (PostgreSQL)
Para RAG self-hosted, Qdrant é o banco vetorial mais recomendado para produção — leve, rápido e com API HTTP. Para quem já usa PostgreSQL, pgvector adiciona busca vetorial sem novo serviço:
# Subir o Qdrant via Docker
docker run -d --name qdrant \
-p 6333:6333 \
-v qdrant_storage:/qdrant/storage \
qdrant/qdrant
# Criar uma collection
curl -X PUT http://localhost:6333/collections/documentos \
-H "Content-Type: application/json" \
-d '{"vectors": {"size": 768, "distance": "Cosine"}}'Stack completo RAG em docker-compose
Configuração para rodar Ollama (LLM + embeddings) + Qdrant (banco vetorial) na mesma VPS:
services:
ollama:
image: ollama/ollama:latest
restart: always
ports:
- "11434:11434"
volumes:
- ollama_data:/root/.ollama
qdrant:
image: qdrant/qdrant:latest
restart: always
ports:
- "6333:6333"
volumes:
- qdrant_data:/qdrant/storage
# Sua aplicação RAG (LangChain, LlamaIndex, etc.)
app:
build: .
environment:
- OLLAMA_URL=http://ollama:11434
- QDRANT_URL=http://qdrant:6333
depends_on:
- ollama
- qdrant
volumes:
ollama_data:
qdrant_data:Chunking: a parte mais crítica do RAG
A qualidade do RAG depende principalmente de como você divide os documentos. Chunks muito grandes trazem contexto desnecessário; chunks muito pequenos perdem contexto. Diretrizes práticas:
$ runstack deploy --plan starter
Não quer configurar manualmente?
Não quer configurar manualmente? Implante o Ollama em menos de 3 minutos com a Runstack. Infraestrutura da OPEN DATACENTER, com servidores no Brasil.