🎯 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
Cecha | Baza klasyczna (np. SQL, NoSQL) | Baza wektorowa |
---|---|---|
Typ danych | Tekst, liczby, daty, relacje | Wektory liczb (embeddingi) |
Wyszukiwanie | Dokładne dopasowanie (exact match) | Podobieństwo semantyczne (nearest neighbors) |
Klucz wyszukiwania | ID, tekst, warunki logiczne | Wektor zapytania (query embedding) |
Zastosowania | CRUD, raporty, e-commerce, logika biznesowa | AI/LLM, RAG, NLP, semantyczne wyszukiwanie |
Wydajność | Optymalizacja zapytań, indeksy B-Tree | Indeksy 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
Nazwa | Opis |
---|---|
FAISS | Facebook AI Similarity Search, szybki i lokalny |
Pinecone | Platforma SaaS do wyszukiwania semantycznego |
Weaviate | Baza z REST/GraphQL, AI-native, z wbudowanymi embeddingami |
Qdrant | Wydajny silnik open-source napisany w Rust |
Milvus | Skalowalna, wysokowydajna baza wektorowa |
Chroma | Lekka, prosta do użycia baza na etapie prototypowania, działa lokalnie w Pythonie |
✅ Porównanie do klasycznych baz
Czynność | Klasyczna baza | Baza wektorowa |
---|---|---|
Szukaj “analiza danych” | dopasuje frazę | znajdzie również “eksploracja danych”, “analiza statystyczna”, itp. |
Klucz główny | id , email | embedding_vector , zwykle z metadata |
Złożoność indeksu | B-tree/O(log n) | ANN – Approximate Nearest Neighbors, czasy ms |
📌 Źródła
- https://platform.openai.com/docs/guides/embeddings
- https://python.langchain.com/docs/modules/data_connection/vectorstores
- https://faiss.ai
- https://www.pinecone.io
- https://qdrant.tech
- https://weaviate.io
👽 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