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:
- Skapa centroids med K-means.
- Tilldela varje vektor sin närmaste centroid.
- 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:
- Dela upp vektorn i M delvektorer.
- Mappa varje delvektor till en av K centroids.
- 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
| Funktion | Pinecone | Weaviate | Qdrant | Milvus |
|---|---|---|---|---|
| Hosting | Cloud | Båda | Båda | Båda |
| Skalbarhet | Auto | Manuell | Manuell | Auto |
| Hybrid-sökning | ✓ | ✓ | ✓ | ✓ |
| GPU-stöd | - | - | ✓ | ✓ |
| Prissättning | Per vektor | Gratis/Betald | Gratis/Betald | Gratis/Betald |
Filtrering och metadata
Pre-filtrering vs post-filtrering
Pre-filtrering:
- Tillämpa metadatafilter först.
- Utför vektorsökning inom den filtrerade mängden.
- Fördel: Snabbare.
- Nackdel: Möjlig återkallningsförlust.
Post-filtrering:
- Hitta Top-K × multiplikatorresultat via vektorsökning.
- Tillämpa metadatafilter på dessa resultat.
- 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└──────────────────────┬──────────────────────────────┘ 4 │ 5┌──────────────────────▼──────────────────────────────┐ 6│ Vector Search Service │ 7│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ 8│ │ Query │ │ Reranker │ │ Cache │ │ 9│ │ Engine │ │ Service │ │ (Redis) │ │ 10│ └─────────────┘ └─────────────┘ └─────────────┘ │ 11└──────────────────────┬──────────────────────────────┘ 12 │ 13┌──────────────────────▼──────────────────────────────┐ 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.
