Veni AI
Technologie baz danych

Bazy danych wektorowych i systemy wyszukiwania oparte na osadzeniach

Kompleksowy przewodnik po architekturze technicznej baz danych wektorowych, algorytmach wyszukiwania opartych na osadzeniach, indeksowaniu HNSW, IVF oraz zastosowaniach wyszukiwania semantycznego w środowiskach korporacyjnych.

Veni AI Technical Team12 Ocak 20255 dk okuma
Bazy danych wektorowych i systemy wyszukiwania oparte na osadzeniach

Bazy wektorowe i systemy wyszukiwania osadzeń

Bazy wektorowe to specjalistyczne bazy danych zoptymalizowane do przechowywania i wykonywania wyszukiwania podobieństwa na wektorach o wysokiej wymiarowości. Stanowią one fundamentalny komponent nowoczesnych aplikacji AI, szczególnie systemów RAG (Retrieval-Augmented Generation).

Czym jest baza wektorowa?

Podczas gdy tradycyjne bazy danych są zoptymalizowane pod zapytania o dokładne dopasowania, bazy wektorowe skupiają się na wyszukiwaniu Approximate Nearest Neighbor (ANN).

Kluczowe pojęcia

Embedding: Numeryczna reprezentacja danych w formie wektora (tekst, obraz, dźwięk).

"Artificial intelligence" → [0.12, -0.45, 0.89, ..., 0.34] (np. 1536 wymiarów)

Similarity Search: Znajdowanie wektorów najbliższych względem wektora zapytania.

query_vector → Top-K najbardziej podobnych wektorów

Metryki odległości:

  • Cosine Similarity: Podobieństwo kierunkowe.
  • Euclidean Distance (L2): Odległość geometryczna.
  • Dot Product: Iloczyn skalarny wektorów.

Metryki podobieństwa: szczegółowa analiza

Cosine Similarity

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

Zakres wartości: [-1, 1]

  • 1: Ten sam kierunek (identyczne).
  • 0: Ortogonalne (niepowiązane).
  • -1: Przeciwny kierunek.

Zastosowanie: Podobieństwo tekstów, wyszukiwanie semantyczne.

Euclidean Distance (L2)

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

Zakres wartości: [0, ∞) Zastosowanie: Podobieństwo obrazów, klasteryzacja.

Dot Product

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

Zastosowanie: Równoważne cosinusowi dla znormalizowanych osadzeń.

Algorytmy indeksowania

1. Brute Force (Flat Index)

Porównywanie zapytania z każdym wektorem w bazie.

Złożoność: O(n × d)

  • n: Liczba wektorów.
  • d: Wymiarowość.

Zaleta: 100% dokładności. Wada: Bardzo wolne dla dużych zbiorów danych.

2. IVF (Inverted File Index)

Zawężenie przestrzeni wyszukiwania poprzez podział wektorów na klastry.

Algorytm:

  1. Tworzenie centroidów za pomocą K-means.
  2. Przypisanie każdego wektora do najbliższego centroidu.
  3. Podczas wyszukiwania przeglądanie jedynie najbliższych klastrów nprobe.
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)

Podejście oparte na grafach i najpopularniejsza metoda obecnie.

Struktura:

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)

Parametry:

  • M: Maksymalna liczba połączeń dla każdego węzła.
  • ef_construction: Liczba kandydatów podczas budowy indeksu.
  • ef_search: Liczba kandydatów podczas zapytania.

Zalety:

  • Ekstremalnie szybkie wyszukiwanie: O(log n).
  • Wysoki poziom recall.
  • Obsługa dynamicznych operacji insert/delete.

4. Product Quantization (PQ)

Zmniejszanie wykorzystania pamięci poprzez kompresję wektorów.

Metoda:

  1. Podział wektora na M podwektorów.
  2. Mapowanie każdego podwektora na jeden z K centroidów.
  3. Przechowywanie identyfikatorów centroidów zamiast oryginalnych komponentów wektora.
1Original: 1536 dim × 4 bytes = 6KB 2PQ (M=96, K=256): 96 × 1 byte = 96 bytes 3Compression: ~64x

5. Scalar Quantization (SQ)

Konwersja reprezentacji Float32 do Int8.

1Original: 1536 × 4 bytes = 6KB 2SQ8: 1536 × 1 byte = 1.5KB 3Compression: 4x 4## Porównanie popularnych baz danych wektorowych 5 6### Pinecone 7 8**Funkcje:** 9- W pełni zarządzana usługa chmurowa. 10- Automatyczne skalowanie. 11- Filtrowanie metadanych. 12- Izolacja namespace. 13 14**Użycie:** 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

Funkcje:

  • Open source.
  • Wbudowana wektoryzacja.
  • Wsparcie GraphQL API.
  • Możliwość wyszukiwania hybrydowego (wektorowe + słów kluczowych).

Qdrant

Funkcje:

  • Napisany w Rust dla wysokiej wydajności.
  • Bogate opcje filtrowania.
  • Indeksowanie payload.
  • Wsparcie dla wdrożeń rozproszonych.

Milvus

Funkcje:

  • Przyspieszenie GPU.
  • Wyszukiwanie wielowektorowe.
  • Time travel (wersjonowanie).
  • Architektura natywna dla Kubernetes.

ChromaDB

Funkcje:

  • Przyjazny dla deweloperów i łatwy w konfiguracji.
  • Tryby in-memory + persistent.
  • Podejście Python-first.
  • Idealny do prototypowania.

Tabela porównawcza

FunkcjaPineconeWeaviateQdrantMilvus
HostingCloudBothBothBoth
SkalowalnośćAutoManualManualAuto
Wyszukiwanie hybrydowe
Wsparcie GPU--
CennikPer vectorFree/PaidFree/PaidFree/Paid

Filtrowanie i metadane

Pre-filtering vs Post-filtering

Pre-filtering:

  1. Najpierw zastosuj filtr metadanych.
  2. Wykonaj wyszukiwanie wektorowe w przefiltrowanym zbiorze.
  • Zaleta: Szybsze.
  • Wada: Możliwa utrata recall.

Post-filtering:

  1. Znajdź wyniki Top-K × multiplier poprzez wyszukiwanie wektorowe.
  2. Zastosuj filtr metadanych do tych wyników.
  3. Zwróć finalne top K.
  • Zaleta: Lepszy recall.
  • Wada: Wolniejsze działanie.

Wyszukiwanie hybrydowe

Łączenie wyszukiwania słów kluczowych (BM25) + wektorowego:

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

Optymalizacja wydajności

Parametry indeksu

Optymalne ustawienia HNSW:

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

Przetwarzanie wsadowe

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)

Przykładowa architektura korporacyjna

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

Monitoring i obserwowalność

Kluczowe metryki

  • Opóźnienie zapytań (p50, p95, p99)
  • Recall Rate
  • QPS (Queries Per Second)
  • Rozmiar indeksu
  • Użycie pamięci

Progi alertów

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## Konkluzja 10 11Bazy wektorowe są niezbędnymi elementami nowoczesnych aplikacji AI. Wybierając odpowiednią bazę danych, strategię indeksowania oraz optymalizacje, możesz zbudować wysokowydajne systemy wyszukiwania semantycznego. 12 13W Veni AI oferujemy korporacyjne rozwiązania do wyszukiwania wektorowego. Skontaktuj się z nami, aby omówić swoje wymagania.

İlgili Makaleler