ServBay में pgvector PostgreSQL एक्सटेंशन का उपयोग कैसे करें — गाइड
pgvector
PostgreSQL डेटाबेस के लिए एक शक्तिशाली थर्ड-पार्टी एक्सटेंशन है, जो PostgreSQL में वेक्टर डेटा टाइप और असरदार वेक्टर इंडेक्सिंग मेथड्स (IVFFlat और HNSW जैसे) जोड़ता है। इससे PostgreSQL में मूल रूप से वेक्टर स्टोरेज और सिमिलैरिटी सर्च संभव होता है और यह AI एप्लिकेशन, सिफारिशी सिस्टम, इमेज रिकग्निशन, प्राकृतिक भाषा प्रक्रिया एवं अन्य हाई-डायमेंशन वेक्टर डेटा से जुड़े प्रोजेक्ट्स के लिए आदर्श बन जाता है।
ServBay, एक इंटीग्रेटेड लोकल वेब डेवलपमेंट एनवायरमेंट, पहले से ही PostgreSQL और pgvector
एक्सटेंशन के साथ आता है। इससे लोकल डेवलपर के लिए वेक्टर डेटाबेस का प्रयोग बेहद आसान हो जाता है। इस लेख में हम ServBay में pgvector
का सही उपयोग विस्तार से बताएँगे।
pgvector क्या है और यह क्यों ज़रूरी है?
आजकल कई आधुनिक फ़ील्ड्स में डेटा सिर्फ पारंपरिक पाठ या संख्या नहीं रह गया है। खासकर AI और मशीन लर्निंग के चलते, डेटा अक्सर हाई-डायमेंशनल वेक्टर (“embeddings”) के रूप में दर्शाया जाता है। ये वेक्टर डेटा की गूढ़ जानकारी या फीचर्स को सहेजते हैं, जैसे कि इमेज के विजुअल फीचर्स, टेक्स्ट का अर्थ या यूज़र प्राथमिकताएँ।
pgvector
एक्सटेंशन PostgreSQL को सीधे वेक्टर स्टोर करने और असरदार वेक्टर सिमिलैरिटी (या “nearest neighbor search”) की क्षमताएँ देता है। इसका मतलब आप पारंपरिक SQL का इस्तेमाल करके अपने वेक्टर डेटा के सबसे मिलते-जुलते परिणाम आसानी से खोज सकते हैं, और आपको वेक्टर डेटा के लिए अलग सिस्टम जोड़ने की जरूरत नहीं पड़ती— जिससे आपका टेक स्टैक सरल होता है।
आवश्यकताएँ
pgvector
इस्तेमाल करने से पहले ये सुनिश्चित कर लें:
- आपने macOS पर ServBay इंस्टॉल और रन कर रखा है।
- ServBay की “Packages” लिस्ट में PostgreSQL पैकेज एक्टिवेट किया हुआ है। अगर एक्टिवेट नहीं है, तो ServBay ऐप में जाकर PostgreSQL को “Enable” कर लें।
ServBay के PostgreSQL में pgvector एक्सटेंशन चालू करें
ServBay पहले से ही PostgreSQL इंस्टॉलेशन डायरेक्टरी में pgvector
एक्सटेंशन फाइलें रखता है। आपको मैन्युअली डाउनलोड या कंपाइल करने की जरूरत नहीं, बस उस विशेष डेटाबेस में इसे चालू करें जहाँ आप इस्तेमाल करना चाहते हैं।
नीचे ServBay के PostgreSQL में pgvector
एक्टिवेट करने के स्टेप्स हैं:
PostgreSQL डेटाबेस से कनेक्ट करें:
psql
कमांड लाइन टूल से ServBay के PostgreSQL इंस्टेंस से जुड़ें। आमतौर पर लोकल कनेक्शन का डिफॉल्ट यूज़रpostgres
याservbay
और पोर्ट5432
होता है। अपनी सेटिंग्स के अनुसार एडजस्ट करें।टर्मिनल खोलें और यह कमांड चलाएँ (यूज़रनेम तथा डेटाबेस नाम अपने अनुसार बदलें):
bashpsql -U servbay -d your_database_name -h localhost -p 5432
1-U servbay
: यूज़रनेमservbay
(याpostgres
) सेट करता है।-d your_database_name
: कनेक्ट करने के लिए डेटाबेस का नाम (अगर डेटाबेस नहीं है, पहले बना सकते हैं जैसे:CREATE DATABASE servbay_demo_db;
)।-h localhost
: होस्ट सेट करता है लोकल।-p 5432
: पोर्ट सेट करता है (ServBay PostgreSQL का डिफॉल्ट पोर्ट)।
vector
एक्सटेंशन बनाएँ: कनेक्शन सफल होने के बाद,psql
प्रॉम्प्ट पर यह SQL कमांड चलाएँ:sqlCREATE EXTENSION vector;
1अगर एक्सटेंशन पहले से मौजूद है, तो एक सूचना मिल सकती है।
इंस्टॉलेशन सत्यापित करें: इंस्टॉलेशन वेरिफाई करने के लिए इंस्टॉल्ड एक्सटेंशन्स देखने के लिए:
sql\dx
1आउटपुट में आपको
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(नोट: वर्शन आपके सिस्टम में थोड़ा अलग हो सकता है।)
pgvector का कॉन्फ़िगरेशन और उपयोग
एक्सटेंशन एक्टिवेट करने के बाद आप वेक्टर डेटा को अपने टेबल्स में स्टोर और मैनेज कर सकते हैं।
वेक्टर डेटा के साथ टेबल बनाना
सबसे पहले आपको वेक्टर डेटा के लिए एक टेबल बनानी होगी। pgvector
एक नया डेटा टाइप देता है: VECTOR(dimensions)
, जहाँ dimensions
वेक्टर की डायमेंशन है।
यह उदाहरण एक embeddings
नामक टेबल बनाता है जिसमें 3-डायमेंशनल वेक्टर स्टोर होंगे:
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
नोट: वेक्टर के वैल्यूज को []
से घेरें और एलिमेंट्स कॉमा से अलग हों।
वेक्टर इंडेक्स बनाकर क्वेरी प्रदर्शन बढ़ाएँ
अगर टेबल में बहुत से वेक्टर डेटा हैं, तो असरदार सिमिलैरिटी सर्च के लिए इंडेक्स बनाना जरूरी है। pgvector
मुख्यतः दो इंडेक्स टाइप्स सपोर्ट करता है: IVFFlat और HNSW। कौन सा इंडेक्स चुनें, यह आपके यूज-केस पर निर्भर करता है (जैसे स्पीड, इंडेक्स बनावट, मेमोरी, रीकॉल आदि)।
- IVFFlat (इनवर्टेड फाइल इंडेक्स विद Flat compression): बड़े डेटा सेट के लिए उपयुक्त, जहाँ रीकॉल थोड़ा कम भी चल जाएगा। फास्ट बनता है।
- HNSW (हायरेरकिकल नेविगेबल स्मॉल वर्ल्ड): आमतौर पर अच्छा रीकॉल और फास्ट क्वेरी परफॉरमेंस, लेकिन इंडेक्स बनाने में समय और मेमोरी ज्यादा लगता है।
यहां IVFFlat और HNSW इंडेक्स बनाने के उदाहरण हैं:
IVFFlat इंडेक्स बनाएँ:
sql-- इंडेक्स से पहले ANALYZE जरूर चलाएँ ताकि आंकड़े मिल जाएँ ANALYZE embeddings; -- IVFFlat इंडेक्स बनाएँ -- WITH (lists = 100): inverted लिस्ट्स कि संख्या, डेटा साइज के अनुसार सेट करें। -- ज्यादा लिस्ट: धीमा निर्माण, वृद्धि रीकॉल -- सामान्य फॉर्मूला: lists = sqrt(रोज़) 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: अधिकतम कनेक्शन। -- 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 डिस्टेंस (ईयूक्लिडियन) — सीधा फासला।<#>
: इनर प्रोडक्ट — डाइरेक्शनल सिमिलैरिटी।<=>
: कोसाइन डिस्टेंस — दिशा की सिमिलैरिटी, वेक्टर की लम्बाई नहीं गिनती।
कुछ मुख्य क्वेरी उदाहरण:
नजदीकी वेक्टर ढूँढिए (Nearest Neighbor Search)
किसी वेक्टर से सबसे नजदीकी (मतलब डिस्टेंस सबसे कम) वेक्टर खोजिए। आमतौर पर ORDER BY
और डिस्टेंस ऑपरेटर के साथ LIMIT
यूज़ किया जाता है।
- वेक्टर
[0.2, 0.3, 0.4]
के L2 डिस्टेंस वाले टॉप 5 रिज़ल्ट: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 बनाया जा सकता है। ज्यादा डायमेंशन के लिए आम तौर पर PCA या t-SNE जैसी dimensionality reduction का उपयोग किया जाता है ताकि 2D या 3D में प्रोजेक्ट कर सकें।
यहाँ Python और Matplotlib लाइब्रेरी से 3D वेक्टर विज़ुअलाइज़ेशन का बेसिक उदाहरण है।
Python वातावरण तैयार करें: आपको या तो ServBay के बाहरी या अंदरूनी Python एनवायरमेंट में काम करना होगा। अगर आप ServBay का Python पैकेज यूज़ कर रहे हैं तो उसे एक्टिवेट कर लें। PostgreSQL कनेक्टिविटी के लिए
psycopg2
और विज़ुअलाइज़ेशन के लिएmatplotlib
इंस्टॉल करें:bash# सिस्टम के Python या अपने वर्शन का इस्तेमाल करें pip install psycopg2 matplotlib # ServBay के Python के लिए, उसके bin डायरेक्ट्री से pip चला सकते हैं # /Applications/ServBay/软件包/python/bin/pip install psycopg2 matplotlib
1
2
3
4
5अपने एनवायरमेंट के अनुसार
pip
का रास्ता बदलें।Python स्क्रिप्ट बनाएँ: एक
visualize_vectors.py
नामक फाइल बनाएँ और यह कोड डालें। कृपया अपने ServBay के PostgreSQL की डिटेल्स (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", # अपना डेटाबेस नाम लिखें "user": "servbay", # अपना PostgreSQL यूजर (आमतौर पर servbay या postgres) "password": "", # पासवर्ड (लोकल में खाली हो सकता है) "host": "localhost", # आमतौर पर localhost "port": "5432" # डिफॉल्ट पोर्ट } conn = None cur = None try: # डेटाबेस से कनेक्ट करें conn = psycopg2.connect(**db_params) cur = conn.cursor() # वेक्टर डेटा निकालें # psycopg2 आमतौर पर वेक्टर टाइप को string के रूप में लाता है, # उसे manually split करके float में बदलना होगा। cur.execute("SELECT vector FROM embeddings") vectors_raw = cur.fetchall() # वेक्टर को string से float list में कन्वर्ट करें 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() # वेक्टर के कॉर्डिनेट्स निकालें, यहाँ मान लिया गया है सभी 3-डायमेन्शन हैं if any(len(v) != 3 for v in vectors): print("चेतावनी: सभी वेक्टर्स 3-डायमेंशनल नहीं हैं, 3D visualization संभव नहीं।") 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 वेक्टर विज़ुअलाइज़ेशन') 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स्क्रिप्ट चलाएँ: टर्मिनल में यह स्क्रिप्ट चलाएँ:
bashpython visualize_vectors.py
1यह स्क्रिप्ट PostgreSQL से वेक्टर डेटा निकालकर Matplotlib से 3D scatter plot बनाएगी।
सामान्य प्रश्न (FAQ)
प्रश्न: अगर
\dx
आउटपुट मेंvector
एक्सटेंशन नहीं दिखता तो क्या करें? उत्तर: पहलेCREATE EXTENSION vector;
ठीक से चलाया या नहीं, देखें। अगर उसके बाद भी दिक्कत हो तो ServBay का PostgreSQL पैकेज प्रॉपरली इंस्टॉल किया है या नहीं देखें।pgvector
की फाइलें PostgreSQL कीshare/extension
डायरेक्ट्री में मिलनी चाहिए। अगर गुम हैं तो PostgreSQL पैकेज दोबारा इंस्टॉल या अपडेट करें।प्रश्न: कनेक्शन में authentication failed बता रहा है, अब? उत्तर:
psql
कमांड या Python स्क्रिप्ट में आपके यूजर, पासवर्ड, होस्ट, पोर्ट आदि सही है या नहीं देखें। लोकल कनेक्शन के लिए आम तौर पर यूजरservbay
याpostgres
होता है और पासवर्ड सेट न भी हो सकता है।प्रश्न: वेक्टर इंडेक्स के
lists
,m
,ef_construction
पैरामीटर कैसे चुनें? उत्तर: ये पैरामीटर आपकी क्वेरी स्पीड, रीकॉल लक्ष्य और डेटा साइज पर निर्भर करते हैं—कोई एक बेस्ट वैल्यू नहीं होती। इन्हें टेस्ट करके अपनी ज़रूरत के अनुसार ट्यून करें। pgvector ऑफिशियल डाक्युमेंटेशन में गाइडेंस मिलता है।
सारांश
pgvector
के चलते PostgreSQL अब हाई-परफॉरमेंस वेक्टर डेटाबेस की क्षमताओं के साथ, AI और वेक्टर बेस्ड एप्लिकेशन लोकली बनाना बेहद आसान हो गया है। ServBay में पहले से ही मौजूद pgvector
एक्सटेंशन के कारण डेवलपर को अलग से सेटअप करने की जरूरत नहीं पड़ती।
इस गाइड के अनुसार, आप ServBay के PostgreSQL में pgvector
चालू कर सकते हैं, वेक्टर टेबल बना सकते हैं, असरदार इंडेक्स द्वारा सर्च बढ़ा सकते हैं, तथा विविध सिमिलैरिटी क्वेरी चला सकते हैं। ServBay के अन्य डेवलपमेंट टूल्स के साथ मिलाकर, आप अपने मॉडर्न वेब एप्लिकेशन और डेटा-इंटेंसिव प्रोजेक्ट को और भी तेज़ी से बना व टेस्ट कर सकते हैं।