Vektordatabaser og innebyggingssøk-systemer
Vektordatabaser er spesialiserte databaser optimalisert for lagring og utføring av likhetssøk på høy-dimensjonale vektorer. De er en grunnleggende komponent i moderne KI‑applikasjoner, spesielt RAG‑systemer (Retrieval-Augmented Generation).
Hva er en vektordatabase?
Mens tradisjonelle databaser er optimalisert for eksakte oppslag, fokuserer vektordatabaser på Approximate Nearest Neighbor (ANN)-søk.
Grunnleggende konsepter
Embedding: En numerisk vektorrepresentasjon av data (tekst, bilde, lyd).
"Artificial intelligence" → [0.12, -0.45, 0.89, ..., 0.34] (e.g., 1536 dimensions)
Similarity Search: Finne vektorene som ligger nærmest en spørringsvektor.
query_vector → Top-K most similar vectors
Avstandsmål:
- Cosine Similarity: Retningslikhet.
- Euclidean Distance (L2): Geometrisk avstand.
- Dot Product: Indreprodukt av vektorer.
Similarity Metrics: Detaljert analyse
Cosine Similarity
cos(A, B) = (A · B) / (||A|| × ||B||)
Verdiområde: [-1, 1]
- 1: Samme retning (identiske).
- 0: Ortogonale (ikke relatert).
- -1: Motsatt retning.
Bruksområde: Tekstlikhet, semantisk søk.
Euclidean Distance (L2)
d(A, B) = √(Σ(Aᵢ - Bᵢ)²)
Verdiområde: [0, ∞)
Bruksområde: Bildelikhet, clustering.
Dot Product
A · B = Σ(Aᵢ × Bᵢ)
Bruksområde: Tilsvarer cosine for normaliserte embeddings.
Indekseringsalgoritmer
1. Brute Force (Flat Index)
Sammenligner spørringen med hver eneste vektor i databasen.
Kompleksitet: O(n × d)
- n: Antall vektorer.
- d: Dimensjon.
Fordel: 100% nøyaktighet.
Ulempe: Veldig tregt for store datasett.
2. IVF (Inverted File Index)
Begrenser søkeområdet ved å dele vektorer inn i klynger.
Algoritme:
- Lag sentroider med K-means.
- Tilordne hver vektor til nærmeste centroid.
- Under søk, se kun i de nærmeste nprobe-klyngene.
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)
En grafbasert tilnærming og den mest populære metoden i dag.
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)
Parametere:
- M: Maksimalt antall forbindelser per node.
- ef_construction: Antall kandidater under indeksbygging.
- ef_search: Antall kandidater under søkekjøring.
Fordeler:
- Ekstremt raske søk: O(log n).
- Høy recall.
- Støtter dynamisk innsetting/sletting.
4. Product Quantization (PQ)
Reduserer minnebruk ved å komprimere vektorer.
Metode:
- Del vektoren inn i M sub-vektorer.
- Kartlegg hver sub-vektor til én av K sentroider.
- Lagre centroid-ID-er i stedet for de originale komponentene.
1Original: 1536 dim × 4 bytes = 6KB 2PQ (M=96, K=256): 96 × 1 byte = 96 bytes 3Compression: ~64x
5. Scalar Quantization (SQ)
Konvertering av Float32-representasjoner til Int8.
1Original: 1536 × 4 bytes = 6KB 2SQ8: 1536 × 1 byte = 1.5KB 3Compression: 4x 4## Sammenligning av populære vektordatabaser 5 6### Pinecone 7 8**Funksjoner:** 9- Fullt administrert skytjeneste. 10- Automatisk skalering. 11- Metadata-filtrering. 12- Navneromsisolasjon. 13 14**Bruk:** 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
Funksjoner:
- Open source.
- Innebygd vektorisering.
- Støtte for GraphQL API.
- Hybrid søk (vektor + nøkkelord).
Qdrant
Funksjoner:
- Skrevet i Rust for høy ytelse.
- Rike filtreringsmuligheter.
- Payload-indeksering.
- Støtte for distribuert utrulling.
Milvus
Funksjoner:
- GPU-akselerasjon.
- Multi-vektorsøk.
- Time travel (versjonering).
- Kubernetes-native arkitektur.
ChromaDB
Funksjoner:
- Utviklervennlig og enkel å sette opp.
- Minnebasert + vedvarende modus.
- Python-first tilnærming.
- Ideell for prototyping.
Sammenligningstabell
| Funksjon | Pinecone | Weaviate | Qdrant | Milvus |
|---|---|---|---|---|
| Hosting | Cloud | Both | Both | Both |
| Skalerbarhet | Auto | Manual | Manual | Auto |
| Hybrid søk | ✓ | ✓ | ✓ | ✓ |
| GPU-støtte | - | - | ✓ | ✓ |
| Prising | Per vector | Free/Paid | Free/Paid | Free/Paid |
Filtrering og metadata
Pre-filtering vs Post-filtering
Pre-filtering:
- Bruk metadatafilter først.
- Utfør vektorsøk innenfor det filtrerte settet.
- Fordel: Raskere.
- Ulempe: Potensiell reduksjon i recall.
Post-filtering:
- Finn Top-K × multiplikator via vektorsøk.
- Bruk metadatafilter på disse resultatene.
- Returner endelige topp K.
- Fordel: Bedre recall.
- Ulempe: Lavere ytelse.
Hybrid Search
Kombinerer nøkkelord (BM25) + vektorsøk:
final_score = α × vector_score + (1-α) × keyword_score
Ytelsesoptimalisering
Indeksparametere
Optimale HNSW-innstillinger:
1High Recall: M=32, ef=200 2High Speed: M=16, ef=50 3Balanced: M=24, ef=100
Batch-prosessering
1# Poor: Singular insert 2for vec in vectors: 3 index.upsert([vec]) 4 5# Good: Batch insert 6index.upsert(vectors, batch_size=100)
Tilkoblingspooling
1from pinecone import Pinecone 2 3pc = Pinecone( 4 api_key="xxx", 5 pool_threads=30 # Parallel connections 6)
Eksempel på bedriftsarkitektur
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└─────────────────────────────────────────────────────┘
Overvåking og observabilitet
Nøkkelmetrikker
- Forespørselslatens (p50, p95, p99)
- Recall-rate
- QPS (Queries Per Second)
- Indeksstørrelse
- Minnebruk
Varslingsterskler
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## Konklusjon 10 11Vektordatabaser er uunnværlige komponenter i moderne AI‑applikasjoner. Med riktig valg av database, indekseringsstrategi og optimaliseringer kan du bygge semantiske søkesystemer med høy ytelse. 12 13Hos Veni AI tilbyr vi enterprise‑løsninger for vektorsøk. Kontakt oss for dine behov.
