Przewodnik po używaniu rozszerzenia pgvector PostgreSQL w ServBay
pgvector
to potężne rozszerzenie PostgreSQL typu open-source, które dodaje obsługę typów danych wektorowych wraz z wydajnymi metodami indeksowania, takimi jak IVFFlat i HNSW. Dzięki temu PostgreSQL natywnie obsługuje przechowywanie i wyszukiwanie po podobieństwie wektorów — to idealne rozwiązanie do budowy aplikacji AI, systemów rekomendacyjnych, rozpoznawania obrazów, przetwarzania języka naturalnego i innych systemów wymagających obsługi danych w postaci wielowymiarowych wektorów.
ServBay, jako zintegrowane lokalne środowisko deweloperskie Web, zawiera już zainstalowany pakiet PostgreSQL oraz rozszerzenie pgvector
, znacząco upraszczając proces uruchamiania i używania bazy danych wektorowych na lokalnym komputerze. W tym przewodniku dowiesz się, jak wykorzystać pgvector
w środowisku ServBay.
Czym jest pgvector i dlaczego jest ważny?
We współczesnych aplikacjach dane to nie tylko tekst i liczby. Rozwój sztucznej inteligencji i uczenia maszynowego sprawił, że coraz częściej dane reprezentowane są jako wielowymiarowe wektory, tzw. "embeddings". Takie wektory przechowują informację semantyczną lub cechy, np. charakterystykę obrazów, znaczenie tekstu czy preferencje użytkownika.
Rozszerzenie pgvector
umożliwia PostgreSQL bezpośrednie przechowywanie wektorów i sprawne wykonywanie zapytań wyszukujących najbliższych sąsiadów (nearest neighbor search), czyli danych najbardziej podobnych do danego wektora. Dzięki temu możesz korzystać z języka SQL, aby wyszukiwać, filtrować i analizować dane po podobieństwie, bez konieczności wdrażania osobnej bazy wektorowej — co znacznie upraszcza stos technologiczny.
Wymagania wstępne
Przed rozpoczęciem pracy z pgvector
, upewnij się, że spełniasz poniższe warunki:
- ServBay jest zainstalowany i uruchomiony na macOS.
- Na liście „Pakietów” (Packages) w ServBay masz włączony pakiet PostgreSQL. Jeśli nie jest on aktywny, znajdź PostgreSQL w interfejsie aplikacji ServBay i ustaw jego status na „Włączony”.
Aktywacja rozszerzenia pgvector w PostgreSQL ServBay
ServBay dostarcza pliki rozszerzenia pgvector
bezpośrednio w katalogu instalacyjnym PostgreSQL. Nie musisz ich samodzielnie pobierać ani kompilować – wystarczy aktywować rozszerzenie w wybranej bazie danych.
Oto jak uruchomić pgvector
w PostgreSQL skonfigurowanym w ServBay:
Połączenie z bazą danych PostgreSQL: Możesz połączyć się z instancją PostgreSQL za pomocą narzędzia
psql
. Domyślna konfiguracja ServBay zazwyczaj umożliwia połączenie lokalne, domyślnym użytkownikiem jestpostgres
lubservbay
, a port to5432
. Jeśli Twoje ustawienia są inne, sprawdź dokumentację konfiguracyjną ServBay.Otwórz Terminal i połącz się, używając poniższego polecenia (dostosuj nazwę użytkownika i bazy):
bashpsql -U servbay -d your_database_name -h localhost -p 5432
1-U servbay
: nazwa użytkownika (np.servbay
lubpostgres
)-d your_database_name
: nazwa bazy danych, do której chcesz się połączyć. Jeśli jej nie ma, utwórz ją poleceniemCREATE DATABASE servbay_demo_db;
.-h localhost
: host lokalny.-p 5432
: port domyślny PostgreSQL w ServBay.
Tworzenie rozszerzenia
vector
: Po udanym połączeniu, aktywuj rozszerzeniepgvector
poleceniem SQL:sqlCREATE EXTENSION vector;
1Jeśli rozszerzenie jest już aktywne, pojawi się informacja, że już istnieje.
Weryfikacja instalacji: Lista aktywnych rozszerzeń pozwala sprawdzić, czy
pgvector
został poprawnie zainstalowany:sql\dx
1Wśród rozszerzeń powinna pojawić się pozycja
vector
wraz z wersją.List of installed extensions Name | Version | Schema | Description ----------+---------+------------+-------------------------------------------------------------- plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language vector | 0.7.0 | public | vector data type and ivfflat and hnsw access methods (2 rows)
1
2
3
4
5
6(Uwaga: numer wersji może się różnić w zależności od integracji ServBay)
Konfiguracja i użycie pgvector
Po aktywacji rozszerzenia możesz tworzyć tabele i zarządzać danymi wektorowymi w swojej bazie PostgreSQL.
Tworzenie tabeli z danymi wektorowymi
Najpierw należy utworzyć tabelę z kolumną na wektory. pgvector
wprowadza nowy typ danych: VECTOR(dimensions)
, gdzie dimensions
to liczba wymiarów wektora.
Przykład – tabela embeddings
przechowująca 3-wymiarowe wektory:
sql
CREATE TABLE embeddings (
id SERIAL PRIMARY KEY,
-- Definicja 3-wymiarowej kolumny wektorowej
vector VECTOR(3)
);
1
2
3
4
5
2
3
4
5
Następnie można wstawić przykładowe dane wektorowe:
sql
INSERT INTO embeddings (vector) VALUES
('[0.1, 0.2, 0.3]'),
('[0.4, 0.5, 0.6]'),
('[0.7, 0.8, 0.9]'),
('[0.15, 0.25, 0.35]'),
('[0.6, 0.5, 0.4]'); -- Dodaj więcej danych dla czytelniejszych przykładów zapytań
1
2
3
4
5
6
2
3
4
5
6
Uwaga: wartości wektorów powinny być ujęte w nawiasy kwadratowe []
i oddzielone przecinkami.
Tworzenie indeksów wektorowych dla lepszej wydajności
Przy dużych wolumenach danych wektorowych indeksy są kluczowe dla efektywności zapytań podobieństwa. pgvector
oferuje dwa rodzaje indeksów: IVFFlat i HNSW. Dobór indeksu zależy od wymagań dotyczących szybkości, czasu budowy, zużycia pamięci i precyzji.
- IVFFlat (Inverted File Index z płaską kompresją): Zalecane przy dużych zbiorach, gdy można zaakceptować niewielką utratę trafności. Szybki w budowie.
- HNSW (Hierarchical Navigable Small World): Oferuje zwykle większą trafność i szybsze wyszukiwanie kosztem wolniejszego tworzenia i większego zapotrzebowania na pamięć.
Przykłady tworzenia indeksów IVFFlat i HNSW dla kolumny vector
w tabeli embeddings
:
Tworzenie indeksu IVFFlat:
sql-- Przed utworzeniem indeksu IVFFlat, dobrze jest uruchomić ANALYZE w celu zebrania statystyk ANALYZE embeddings; -- Tworzenie indeksu IVFFlat -- WITH (lists = 100): liczba list odwróconych – dopasować do rozmiaru zbioru. -- Więcej list – wolniejsze budowanie, więcej przeszukiwanych list podczas zapytań (może zwolnić, ale zwiększyć trafność). -- Zalecenie: lists = sqrt(liczby wierszy). CREATE INDEX idx_ivfflat_vector ON embeddings USING ivfflat (vector) WITH (lists = 100);
1
2
3
4
5
6
7
8Tworzenie indeksu HNSW:
sql-- Tworzenie indeksu HNSW -- WITH (m = 16, ef_construction = 200): parametry do HNSW. -- m: maksymalna liczba połączeń na węzeł — wpływa na wydajność, pojemność i jakość zapytań. -- ef_construction: zakres wyszukiwania podczas indeksowania — im wyższy, tym dłuższa budowa, większa jakość. -- Parametry te warto dostrajać w zależności od danych i wymagań. CREATE INDEX idx_hnsw_vector ON embeddings USING hnsw (vector) WITH (m = 16, ef_construction = 200);
1
2
3
4
5
6Uwaga: Parametry indeksowania (
lists
,m
,ef_construction
) istotnie wpływają na wydajność i jakość wyników. Dobierz je do własnych danych i testuj efekty. Więcej szczegółów oraz rekomendacji znajdziesz w dokumentacji pgvector.
Zapytania wektorowe z pgvector
pgvector
udostępnia operatory do obliczania odległości między wektorami, co pozwala na szybkie wyszukiwanie po podobieństwie. Najczęściej używane operatory:
<->
: Odległość L2 (euklidesowa). Mierzy liniową odległość między punktami.<#>
: Iloczyn skalarny (inner product). Ważny przy porównaniach kierunkowych.<=>
: Odległość cosinusowa (Cosine Distance). Równa1 - cosine similarity
. Określa podobieństwo kierunku, niezależnie od długości wektora.
Przykładowe zapytania:
Wyszukiwanie najbliższych sąsiadów
Wyszukiwanie wektorów najbardziej podobnych (najmniejsza odległość) do danego wektora. Warto korzystać z ORDER BY
i LIMIT
.
- Wyszukaj 5 wektorów o najmniejszej odległości L2 od
[0.2, 0.3, 0.4]
:sqlSELECT id, vector, -- Oblicz odległość L2 od wektora zapytania vector <-> '[0.2, 0.3, 0.4]' AS distance FROM embeddings ORDER BY distance -- Rosnąco (im mniejsza odległość, tym większe podobieństwo) LIMIT 5;
1
2
3
4
5
6
7
8
9
10
Zapytania o podobieństwo wektorowe
Podobnie jak obok, ale pozwala wyświetlić konkretne wartości podobieństwa (np. odległość cosinusową).
- Wyszukaj 5 wektorów o najmniejszej odległości cosinusowej od
[0.2, 0.3, 0.4]
razem z wynikami:sqlSELECT id, vector, -- Oblicz odległość cosinusową do wektora zapytania vector <=> '[0.2, 0.3, 0.4]' AS cosine_distance FROM embeddings ORDER BY cosine_distance -- Rosnąco (im mniejsza odległość, tym większe podobieństwo) LIMIT 5;
1
2
3
4
5
6
7
8
9
10
Wizualizacja wektorów (opcjonalnie)
Wizualizacja wysokowymiarowych danych ułatwia zrozumienie ich rozkładu i klasteryzacji. Wektory 2D/3D można od razu zwizualizować jako wykresy punktowe, natomiast wektory wielowymiarowe często wymagają redukcji wymiarów (PCA, t-SNE) przed projekcją do 2D/3D.
Poniżej znajdziesz prosty przykład wizualizacji 3-wymiarowych danych wektorowych w Pythonie z użyciem Matplotlib.
Przygotowanie środowiska Python: Ustaw środowisko Python — może być wewnętrzne/zewnętrzne względem ServBay. Jeśli używasz Pythona z ServBay, aktywuj odpowiedni pakiet i zainstaluj
psycopg2
orazmatplotlib
:bash# Gdy używasz domyślnego Pythona lub własnej instalacji pip install psycopg2 matplotlib # Jeśli korzystasz z Pythona w ServBay, użyj pip z odpowiedniego katalogu: # /Applications/ServBay/Packages/python/bin/pip install psycopg2 matplotlib
1
2
3
4
5Dostosuj ścieżkę do swojej instalacji i środowiska.
Stwórz skrypt Python: Utwórz plik, np.
visualize_vectors.py
, i wklej kod poniżej. Dostosuj parametry połączenia (dbname
,user
,password
,host
,port
) do własnej konfiguracji ServBay.pythonimport psycopg2 import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # Import modułu do tworzenia wykresów 3D # Parametry połączenia z bazą danych – zmień na swoje! db_params = { "dbname": "your_database_name", # Twój database name "user": "servbay", # Użytkownik (np. servbay lub postgres) "password": "", # Hasło, lokalnie może być puste "host": "localhost", # Zwykle localhost "port": "5432" # Domyślny port PostgreSQL w ServBay } conn = None cur = None try: # Połączenie z PostgreSQL conn = psycopg2.connect(**db_params) cur = conn.cursor() # Pobierz dane wektorowe # Uwaga: psycopg2 domyślnie czyta typ vector jako string '[x, y, z]' # Trzeba sparsować ręcznie lub użyć nowszej wersji pgvector z adapterem cur.execute("SELECT vector FROM embeddings") vectors_raw = cur.fetchall() # Parsowanie stringów na listy liczb vectors = [] for row in vectors_raw: vec_str = row[0].strip('[]') coords = [float(c) for c in vec_str.split(',')] vectors.append(coords) if not vectors: print("Nie znaleziono danych wektorowych.") exit() # Sprawdź zgodność wymiarów (tu zakładamy 3D) if any(len(v) != 3 for v in vectors): print("Uwaga: Niezgodne wymiary wektorów lub nie są 3-wymiarowe – nie można wyświetlić wykresu 3D.") exit() x = [v[0] for v in vectors] y = [v[1] for v in vectors] z = [v[2] for v in vectors] # Tworzenie wykresu 3D fig = plt.figure() ax = fig.add_subplot(111, projection='3d') ax.scatter(x, y, z) ax.set_xlabel('Dimension 1') ax.set_ylabel('Dimension 2') ax.set_zlabel('Dimension 3') ax.set_title('Wizualizacja wektorów 3D') plt.show() except psycopg2.Error as e: print(f"Błąd połączenia lub zapytania do bazy: {e}") except Exception as e: print(f"Wystąpił błąd: {e}") finally: # Zamknij połączenie if cur: cur.close() if conn: conn.close()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70Uruchamianie skryptu: W terminalu odpal skrypt:
bashpython visualize_vectors.py
1Skrypt połączy się z Twoją bazą PostgreSQL, pobierze dane wektorowe i wyświetli wykres 3D z użyciem Matplotlib.
FAQ (Najczęstsze pytania)
- P: Nie widzę rozszerzenia
vector
w wyniku\dx
. Co zrobić? O: Upewnij się, że wykonałeś komendęCREATE EXTENSION vector;
poprawnie i nie otrzymałeś komunikatu o błędzie. Jeśli nadal nie działa, sprawdź, czy pakiet PostgreSQL ServBay jest poprawnie zainstalowany i aktywny. Plik rozszerzeniapgvector
powinien znajdować się w katalogushare/extension
PostgreSQL. Jeśli brakuje plików, rozważ ponowną instalację lub aktualizację pakietu PostgreSQL w ServBay. - P: Co zrobić, gdy pojawia się błąd autoryzacji podczas łączenia z bazą? O: Sprawdź, czy używasz poprawnych parametrów połączenia (
psql
lub skrypt Python): użytkownik, hasło, host i port muszą zgadzać się z Twoją konfiguracją PostgreSQL w ServBay. Dla połączeń lokalnych domyślny użytkownik to zazwyczajservbay
lubpostgres
; hasło może nie być ustawione. - P: Jak dobrać parametry indeksów
lists
,m
,ef_construction
? O: Ich wpływ na wydajność i trafność jest znaczny i zależny od danych oraz wymagań. Zaleca się eksperymentować i dostrajać parametry pod konkretne zastosowanie (rozmiar zbioru, liczba wymiarów, oczekiwane opóźnienie, cel trafności). Oficjalna dokumentacja pgvector zawiera szczegółowe wskazówki i rekomendacje.
Podsumowanie
pgvector
przenosi zaawansowane możliwości baz danych wektorowych do dojrzałego, stabilnego systemu PostgreSQL, dając deweloperom wygodny sposób budowy aplikacji AI i systemów przetwarzających wektory na własnym komputerze. ServBay, oferując gotowe środowisko z preinstalowanym pgvector
, ułatwia rozpoczęcie pracy.
Korzystając z tego przewodnika, z łatwością aktywujesz pgvector
w PostgreSQL ServBay, utworzysz tabele na dane wektorowe, wykorzystasz wydajne indeksy oraz zapytasz bazę o podobieństwa. Połącz to z innymi narzędziami programistycznymi ServBay, by szybciej budować i testować nowoczesne aplikacje webowe oraz projekty wykorzystujące duże ilości danych.