🎯 Definicja

Baza wektorowa (ang. vector database) to specjalny typ bazy danych przystosowany do przechowywania, indeksowania i wyszukiwania danych w postaci reprezentacji wektorowych, które powstały na przykład w wyniku zastosowania Embedding. W praktyce bazy te umożliwiają wyszukiwanie semantyczne – czyli odnajdywanie najbardziej podobnych znaczeniowo elementów, a nie tylko identycznych lub zgodnych z kluczem.

🔑 Kluczowe różnice: baza klasyczna vs wektorowa

CechaBaza klasyczna (np. SQL, NoSQL)Baza wektorowa
Typ danychTekst, liczby, daty, relacjeWektory liczb (embeddingi)
WyszukiwanieDokładne dopasowanie (exact match)Podobieństwo semantyczne (nearest neighbors)
Klucz wyszukiwaniaID, tekst, warunki logiczneWektor zapytania (query embedding)
ZastosowaniaCRUD, raporty, e-commerce, logika biznesowaAI/LLM, RAG, NLP, semantyczne wyszukiwanie
WydajnośćOptymalizacja zapytań, indeksy B-TreeIndeksy wektorowe: IVF, HNSW, FAISS

📚 Szczegóły działania

Reprezentacja danych

Zamiast strukturalnego tekstu czy tabel, baza przechowuje embeddingi – np. 384- lub 768-wymiarowe wektory liczbowe reprezentujące znaczenie tekstów, obrazów, audio lub kodu.

Wyszukiwanie: podobieństwo kosinusowe lub euklidesowe

Gdy użytkownik zadaje pytanie lub podaje tekst, najpierw jest on konwertowany na embedding (wektor), a następnie baza zwraca wektory najbardziej podobne (nearest neighbors) w bazie – na podstawie podobieństwa (ang. similarity):

similarity = cos(ϑ) = (A · B) / (‖A‖‖B‖)

🧠 Przykłady użycia bazy wektorowej

  • Chatbot z RAG: pytanie użytkownika → wektor zapytania → trafne dokumenty → odpowiedź zbudowana na znalezionych danych
  • System rekomendacji: wektor profilu użytkownika vs produkty
  • Wyszukiwanie kodu, obrazów (reverse search), wiadomości, PDF
  • Rozszerzanie kontekstu LLM: semantyczne retrieval → context injection (context-aware prompting)

💡 Przykład: FAISS i Pinecone

Przechowanie wektorów w bazie FAISS:

from sentence_transformers import SentenceTransformer
import faiss
import numpy as np
 
model = SentenceTransformer('all-MiniLM-L6-v2')
docs = ["To jest dokument o SQL", "Uczenie maszynowe i embeddingi", "Przewodnik po Kubernetesie"]
vectors = model.encode(docs)
 
index = faiss.IndexFlatL2(384)  # indeks euklidesowy
index.add(np.array(vectors))    # dodajemy wektory

Później zapytanie użytkownika przekształcamy w wektor i wykonujemy wyszukiwanie:

query_vec = model.encode(["Czym jest Embedding?"])
D, I = index.search(np.array(query_vec), k=3)

Znane silniki baz wektorowych

NazwaOpis
FAISSFacebook AI Similarity Search, szybki i lokalny
PineconePlatforma SaaS do wyszukiwania semantycznego
WeaviateBaza z REST/GraphQL, AI-native, z wbudowanymi embeddingami
QdrantWydajny silnik open-source napisany w Rust
MilvusSkalowalna, wysokowydajna baza wektorowa
ChromaLekka, prosta do użycia baza na etapie prototypowania, działa lokalnie w Pythonie

✅ Porównanie do klasycznych baz

CzynnośćKlasyczna bazaBaza wektorowa
Szukaj “analiza danychdopasuje frazęznajdzie również “eksploracja danych”, “analiza statystyczna”, itp.
Klucz głównyid, emailembedding_vector, zwykle z metadata
Złożoność indeksuB-tree/O(log n)ANN – Approximate Nearest Neighbors, czasy ms

📌 Źródła

👽 Brudnopis

  • embedding → przejście z tekstu do przestrzeni semantycznej
  • klasyczne SQL/inverted index ≠ zrozumienie sensu
  • vdb = klucz dla RAG, NLP 2.0, semantycznych systemów asystujących
  • łączenie bazy wektorowej z promptem jako kontekst, coraz popularniejsze