Veni AI
Tecnologias de Banco de Dados

Bancos de Dados Vetoriais e Sistemas de Busca por Embeddings

Um guia abrangente sobre a arquitetura técnica de bancos de dados vetoriais, algoritmos de busca por embeddings, HNSW, indexação IVF e aplicações corporativas de busca semântica.

Veni AI Technical Team12 Ocak 20256 dk okuma
Bancos de Dados Vetoriais e Sistemas de Busca por Embeddings

Bancos de Dados Vetoriais e Sistemas de Busca por Embeddings

Bancos de dados vetoriais são bancos especializados otimizados para armazenar e realizar buscas por similaridade em vetores de alta dimensão. Eles são o componente fundamental de aplicações modernas de IA, especialmente sistemas RAG (Retrieval-Augmented Generation).

O que é um Banco de Dados Vetorial?

Enquanto bancos de dados tradicionais são otimizados para consultas de correspondência exata, bancos de dados vetoriais focam em buscas de Vizinhos Aproximados Mais Próximos (ANN).

Conceitos Centrais

Embedding: Uma representação vetorial numérica de dados (texto, imagem, áudio).

"Artificial intelligence" → [0.12, -0.45, 0.89, ..., 0.34] (e.g., 1536 dimensions)

Busca por Similaridade: Encontrar os vetores mais próximos de um vetor de consulta.

query_vector → Top-K most similar vectors

Métricas de Distância:

  • Similaridade de Cosseno: Similaridade direcional.
  • Distância Euclidiana (L2): Distância geométrica.
  • Produto Escalar: Produto interno entre vetores.

Métricas de Similaridade: Análise Detalhada

Similaridade de Cosseno

cos(A, B) = (A · B) / (||A|| × ||B||)

Intervalo de Valores: [-1, 1]

  • 1: Mesma direção (idênticos).
  • 0: Ortogonais (não relacionados).
  • -1: Direções opostas.

Caso de Uso: Similaridade textual, busca semântica.

Distância Euclidiana (L2)

d(A, B) = √(Σ(Aᵢ - Bᵢ)²)

Intervalo de Valores: [0, ∞) Caso de Uso: Similaridade de imagens, clustering.

Produto Escalar

A · B = Σ(Aᵢ × Bᵢ)

Caso de Uso: Equivalente ao cosseno para embeddings normalizados.

Algoritmos de Indexação

1. Força Bruta (Índice Plano)

Comparando a consulta contra todos os vetores no banco.

Complexidade: O(n × d)

  • n: Número de vetores.
  • d: Dimensão.

Vantagem: 100% de acurácia. Desvantagem: Muito lento para grandes conjuntos de dados.

2. IVF (Inverted File Index)

Reduzindo o espaço de busca ao dividir vetores em clusters.

Algoritmo:

  1. Criar centróides usando K-means.
  2. Atribuir cada vetor ao centróide mais próximo.
  3. Durante a busca, consultar apenas os nprobe clusters mais próximos.
1Parameters: 2- nlist: Number of clusters (typically √n) 3- nprobe: Number of clusters to search 4 5Trade-off: Higher nprobe → higher accuracy, lower speed.

3. HNSW (Hierarchical Navigable Small World)

Uma abordagem baseada em grafos e atualmente o método mais popular.

Estrutura:

1Layer 2: o-------o-------o (sparse) 2 | | | 3Layer 1: o-o-o---o-o-o---o-o-o (medium) 4 | | | | | | | | | 5Layer 0: o-o-o-o-o-o-o-o-o-o-o-o (dense)

Parâmetros:

  • M: Número máximo de conexões por nó.
  • ef_construction: Número de candidatos durante a construção do índice.
  • ef_search: Número de candidatos durante a consulta.

Vantagens:

  • Busca extremamente rápida: O(log n).
  • Altas taxas de recall.
  • Suporta inserção/exclusão dinâmica.

4. Product Quantization (PQ)

Reduzindo o uso de memória por meio da compressão de vetores.

Método:

  1. Dividir o vetor em M subvetores.
  2. Mapear cada subvetor para um de K centróides.
  3. Armazenar IDs dos centróides em vez dos componentes originais.
1Original: 1536 dim × 4 bytes = 6KB 2PQ (M=96, K=256): 96 × 1 byte = 96 bytes 3Compression: ~64x

5. Scalar Quantization (SQ)

Convertendo representações Float32 para Int8.

1Original: 1536 × 4 bytes = 6KB 2SQ8: 1536 × 1 byte = 1.5KB 3Compression: 4x 4## Comparação de Bancos de Dados Vetoriais Populares 5 6### Pinecone 7 8**Recursos:** 9- Serviço de cloud totalmente gerenciado. 10- Escalonamento automático. 11- Filtragem por metadados. 12- Isolamento por namespace. 13 14**Uso:** 15```python 16import pinecone 17 18pinecone.init(api_key="xxx", environment="us-west1-gcp") 19index = pinecone.Index("my-index") 20 21# Upsert 22index.upsert(vectors=[ 23 {"id": "vec1", "values": [0.1, 0.2, ...], "metadata": {"category": "tech"}} 24]) 25 26# Query 27results = index.query(vector=[0.1, 0.2, ...], top_k=10, filter={"category": "tech"})

Weaviate

Recursos:

  • Open source.
  • Vetorização integrada.
  • Suporte a GraphQL API.
  • Capacidade de busca híbrida (vetor + palavra-chave).

Qdrant

Recursos:

  • Escrito em Rust para alta performance.
  • Opções avançadas de filtragem.
  • Indexação de payload.
  • Suporte a implantação distribuída.

Milvus

Recursos:

  • Aceleração por GPU.
  • Busca multi-vetor.
  • Time travel (versionamento).
  • Arquitetura nativa em Kubernetes.

ChromaDB

Recursos:

  • Fácil para desenvolvedores e simples de configurar.
  • Modos in-memory + persistente.
  • Abordagem Python-first.
  • Ideal para prototipagem.

Tabela de Comparação

RecursoPineconeWeaviateQdrantMilvus
HostingCloudAmbosAmbosAmbos
EscalabilidadeAutoManualManualAuto
Busca Híbrida
Suporte a GPU--
PreçoPor vetorGratuito/PagoGratuito/PagoGratuito/Pago

Filtragem e Metadados

Pré-filtragem vs Pós-filtragem

Pré-filtragem:

  1. Aplicar filtro de metadados primeiro.
  2. Executar a busca vetorial dentro do conjunto filtrado.
  • Vantagem: Mais rápido.
  • Desvantagem: Possível perda de recall.

Pós-filtragem:

  1. Encontrar resultados Top-K × multiplicador via busca vetorial.
  2. Aplicar o filtro de metadados nesses resultados.
  3. Retornar os top K finais.
  • Vantagem: Melhor recall.
  • Desvantagem: Performance mais lenta.

Busca Híbrida

Combinando busca por palavra-chave (BM25) + busca vetorial:

final_score = α × vector_score + (1-α) × keyword_score

Otimização de Performance

Parâmetros de Indexação

Configurações HNSW Ideais:

1High Recall: M=32, ef=200 2High Speed: M=16, ef=50 3Balanced: M=24, ef=100

Processamento em Lotes

1# Ruim: Inserção individual 2for vec in vectors: 3 index.upsert([vec]) 4 5# Bom: Inserção em lote 6index.upsert(vectors, batch_size=100)

Pooling de Conexões

1from pinecone import Pinecone 2 3pc = Pinecone( 4 api_key="xxx", 5 pool_threads=30 # Conexões paralelas 6)

Exemplo de Arquitetura Enterprise

1┌─────────────────────────────────────────────────────┐ 2│ Application │ 3└──────────────────────┬──────────────────────────────┘ 45┌──────────────────────▼──────────────────────────────┐ 6│ Vector Search Service │ 7│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ 8│ │ Query │ │ Reranker │ │ Cache │ │ 9│ │ Engine │ │ Service │ │ (Redis) │ │ 10│ └─────────────┘ └─────────────┘ └─────────────┘ │ 11└──────────────────────┬──────────────────────────────┘ 1213┌──────────────────────▼──────────────────────────────┐ 14│ Vector Database Cluster │ 15│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ 16│ │ Shard 1 │ │ Shard 2 │ │ Shard 3 │ │ 17│ └─────────┘ └─────────┘ └─────────┘ │ 18└─────────────────────────────────────────────────────┘

Monitoramento e Observabilidade

Métricas-Chave

  • Latência de Query (p50, p95, p99)
  • Taxa de Recall
  • QPS (Queries Per Second)
  • Tamanho do Índice
  • Uso de Memória

Limites de Alertas

1alerts: 2 - name: high_latency 3 condition: p99_latency > 200ms 4 severity: warning 5 6 - name: low_recall 7 condition: recall < 0.9 8 severity: critical 9## Conclusão 10 11Os bancos de dados vetoriais são componentes indispensáveis das aplicações modernas de IA. Com a escolha correta do banco de dados, da estratégia de indexação e das otimizações, você pode construir sistemas de busca semântica de alto desempenho. 12 13Na Veni AI, oferecemos soluções empresariais de busca vetorial. Entre em contato conosco para suas necessidades.

İlgili Makaleler