ServBay में pgvector PostgreSQL एक्सटेंशन उपयोग गाइड
pgvector PostgreSQL डेटाबेस का एक शक्तिशाली थर्ड-पार्टी एक्सटेंशन है, जो PostgreSQL में वेक्टर डेटा प्रकार और कुशल वेक्टर इंडेक्सिंग विधियाँ जोड़ता है, जैसे IVFFlat और HNSW। इससे PostgreSQL में वेक्टर स्टोरेज और सिमिलैरिटी सर्च की मूल (native) सपोर्ट मिलती है, जो AI ऐप्लिकेशन, रिकमेन्डेशन सिस्टम, इमेज रिकॉग्निशन और नेचुरल लैंग्वेज प्रोसेसिंग जैसे हाई-डायमेंशनल वेक्टर डेटा के काम के लिए बहुत उपयुक्त बनती है।
ServBay, एक इंटीग्रेटेड लोकल वेब डेवलपमेंट एनवायरनमेंट, पहले से ही PostgreSQL और pgvector एक्सटेंशन को प्री-इंस्टॉल्ड रखता है, जिससे लोकल वातावरण में वेक्टर डेटाबेस को एक्टिवेट और इस्तेमाल करना आसान हो जाता है। इस लेख में हम विस्तार से बताएंगे कि ServBay में pgvector कैसे इस्तेमाल करें।
pgvector क्या है? यह क्यों महत्वपूर्ण है?
आज के बहुत सारे आधुनिक उपयोग-केस में डेटा केवल स्ट्रक्चर्ड टेक्स्ट या नंबर्स नहीं रह गया है। खासतौर पर AI और मशीन लर्निंग के क्षेत्र में, डेटा आमतौर पर हाई-डायमेंशनल वेक्टर द्वारा प्रस्तुत होता है, जिसे "embeddings" भी कहा जाता है। ये वेक्टर डेटा के अर्थ या फ़ीचर्स को कैप्चर करते हैं — जैसे इमेज की विज़ुअल विशेषताएँ, टेक्स्ट का अर्थ, या यूज़र का पसंद।
pgvector एक्सटेंशन PostgreSQL में सीधा वेक्टर स्टोरेज और कुशल वेक्टर सिमिलैरिटी सर्च (nearest neighbor search) की सुविधा देता है। इसका मतलब है, आप आसान SQL की मदद से किसी दिए गए वेक्टर के सबसे समान डेटा आइटम खोज सकते हैं। इससे अलग किसी वेक्टर डेटाबेस रखने की जरूरत नहीं होती और आपका टेक्निकल स्टैक आसान हो जाता है।
आवश्यकताएँ
pgvector शुरू करने से पहले निम्न चीजें सुनिश्चित करें:
- आपके MacOS सिस्टम पर ServBay इंस्टॉल और रन हो रहा है।
- ServBay के "पैकेजेस" सूची में PostgreSQL पैकेज सक्षम है। यदि नहीं, तो ServBay ऐप में PostgreSQL को "enabled" स्थिति में बदलें।
ServBay के PostgreSQL में pgvector एक्सटेंशन को सक्षम करना
ServBay में pgvector एक्सटेंशन फाइल पहले से ही PostgreSQL इंस्टॉलेशन डायरेक्टरी में शामिल रहती है। आपको इसे अलग से डाउनलोड या कंपाइल करने की जरूरत नहीं है। आप जिस डेटाबेस में pgvector का प्रयोग करना चाहते हैं, बस उसमें इसे एक्टिवेट करें।
नीचे ServBay के PostgreSQL डेटाबेस में pgvector को एक्टिवेट करने के स्टेप्स हैं:
PostgreSQL डेटाबेस से कनेक्ट करें: आप
psqlकमांड लाइन टूल की मदद से ServBay के PostgreSQL से जुड़ सकते हैं। ServBay का PostgreSQL आमतौर पर लोकल कनेक्शन अलाउ करता है, डिफ़ॉल्ट यूज़रpostgresयाservbayहो सकता है, और डिफ़ॉल्ट पोर्ट5432। यदि कॉन्फ़िगरेशन अलग है, तो ServBay का डेटाबेस डॉक्युमेंटेशन देखें।टर्मिनल खोलें, और नीचे दी गई कमांड से कनेक्ट करें (यूज़रनेम और डेटाबेस नाम बदलें):
bashpsql -U servbay -d your_database_name -h localhost -p 54321-U servbay: यूज़रनेम सेट करें (servbayयाpostgres)।-d your_database_name: कनेक्ट करने वाले डेटाबेस का नाम। यदि नहीं है, तो पहले क्रिएट करें (CREATE DATABASE servbay_demo_db;)।-h localhost: लोकलहोस्ट।-p 5432: पोर्ट 5432 (ServBay का डिफ़ॉल्ट PostgreSQL पोर्ट)।
vectorएक्सटेंशन बनाएं: कनेक्ट करने के बाद,psqlप्रॉम्प्ट पर नीचे SQL कमांड रन करें:sqlCREATE EXTENSION vector;1यदि एक्सटेंशन पहले से है, यह एक नोटिस दे सकता है।
इंस्टॉलेशन वेरीफाई करें: इंस्टाल सही हुआ या नहीं, इसका पता लगाने के लिए एक्सटेंशन्स लिस्ट करें:
sql\dx1आउटपुट में
vectorनाम का एक्सटेंशन दिखाई देना चाहिए: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(ध्यान दें: वर्शन नंबर आपके ServBay में pgvector के वर्शन पर निर्भर करेगा।)
pgvector का कॉन्फ़िग और प्रयोग
एक्सटेंशन सक्षम होने के बाद, अब आप अपने डेटाबेस में वेक्टर डेटा क्रिएट और मैनेज कर सकते हैं।
वेक्टर डेटा के साथ टेबल बनाना
पहले, एक नया टेबल बनाएं जिसमें वेक्टर डेटा स्टोर होगा। pgvector का नया डेटा टाइप है VECTOR(dimensions), जहाँ dimensions वेक्टर की डायमेंशन है।
उदाहरण: 3-डायमेंशनल वेक्टर रखने वाला embeddings नाम का टेबल बनाना:
sql
CREATE TABLE embeddings (
id SERIAL PRIMARY KEY,
-- 3-डायमेंशनल वेक्टर के लिए कॉलम परिभाषित करें
vector VECTOR(3)
);1
2
3
4
5
2
3
4
5
अब कुछ वेक्टर डेटा डाल सकते हैं:
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]'); -- आगे के क्वेरी उदाहरण के लिए और डेटा डालें1
2
3
4
5
6
2
3
4
5
6
ध्यान दें: वेक्टर के लिए वैल्यू square brackets [] में होनी चाहिए, और एलिमेंट्स को comma से अलग करें।
वेक्टर इंडेक्स बनाना ताकि क्वेरी परफ़ॉर्मंस बेहतर हो
अगर टेबल में वेक्टर डेटा बहुत है, तो इंडेक्स बनाना बहुत जरूरी है ताकि सिमिलैरिटी सर्च तेज़ हो सके। pgvector IVFFlat और HNSW के तौर पर दो मुख्य इंडेक्स प्रकार सपोर्ट करता है। कौन सा इंडेक्स चुनें यह आपके डेटा, स्पीड, मेमोरी, और रिकॉल लक्ष्य पर निर्भर करता है।
- IVFFlat (इनवर्टेड फाइल इंडेक्स विथ फ्लैट कंप्रेशन): बड़े डेटा सेट जिसमें रिकॉल मामूली हो, उनके लिए उपयुक्त। जल्दी बनता है।
- HNSW (हाइरार्किकल नेविगेबल स्मॉल वर्ल्ड): अक्सर बेहतर रिकॉल और तेज क्वेरी स्पीड देता है, लेकिन इंडेक्स बनाना धीमा और मेमोरी ज्यादा।
नीचे embeddings टेबल के vector कॉलम पर IVFFlat और HNSW इंडेक्स बनाने के उदाहरण हैं:
IVFFlat इंडेक्स बनाना:
sql-- IVFFlat इंडेक्स बनाने से पहले आम तौर पर ANALYZE कमांड चलाएं ताकि सांख्यिकी जानकारी मिले ANALYZE embeddings; -- IVFFlat इंडेक्स बनाएँ -- WITH (lists = 100): लिस्ट्स की संख्या। डेटा के आकार के अनुसार सेट करें। -- ज्यादा लिस्ट्स से इंडेक्स बनना देर से, लेकिन बेहतर रिकॉल। -- सलाह: lists = sqrt(rows)। CREATE INDEX idx_ivfflat_vector ON embeddings USING ivfflat (vector) WITH (lists = 100);1
2
3
4
5
6
7
8HNSW इंडेक्स बनाना:
sql-- HNSW इंडेक्स बनाएँ -- WITH (m = 16, ef_construction = 200): HNSW के पैरामीटर्स। -- m: हर नोड में ज़्यादा edge connectivity। क्वेरी और मेमोरी को प्रभावित करता है। -- ef_construction: इंडेक्स बनाते समय सर्च का दायरा; इंडेक्स क्वॉलिटी और टाइम। -- ये पैरामीटर्स डेटा के अनुसार ट्यून करें। CREATE INDEX idx_hnsw_vector ON embeddings USING hnsw (vector) WITH (m = 16, ef_construction = 200);1
2
3
4
5
6ध्यान दें: इंडेक्स पैरामीटर्स (
lists,m,ef_construction) क्वेरी और रिकॉल को काफी प्रभावित करते हैं। सही वैल्यू चुनने के लिए अपने डेटा और क्वेरी पैटर्न समझें, और प्रयोग करें। pgvector ऑफिशियल डॉक्स में यह विस्तार से दिया है।
pgvector के साथ वेक्टर क्वेरीज
pgvector कई ऑपरेटर देता है जिससे वेक्टर के बीच डिस्टैंस और सिमिलैरिटी पता की जाती है। मुख्य ऑपरेटर:
<->: L2 डिस्टेंस (Euclidean Distance)। वेक्टर के बीच सरल दूरी।<#>: इनर प्रोडक्ट (Inner Product)। कॉसाइन सिमिलैरिटी से जुड़ा, दिशा की समानता।<=>: कॉसाइन डिस्टेंस (Cosine Distance)।1 - कॉसाइन सिमिलैरिटी। दिशा की समानता, वेक्टर की लंबाई से स्वतंत्र।
नीचे कुछ आम वेक्टर क्वेरी उदाहरण हैं:
नेरेस्ट नेबर क्वेरी (Nearest Neighbor Search)
किसी वेक्टर के सबसे नजदीकी (यानी सबसे छोटा डिस्टेंस) वेक्टर खोजिए। ORDER BY + ऑपरेटर और LIMIT का उपयोग करें।
- वेक्टर
[0.2, 0.3, 0.4]के सबसे करीब के 5 वेक्टर (L2 डिस्टेंस के अनुसार):sqlSELECT id, vector, -- क्वेरी वेक्टर के साथ L2 डिस्टेंस vector <-> '[0.2, 0.3, 0.4]' AS distance FROM embeddings ORDER BY distance -- कम डिस्टेंस = ज्यादा समान LIMIT 5;1
2
3
4
5
6
7
8
9
10
वेक्टर सिमिलैरिटी क्वेरी (Similarity Search)
नेरेस्ट नेबर जैसा ही, लेकिन सिमिलैरिटी स्कोर दिखाने पर जोर।
- वेक्टर
[0.2, 0.3, 0.4]के साथ कम कॉसाइन डिस्टेंस वाले टॉप 5 वेक्टर और उनकी दूरी दिखाएँ:sqlSELECT id, vector, -- क्वेरी वेक्टर के साथ कॉसाइन डिस्टेंस vector <=> '[0.2, 0.3, 0.4]' AS cosine_distance FROM embeddings ORDER BY cosine_distance -- कम डिस्टेंस = ज्यादा समान LIMIT 5;1
2
3
4
5
6
7
8
9
10
वेक्टर डेटा का विज़ुअलाइज़ेशन (वैकल्पिक)
हाई-डायमेंशनल वेक्टर डेटा को विज़ुअलाइज़ करना डेटा डिस्ट्रीब्यूशन और क्लस्टर्स को समझने में मदद करता है। अगर वेक्टर 2D या 3D है, तो डायरेक्ट scatter plot दिखा सकते हैं। अगर dimensions ज़्यादा हों, तो पहले उन्हें PCA या t-SNE जैसी तकनीक से 2D/3D में प्रोजेक्ट करें।
यहाँ Python और Matplotlib लाइब्रेरी से 3D वेक्टर विज़ुअलाइज़ का उदाहरण है।
Python एनवायरनमेंट तैयार करें: ServBay के बाहर या अंदर Python एनवायरनमेंट बनाएं। अगर ServBay का Python पैकेज इस्तेमाल करते हैं, तो उसे enable करें। इसके बाद PostgreSQL कनेक्शन लाइब्रेरी
psycopg2और plot लाइब्रेरीmatplotlibइंस्टॉल करें:bash# सिस्टम या स्वयं इंस्टॉल्ड Python के साथ pip install psycopg2 matplotlib # अगर ServBay के Python का प्रयोग करें: # /Applications/ServBay/पैकेज/python/bin/pip install psycopg2 matplotlib1
2
3
4
5अपनी Python path के अनुसार
pipकमांड बदलें।Python स्क्रिप्ट बनाएं: नया Python फाइल बनाएँ (जैसे
visualize_vectors.py), और नीचे का कोड लगाएँ। ServBay PostgreSQL details (dbname,user,password,host,port) अपने अनुसार बदलें.pythonimport psycopg2 import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # 3D scatter plot के लिए इम्पोर्ट करें # डेटाबेस कनेक्शन पैरामीटर (अपने ServBay सेटअप अनुसार बदलें) db_params = { "dbname": "your_database_name", # अपना database name लिखें "user": "servbay", # अपना ServBay PostgreSQL यूज़र (servbay या postgres) "password": "", # पासवर्ड दें (local में खाली रह सकता है) "host": "localhost", # आमतौर पर localhost "port": "5432" # डिफ़ॉल्ट पोर्ट 5432 } conn = None cur = None try: # PostgreSQL डेटाबेस से जुड़ें conn = psycopg2.connect(**db_params) cur = conn.cursor() # वेक्टर डेटा क्वेरी करें # psycopg2 वेक्टर कॉलम को स्ट्रिंग के रूप में पढ़ता है: '[x, y, z]' # स्ट्रिंग को मैन्युअली पार्स करें cur.execute("SELECT vector FROM embeddings") vectors_raw = cur.fetchall() # वेक्टर स्ट्रिंग से नंबर लिस्ट में कन्वर्ट करें 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("कोई वेक्टर डेटा नहीं मिला।") exit() # वेक्टर डायमेंशन निकाले (मान लेते हैं सभी 3D हैं) if any(len(v) != 3 for v in vectors): print("चेतावनी: वेक्टर डायमेंशन मेल नहीं, या 3D नहीं।") exit() x = [v[0] for v in vectors] y = [v[1] for v in vectors] z = [v[2] for v in vectors] # 3D scatter plot बनाएँ 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('3D Vector Visualization') plt.show() except psycopg2.Error as e: print(f"डेटाबेस कनेक्शन या क्वेरी में त्रुटि: {e}") except Exception as e: print(f"त्रुटि हुई: {e}") finally: # डेटाबेस कनेक्शन बंद करें 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
70स्क्रिप्ट चलाएँ: टर्मिनल में Python फाइल रन करें:
bashpython visualize_vectors.py1आपका स्क्रिप्ट PostgreSQL से वेक्टर डेटा पढ़ेगा और Matplotlib से 3D scatter plot दिखाएगा।
सामान्य प्रश्न (FAQ)
- प्रश्न: अगर
\dxआउटपुट मेंvectorएक्सटेंशन नहीं दिखता तो? उत्तर: पहले जाँचें कि आपने सही तरह सेCREATE EXTENSION vector;कमांड चलाई है और कोई error नहीं आया। यदि फिर भी नहीं है, तो पुष्टि करें कि ServBay PostgreSQL पैकेज इंस्टॉल और एक्टिव है।pgvectorकी फाइलें PostgreSQL केshare/extensionडायरेक्टरी में होनी चाहिए। जरूरत पड़े तो ServBay का PostgreSQL पैकेज फिर से इंस्टॉल या अपडेट करें। - प्रश्न: डेटाबेस कनेक्ट करते समय authentication failure हो रहा है? उत्तर: अपने
psqlया Python स्क्रिप्ट के यूज़र, पासवर्ड, होस्ट और पोर्ट को ServBay PostgreSQL के अनुसार जांचें। लोकल में आमतौर पर यूज़रservbayयाpostgresहोता है और पासवर्ड सेट नहीं होता। - प्रश्न: वेक्टर index parameters जैसे
lists,m,ef_constructionकैसे चुनें? उत्तर: ये पैरामीटर्स performance और recall में बड़ा फर्क करते हैं। सबसे बेहतर वैल्यू आपकी डेटा-साइज, डायमेंशन, क्वेरी लेटेंसी और रिकॉल लक्ष्यों पर निर्भर है। इसलिए experiment और ट्यूनिंग जरूरी है।pgvectorकी डॉक्स में अधिक गाइडेंस है।
निष्कर्ष
pgvector PostgreSQL में शक्तिशाली वेक्टर डेटाबेस क्षमता जोड़ता है, जिससे लोकल स्तर पर AI एवं वेक्टर आधारित ऐप्स बनाना आसान हो जाता है। ServBay ने इसे पहले से प्री-इंस्टॉल कर दिया है, जिससे डेवलपर को environment setup में समय नहीं देना पड़ता।
इस गाइड के अनुसार, आप ServBay के PostgreSQL में आसानी से pgvector एक्टिवेट कर सकते हैं, वेक्टर स्टोरेज के लिए टेबल बना सकते हैं, कुशल इंडेक्सिंग से क्वेरी तेज़ कर सकते हैं और अलग-अलग वेक्टर सर्च चला सकते हैं। ServBay के अन्य डेवलपमेंट टूल्स के साथ, आप अपने आधुनिक वेब ऐप्स और data-intensive प्रोजेक्ट्स को बेहतर ढंग से बना और टेस्ट कर सकते हैं।
