Intermediário 11 minStack

Qdrant: a base vetorial de um RAG local

Resposta direta

O Qdrant é um banco de dados vetorial de código aberto escrito em Rust, publicado sob a licença Apache 2.0 (mais de 34.000 estrelas no GitHub no final de setembro de 2026, versão 1.19.1), que pode ser iniciado com um único comando Docker. Em um pipeline local de pesquisa documental, é o componente que armazena os vetores dos seus documentos, filtra pelos metadados deles durante a própria pesquisa, em vez de depois, e encontra os trechos mais próximos de uma pergunta feita pelo usuário.

Qdrant é uma base de dados vetorial escrita em Rust, publicada sob a licença Apache 2.0, que se instala com um único comando e lida sem dificuldade com corpus que as bibliotecas em memória já não conseguem suportar. O projeto contava com mais de 34.000 estrelas no GitHub no final de setembro de 2026, na versão 1.19.1. Em uma cadeia de pesquisa documental local, é a peça que armazena os vetores dos seus documentos e que, para cada pergunta, encontra os trechos mais próximos. Veja o que ela faz bem e quando uma solução mais simples basta.

Por Mohamed Meguedmi·Atualização 2026-09-28·Testado no Windows, macOS e Linux

#Para que serve uma base vetorial

Um modelo de embedding converte um texto em uma lista de números — um vetor — de forma que dois textos com significados próximos gerem dois vetores próximos. Encontrar as passagens relevantes para uma pergunta equivale, então, a buscar os vetores mais próximos do vetor da pergunta. Para mil passagens, um simples cálculo sobre o conjunto inteiro é suficiente. Para um milhão, é necessária uma estrutura de índice, e esse é o trabalho de uma base vetorial: construir e manter essa estrutura, responder em alguns milissegundos em vez de comparar cada vetor um por um e continuar funcionando corretamente enquanto o corpus continua recebendo novos documentos.

Esta etapa determina todo o resto: um modelo excelente que recebe os trechos errados responde mal, e nenhuma instrução no prompt compensa uma recuperação falha. Por isso, a escolha do banco de dados vetorial, por muito tempo tratada como um detalhe de infraestrutura intercambiável, merece o mesmo cuidado que a escolha do próprio modelo de linguagem.

#O que o Qdrant oferece

O kit RAG Local

Seus documentos, sua IA: um RAG local confiável para seus PDFs, notas e e-mails — sem enviar nada para a nuvem.

  • Espaço online vitalício
  • PDF + arquivos
  • Atualizações vitalícias

O projeto se descreve como um mecanismo de busca e um banco de dados vetorial de “alto desempenho, em grande escala”, projetado para filtragem ampla — o que o diferencia das bibliotecas que apenas buscam o vizinho mais próximo sem condições. É escrito em Rust, o que seus autores apresentam como a razão de sua velocidade e confiabilidade sob carga elevada. No que diz respeito à robustez operacional, o projeto também documenta um registro antecipado de escrita (write-ahead logging) que garante a persistência dos dados com confirmação de atualização, mesmo em caso de queda de energia, além de métricas, telemetria e logs de auditoria para monitorar e depurar uma implantação em produção.

Um servidor autônomo
Um contêiner, uma API HTTP e gRPC, clientes oficiais em Python, Go, Rust, JavaScript/TypeScript, .NET e Java. Ele funciona independentemente da sua aplicação, que pode ser reiniciada sem nunca perder o índice construído.
Filtragem por payload
Cada vetor contém metadados — autor, data, serviço, tipo de documento — usados para filtrar durante a busca com cláusulas should, must e must_not, e não depois. É a diferença entre uma busca utilizável em uma empresa e uma demonstração.
Quantização dos vetores
Comprimir os vetores para reduzir o consumo de memória por um fator significativo (4× na quantização escalar, até 32× na binária), ao custo de uma perda de precisão controlada e compensável.
Vetores esparsos e multivetores
Além dos vetores densos clássicos, o Qdrant suporta vetores esparsos para busca de texto completo e objetos com múltiplos embeddings, úteis para modelos de interação tardia como ColBERT.
A pesquisa híbrida
Combinar vários vetores em uma mesma consulta para aproveitar ao mesmo tempo a compreensão semântica e a precisão por palavra-chave, com um resultado combinado por estratégias configuráveis, como a fusão de classificações recíprocas (RRF) ou a fusão de pontuações por distribuição (DBSF).
Instantâneos e recuperação
Salvar uma coleção e restaurá-la em outro lugar, o que importa no dia em que reindexar custaria horas de GPU.
Implantação distribuída
Distribuir uma coleção entre vários nós por sharding e replicação, com redimensionamento sem interrupção do serviço — relevante para além do uso estritamente local, mas bom saber caso o projeto cresça, para não precisar reconstruir tudo do zero no dia em que uma única máquina deixar de ser suficiente.

#Iniciar localmente

O caminho mais curto é usar o contêiner oficial, com um volume para que os dados sejam preservados após o reinício. Uma interface web integrada, descrita pelo projeto como “um meio visual de interagir com seus dados e monitorar a saúde da sua implantação”, permite então explorar as coleções, gerenciar os dados e consultar a API REST sem escrever uma linha de código — é a melhor ferramenta de diagnóstico quando uma resposta é ruim: você verifica o que realmente foi recuperado, em vez de tentar adivinhar relendo o código de recuperação.

Executar o Qdrant com persistência
docker run -p 6333:6333 -p 6334:6334 \
  -v "$(pwd)/qdrant_storage:/qdrant/storage" \
  qdrant/qdrant

O cliente Python também pode funcionar sem nenhum servidor: QdrantClient(":memory:") para um teste descartável, ou QdrantClient(path="chemin/vers/db") para armazenamento local persistente. Isso é valioso para um protótipo ou testes automatizados, pois o mesmo código pode depois usar o servidor com a alteração de uma única linha de conexão. Desde 2026, o projeto documenta uma segunda via de integração, Qdrant Edge: uma versão leve concebida para dispositivos com recursos limitados, que é executada diretamente no processo da aplicação, em vez de usar uma arquitetura cliente-servidor, com possibilidade de sincronização com um servidor Qdrant completo.

#Mínimo em Python

  1. 01
    Conectar-se
    from qdrant_client import QdrantClient; depois, client = QdrantClient(url="http://localhost:6333") aponta para o contêiner iniciado acima.
  2. 02
    Criar uma coleção
    client.create_collection(collection_name="docs", vectors_config=VectorParams(size=1024, distance=Distance.COSINE)) — o tamanho deve corresponder exatamente à dimensão do seu modelo de embedding.
  3. 03
    Inserir pontos
    client.upsert(collection_name="docs", points=[PointStruct(id=1, vector=[...], payload={"service": "support"})]) associa a cada vetor um identificador e metadados filtráveis.
  4. 04
    Consultar
    client.query_points(collection_name="docs", query=vecteur_question, limit=5).points retorna os cinco trechos mais próximos, com seus scores e seu payload.
i
O tamanho do vetor não é um detalhe
Uma coleção é criada para um tamanho de vetor e uma medida de distância específicos, que dependem do modelo de embedding escolhido. Mudar o modelo de embedding exige recriar a coleção e reindexar tudo: essa escolha é feita no início, não durante o processo, e documentar a versão exata do modelo usado evita surpresas negativas no dia em que outra pessoa assumir o projeto.

#Filtragem por metadados, a função que lamentamos ter ignorado

Na prática, uma pergunta quase nunca é feita sobre todo o corpus. A busca é feita nos documentos de um serviço, posteriores a uma data, de um tipo específico ou acessíveis ao usuário que faz a pergunta. O Qdrant aplica essas condições durante a busca vetorial, com um conjunto rico de filtros — correspondência de palavra-chave, busca de texto completo, intervalos numéricos, geolocalização — combinados por cláusulas lógicas should, must e must_not. Isso sempre fornece a quantidade correta de resultados relevantes, enquanto uma filtragem feita depois pode eliminar todos os resultados.

O controle de acesso merece uma menção especial: se várias pessoas consultam o mesmo índice, o filtro de permissões é o que impede que um modelo cite a alguém um documento que essa pessoa não tem direito de ler. Nenhuma instrução de prompt substitui esse filtro, e implementá-lo no nível do banco de dados, em vez de no código da aplicação, evita que um novo ponto de acesso à mesma coleção esqueça de reaplicá-lo.

#Caber na memória: a quantização dos vetores

Estimativa para 1 milhão de passagens, vetores de 1.024 dimensões
Armazenamento de vetoresEspaço ocupado aproximadoEfeito na qualidade
Números de ponto flutuante de 32 bits, brutos≈ 4 GBReferência
Quantização escalar de 8 bits≈ 1 GB (÷4, documentado por Qdrant)Perda geralmente desprezível
Quantização binária≈ 128 MB (÷32, documentado por Qdrant)Perda real, a ser compensada por uma verificação dos melhores candidatos

A prática documentada consiste em buscar nos vetores comprimidos e depois reordenar (rescoring) os melhores candidatos com os vetores originais — o Qdrant oferece um parâmetro de superamostragem (oversampling) para ajustar esse equilíbrio: com o parâmetro em 2,4 e um limite de 100 resultados, 240 candidatos são pré-selecionados no índice quantizado antes da reordenação final. Preserva-se a maior parte da precisão dividindo o uso de memória por quatro ou mais, o que, em uma máquina que também hospeda um modelo, não é um luxo. A documentação oficial também afirma que a quantização binária pode proporcionar uma aceleração de até 40 vezes em comparação com os vetores originais, um número a verificar no seu próprio conjunto de dados em vez de tomá-lo como garantido. O projeto resume todas essas opções de compressão, combinadas com o armazenamento em disco, anunciando uma redução do uso de memória que pode chegar a 97% — uma ordem de grandeza que explica por que a quantização é apresentada como uma funcionalidade central, e não como um ajuste marginal.

#Qdrant ou outra

A pergunta a se fazer não é “qual é o melhor banco de dados vetorial”, mas “o que meu projeto exige hoje”. Um script de teste não precisa de nada além de uma biblioteca em memória. Uma aplicação empresarial que já consulta o PostgreSQL se beneficia de adicionar uma extensão vetorial a ele, em vez de acrescentar mais um serviço. O Qdrant se torna a escolha certa precisamente quando várias dessas necessidades se somam ao mesmo tempo: um serviço compartilhado por várias aplicações, filtragem detalhada por metadados, um corpus que continua crescendo e a vontade de não reescrever por conta própria a persistência ou os snapshots. Reavaliar regularmente essa escolha, em vez de fixá-la no primeiro protótipo, evita tanto criar uma arquitetura excessivamente complexa para um projeto modesto quanto subdimensionar um projeto que acabou crescendo.

Escolher de acordo com a situação, não com a moda
SituaçãoO que é adequado
Protótipo, alguns milhares de passagens, um único scriptUma biblioteca em memória ou um arquivo local é suficiente
Você já tem PostgreSQL e poucos vetoresUma extensão vetorial na sua base existente
Serviço compartilhado, filtragem refinada, corpus em crescimentoQdrant
Aplicação embarcada, sem servidor para administrarModo local do cliente Python, ou Qdrant Edge

#FAQ

O Qdrant é gratuito?+
Sim, o motor é de código aberto sob licença Apache 2.0 e pode ser auto-hospedado sem custo de licença, com um repositório no GitHub que contava com mais de 34.000 estrelas no fim de setembro de 2026. O desenvolvedor também oferece um serviço pago em nuvem; ele não é necessário para uso local.
É necessária uma GPU para o Qdrant?+
Não para o uso comum: a busca vetorial, escrita em Rust, exige processamento e memória. O Qdrant, no entanto, documenta suporte opcional a GPUs (NVIDIA e AMD) para acelerar a construção de índices em volumes muito grandes — uma opção, não um pré-requisito para um corpus local.
Qdrant ou Chroma?+
Chroma é mais rápido de configurar para um protótipo em Python. Qdrant lida melhor com a carga, faz uma filtragem mais precisa por metadados com um amplo conjunto de condições e é administrado como um serviço de verdade, com snapshots, recuperação e observabilidade integrada. O ponto de virada geralmente ocorre com o uso por vários usuários ou com algumas centenas de milhares de trechos.
Quanta memória RAM é necessária?+
Depende do número de vetores e de sua dimensão. Um milhão de vetores de 1.024 dimensões ocupa aproximadamente 4 GB brutos de acordo com a aritmética padrão dos números de ponto flutuante de 32 bits, e cerca de quatro vezes menos com a quantização escalar documentada pelo Qdrant, até 32 vezes menos com quantização binária. Adicione o espaço do índice e dos metadados, que permanecem modestos em comparação.
É possível usá-lo sem servidor?+
Sim, o cliente Python pode funcionar na memória (":memory:") ou em um diretório local, o que é adequado para protótipos e testes. O projeto também documenta o Qdrant Edge, uma versão que é executada dentro do processo da aplicação para ambientes com recursos limitados, com possibilidade de sincronização com um servidor completo.
A quantização realmente causa perda de qualidade?+
Um pouco, mas recuperável: a prática documentada é buscar nos vetores comprimidos e depois reordenar os melhores candidatos com os vetores originais (rescoring), via um parâmetro de superamostragem ajustável. A quantização escalar de 8 bits é geralmente a menos arriscada; a binária, mais agressiva, exige verificar a qualidade em seu próprio corpus.
O Qdrant é adequado para vários clientes em uma única instância?+
Sim, é um dos usos que o projeto documenta explicitamente sob o nome de multi-tenant: um particionamento escalável dos dados por cliente ou por organização em uma mesma coleção, combinado com a filtragem por payload para isolar o que cada usuário pode ver. É mais econômico, tanto em termos de operação quanto de memória, do que abrir uma coleção separada por cliente quando o número de clientes ultrapassa algumas dezenas.
Este guia ajudou você?

Um comentário, um erro ou uma observação? Avise-nos; isso ajuda a melhorar o guia para todos.