Veni AI
Databastekniker

Vektordatabaser och söksystem baserade på inbäddningar

En heltäckande guide till den tekniska arkitekturen för vektordatabaser, algoritmer för inbäddningssökning, HNSW, IVF-indexering och semantiska sökapplikationer för företag.

Veni AI Technical Team12 Ocak 20255 dk okuma
Vektordatabaser och söksystem baserade på inbäddningar

Vektordatabaser och inbäddningssöksystem

Vektordatabaser är specialiserade databaser optimerade för att lagra och utföra likhetssökningar på högdimensionella vektorer. De är den grundläggande komponenten i moderna AI‑applikationer, särskilt RAG‑system (Retrieval-Augmented Generation).

Vad är en vektordatabas?

Medan traditionella databaser är optimerade för exakta sökfrågor fokuserar vektordatabaser på Approximate Nearest Neighbor (ANN)‑sökningar.

Centrala koncept

Embedding: En numerisk vektorrepräsentation av data (text, bild, ljud).

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

Similarity Search: Hitta de vektorer som ligger närmast en frågevektor.

query_vector → Top-K most similar vectors

Avståndsmått:

  • Cosine Similarity: Riktad likhet.
  • Euclidean Distance (L2): Geometriskt avstånd.
  • Dot Product: Inre produkt av vektorer.

Likhetsmått: Detaljerad analys

Cosine Similarity

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

Värdeintervall: [-1, 1]

  • 1: Samma riktning (identiska).
  • 0: Ortogonala (orelaterade).
  • -1: Motsatt riktning.

Användningsområde: Textlikhet, semantisk sökning.

Euclidean Distance (L2)

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

Värdeintervall: [0, ∞) Användningsområde: Bildlikhet, klustring.

Dot Product

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

Användningsområde: Ekvivalent med cosinus för normaliserade embeddings.

Indexeringsalgoritmer

1. Brute Force (Flat Index)

Jämför frågan med varje enskild vektor i databasen.

Komplexitet: O(n × d)

  • n: Antal vektorer.
  • d: Dimension.

Fördel: 100% noggrannhet. Nackdel: Mycket långsam för stora dataset.

2. IVF (Inverted File Index)

Begränsar sökrymden genom att dela upp vektorer i kluster.

Algoritm:

  1. Skapa centroids med K-means.
  2. Tilldela varje vektor sin närmaste centroid.
  3. Under sökning: leta endast i de närmaste nprobe‑klustren.
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)

Ett grafbaserat tillvägagångssätt och den mest populära metoden idag.

Struktur:

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)

Parametrar:

  • M: Maximalt antal kopplingar per nod.
  • ef_construction: Antal kandidater under indexbyggnad.
  • ef_search: Antal kandidater under sökning.

Fördelar:

  • Extremt snabb sökning: O(log n).
  • Hög recall.
  • Stödjer dynamisk insertion/deletion.

4. Product Quantization (PQ)

Minskar minnesanvändningen genom att komprimera vektorer.

Metod:

  1. Dela upp vektorn i M delvektorer.
  2. Mappa varje delvektor till en av K centroids.
  3. Lagra centroid‑ID:n istället för de ursprungliga komponenterna.
1Original: 1536 dim × 4 bytes = 6KB 2PQ (M=96, K=256): 96 × 1 byte = 96 bytes 3Compression: ~64x

5. Scalar Quantization (SQ)

Konverterar Float32‑representationer till Int8.

1Original: 1536 × 4 bytes = 6KB 2SQ8: 1536 × 1 byte = 1.5KB 3Compression: 4x 4## Jämförelse av populära vektordatabaser 5 6### Pinecone 7 8**Funktioner:** 9- Fullt hanterad molntjänst. 10- Automatisk skalning. 11- Metadatafiltrering. 12- Namespace-isolering. 13 14**Användning:** 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

Funktioner:

  • Öppen källkod.
  • Inbyggd vektorisering.
  • Stöd för GraphQL API.
  • Hybrid-sökning (vektor + nyckelord).

Qdrant

Funktioner:

  • Skriven i Rust för hög prestanda.
  • Rika filtreringsalternativ.
  • Payload-indexering.
  • Stöd för distribuerad deployment.

Milvus

Funktioner:

  • GPU-acceleration.
  • Multi-vektorsökning.
  • Time travel (versionering).
  • Kubernetes-native arkitektur.

ChromaDB

Funktioner:

  • Utvecklarvänlig och enkel att installera.
  • In-memory + persistenta lägen.
  • Python-first-strategi.
  • Idealisk för prototyper.

Jämförelsetabell

FunktionPineconeWeaviateQdrantMilvus
HostingCloudBådaBådaBåda
SkalbarhetAutoManuellManuellAuto
Hybrid-sökning
GPU-stöd--
PrissättningPer vektorGratis/BetaldGratis/BetaldGratis/Betald

Filtrering och metadata

Pre-filtrering vs post-filtrering

Pre-filtrering:

  1. Tillämpa metadatafilter först.
  2. Utför vektorsökning inom den filtrerade mängden.
  • Fördel: Snabbare.
  • Nackdel: Möjlig återkallningsförlust.

Post-filtrering:

  1. Hitta Top-K × multiplikatorresultat via vektorsökning.
  2. Tillämpa metadatafilter på dessa resultat.
  3. Returnera slutliga Top K.
  • Fördel: Bättre återkallning.
  • Nackdel: Långsammare prestanda.

Hybrid-sökning

Kombination av Keyword (BM25) + Vektorsökning:

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

Prestandaoptimering

Indexparametrar

Optimala HNSW-inställningar:

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

Batchbearbetning

1# Poor: Singular insert 2for vec in vectors: 3 index.upsert([vec]) 4 5# Good: Batch insert 6index.upsert(vectors, batch_size=100)

Connection Pooling

1from pinecone import Pinecone 2 3pc = Pinecone( 4 api_key="xxx", 5 pool_threads=30 # Parallel connections 6)

Exempel på företagsarkitektur

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└─────────────────────────────────────────────────────┘

Övervakning och observability

Nyckelmetriker

  • Query Latency (p50, p95, p99)
  • Recall Rate
  • QPS (Queries Per Second)
  • Indexstorlek
  • Minnesanvändning

Larmgränser

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## Slutsats 10 11Vektordatabaser är oumbärliga komponenter i moderna AI-applikationer. Med rätt val av databas, indexeringsstrategi och optimeringar kan du bygga högpresterande semantiska söksystem. 12 13På Veni AI erbjuder vi företagslösningar för vektorsökning. Kontakta oss för dina behov.

İlgili Makaleler