Pinecone के साथ शुरुआत
Pinecone इंडेक्स बनाएँ, मेटाडेटा सहित वेक्टर अपसर्ट करें, फ़िल्टर के साथ समानता क्वेरी चलाएँ और अलग-अलग डेटा संग्रहों को अलग रखने के लिए नेमस्पेस प्रबंधित करें।
Pinecone के साथ शुरुआत, CoddyKit पर AI Engineering Academy का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह AI Engineering Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। AI Engineering Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
Pinecone क्या है
Pinecone एक पूरी तरह प्रबंधित वेक्टर डेटाबेस है, जो इन्फ्रास्ट्रक्चर, विस्तार और बैकअप का प्रबंधन स्वचालित रूप से करता है। आप Python SDK के माध्यम से इससे जुड़ते हैं और API कॉल द्वारा वेक्टर व मेटाडेटा भेजते हैं। Pinecone उन्हें अपने सर्वर पर संग्रहित करता है और अरबों वेक्टर होने पर भी कम विलंबता में समानता संबंधी क्वेरी का उत्तर देता है।
यह एक निःशुल्क स्तर प्रदान करता है, जो सीखने और छोटे प्रोडक्शन कार्यभार के लिए पर्याप्त है।
Pinecone SDK इंस्टॉल करना
Pinecone क्लाइंट इंस्टॉल करें और अपनी API कुंजी से उसे प्रारंभ करें। API कुंजी को पर्यावरण चर में रखें — स्रोत फ़ाइलों में सीक्रेट कभी भी सीधे न लिखें। Pinecone class सभी संचालन का मुख्य प्रवेश-बिंदु है।
# pip install pinecone-client
import os
from pinecone import Pinecone
pc = Pinecone(api_key=os.environ['PINECONE_API_KEY'])
# List existing indexes to verify connection
existing = pc.list_indexes().names()
print('Existing indexes:', existing)Pinecone Index बनाना
Pinecone का index वह संग्रह है जिसमें आपके वेक्टर संग्रहीत होते हैं। Index बनाते समय आपको dimension (जो आपके embedding model से मेल होना चाहिए) और समानता की गणना के लिए metric निर्दिष्ट करना होगा। OpenAI embeddings के लिए dimension=1536 और metric='cosine' का उपयोग करें।
Index बनाना इडेम्पोटेंट होता है: ServerlessSpec पहले से क्षमता आवंटित किए बिना आवश्यकता पड़ने पर Index बनाता है।
from pinecone import Pinecone, ServerlessSpec
import os
pc = Pinecone(api_key=os.environ['PINECONE_API_KEY'])
index_name = 'my-rag-index'
if index_name not in pc.list_indexes().names():
pc.create_index(
name=index_name,
dimension=1536, # text-embedding-3-small dimension
metric='cosine',
spec=ServerlessSpec(
cloud='aws',
region='us-east-1'
)
)
print(f'Created index: {index_name}')
else:
print(f'Index already exists: {index_name}')
index = pc.Index(index_name)मेटाडेटा के साथ वेक्टर अपसर्ट करना
Pinecone upsert (सम्मिलित या अपडेट) संचालन का उपयोग करता है। प्रत्येक वेक्टर के लिए एक विशिष्ट id स्ट्रिंग, values (फ्लोट की सूची के रूप में embedding) और वैकल्पिक metadata (फ़िल्टर किए जा सकने वाले फ़ील्ड का dict) आवश्यक होते हैं। यदि आप पहले से मौजूद id के साथ upsert करते हैं, तो पुराना वेक्टर बदल दिया जाता है।
from openai import OpenAI
oai = OpenAI()
documents = [
{'id': 'doc-001', 'text': 'What is RAG and how does it work?', 'category': 'faq'},
{'id': 'doc-002', 'text': 'Pinecone is a managed vector database.', 'category': 'docs'},
{'id': 'doc-003', 'text': 'OpenAI embeddings have 1536 dimensions.', 'category': 'docs'}
]
texts = [d['text'] for d in documents]
resp = oai.embeddings.create(model='text-embedding-3-small', input=texts)
vectors = [
{
'id': doc['id'],
'values': resp.data[i].embedding,
'metadata': {'text': doc['text'], 'category': doc['category']}
}
for i, doc in enumerate(documents)
]
index.upsert(vectors=vectors)
print(f'Upserted {len(vectors)} vectors')Pinecone Index में क्वेरी करना
खोज करने के लिए अपनी क्वेरी का embedding बनाएँ और क्वेरी वेक्टर तथा लौटाए जाने वाले परिणामों की संख्या के लिए top_k के साथ index.query() को कॉल करें। मिलान करने वाली id और स्कोर के साथ संग्रहीत मेटाडेटा वापस पाने के लिए include_metadata=True सेट करें।
from openai import OpenAI
oai = OpenAI()
query = 'How many dimensions do OpenAI embeddings have?'
q_resp = oai.embeddings.create(model='text-embedding-3-small', input=query)
q_vec = q_resp.data[0].embedding
results = index.query(
vector=q_vec,
top_k=3,
include_metadata=True
)
for match in results['matches']:
score = match['score']
text = match['metadata']['text']
print(f'{score:.4f}: {text}')मेटाडेटा के आधार पर फ़िल्टर करना
Pinecone pre-filtering का समर्थन करता है — ANN चलाने से पहले खोज को उन वेक्टर तक सीमित करना जो किसी मेटाडेटा शर्त से मेल खाते हों। filter पैरामीटर के साथ MongoDB-शैली के ऑपरेटर का उपयोग करें: $eq, $in, $gt, $lt, $and, $or।
फ़िल्टर के प्रदर्शन को सुनिश्चित करने के लिए Index बनाते समय उन मेटाडेटा फ़ील्ड का Index हमेशा बनाएँ जिनके आधार पर आप फ़िल्टर करने की योजना बनाते हैं।
# Filter to only 'docs' category results
results = index.query(
vector=q_vec,
top_k=5,
filter={
'category': {'$eq': 'docs'}
},
include_metadata=True
)
print(f'Filtered results: {len(results["matches"])}')
for m in results['matches']:
print(f' [{m["metadata"]["category"]}] {m["metadata"]["text"][:60]}')डेटा अलगाव के लिए नेमस्पेस
Pinecone के namespaces एक ही Index को अलग-अलग पृथक खंडों में बाँटते हैं। एक नेमस्पेस में की गई क्वेरी कभी भी दूसरे नेमस्पेस के परिणाम नहीं लौटाती, इसलिए नेमस्पेस बहु-किरायेदार RAG प्रणालियों के लिए आदर्श हैं, जहाँ प्रत्येक ग्राहक को केवल अपने दस्तावेज़ों में खोज करनी चाहिए।
upsert और query दोनों एक वैकल्पिक namespace स्ट्रिंग स्वीकार करते हैं। डिफ़ॉल्ट नेमस्पेस एक खाली स्ट्रिंग होता है।
# Upsert into a specific namespace
index.upsert(
vectors=[{'id': 'doc-001', 'values': q_vec, 'metadata': {'text': 'Tenant A doc'}}],
namespace='tenant-a'
)
# Query only tenant-a's documents
results = index.query(
vector=q_vec,
top_k=5,
namespace='tenant-a',
include_metadata=True
)
print(f'Tenant-A results: {len(results["matches"])}')बड़े कॉर्पस के लिए बैच अपसर्टिंग
हज़ारों दस्तावेज़ों का Index बनाते समय, अपने वेक्टर को प्रत्येक upsert कॉल में अधिकतम 100 वेक्टर के बैच में बाँटें (Pinecone द्वारा सुझाया गया बैच आकार)। अनुरोध के लगभग 4MB पेलोड आकार की सीमा के कारण बड़े बैच आकार सीमा पार कर सकते हैं।
def batch_upsert(index, vectors, batch_size=100):
total = len(vectors)
for start in range(0, total, batch_size):
batch = vectors[start:start + batch_size]
index.upsert(vectors=batch)
print(f'Upserted {min(start + batch_size, total)}/{total}')
# Usage:
# batch_upsert(index, all_vectors, batch_size=100)Index के आँकड़े जाँचना
प्रत्येक नेमस्पेस में संग्रहीत वेक्टर की संख्या और वेक्टर की कुल संख्या जाँचने के लिए index.describe_index_stats() का उपयोग करें। इससे यह सत्यापित करने में मदद मिलती है कि upsert सफलतापूर्वक पूरा हुआ है और समय के साथ Index की वृद्धि पर निगरानी रखी जा सकती है।
stats = index.describe_index_stats()
print(f'Total vectors: {stats["total_vector_count"]}')
print(f'Namespaces:')
for ns, info in stats.get('namespaces', {}).items():
print(f' {ns!r}: {info["vector_count"]} vectors')वेक्टर हटाना और अपडेट करना
id के आधार पर विशिष्ट वेक्टर हटाने के लिए index.delete(ids=[...]) का उपयोग करें। किसी वेक्टर को अपडेट करने के लिए (उदाहरण के लिए, जब किसी दस्तावेज़ में संशोधन किया गया हो), उसी id के साथ बस upsert करें — Pinecone मौजूदा प्रविष्टि को अधिलेखित कर देगा।
किसी नेमस्पेस के सभी वेक्टर हटाने के लिए (उदाहरण के लिए, पूर्ण रिफ्रेश के बाद फिर से Index बनाने हेतु), index.delete(delete_all=True, namespace='...') का उपयोग करें।
# Delete specific vectors by id
index.delete(ids=['doc-001', 'doc-002'])
# Update a vector (upsert overwrites by id)
index.upsert(vectors=[{
'id': 'doc-003',
'values': q_vec, # new embedding
'metadata': {'text': 'Updated content.'}
}])
# Delete all vectors in a namespace
# index.delete(delete_all=True, namespace='tenant-a')Pinecone की कीमत और निःशुल्क स्तर
Pinecone 2GB संग्रहण वाला निःशुल्क सर्वरलेस स्तर प्रदान करता है, जो 1536 dimensions पर लगभग 300,000 वेक्टर के लिए पर्याप्त है। इसके बाद, सर्वरलेस मूल्य निर्धारण में उपयोग किए गए प्रत्येक रीड यूनिट और राइट यूनिट के लिए शुल्क लिया जाता है।
प्रोडक्शन कार्यभार के लिए, यह गणना करके अपनी मासिक लागत का अनुमान लगाएँ: (प्रति दिन क्वेरी × 30 × प्रति क्वेरी लागत) + (कुल वेक्टर × संग्रहण लागत)। परिवर्तनीय ट्रैफ़िक वाले कार्यभार के लिए सर्वरलेस अक्सर पॉड-आधारित योजनाओं की तुलना में अधिक किफ़ायती होता है।
त्वरित जाँच
इस पाठ में सिखाई गई AI Engineering अवधारणाओं की अपनी समझ जाँचें।
पाठ का पुनरावलोकन
इस पाठ में आपने सीखा: Pinecone Index के dimension और metric का आपके embedding model से मेल खाना आवश्यक है, upsert संचालन में एक विशिष्ट id का उपयोग होता है, इसलिए किसी दस्तावेज़ को अपडेट करने के लिए उसी id के साथ फिर से upsert करना पर्याप्त है, और namespaces बहु-किरायेदार उपयोग के मामलों के लिए एक ही Index में वेक्टर संग्रहों को अलग रखते हैं। अब हम pgvector का अध्ययन करेंगे, जो वेक्टर खोज को सीधे PostgreSQL में लाता है।
एआई शिक्षक के साथ Python सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 30
- पाठ
- 120
अक्सर पूछे जाने वाले प्रश्न
क्या “Pinecone के साथ शुरुआत” पाठ निःशुल्क है?
हाँ—“Pinecone के साथ शुरुआत” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और AI Engineering Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। AI Engineering Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“Pinecone के साथ शुरुआत” में मैं क्या सीखूँगा?
Pinecone इंडेक्स बनाएँ, मेटाडेटा सहित वेक्टर अपसर्ट करें, फ़िल्टर के साथ समानता क्वेरी चलाएँ और अलग-अलग डेटा संग्रहों को अलग रखने के लिए नेमस्पेस प्रबंधित करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ AI Engineering Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या AI Engineering Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर AI Engineering Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।
“Pinecone के साथ शुरुआत” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस AI Engineering Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर AI Engineering Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- आपको वेक्टर डेटाबेस की आवश्यकता क्यों है
- Pinecone के साथ शुरुआत
- pgvector: PostgreSQL में एम्बेडिंग
- वेक्टर स्टोर चुनना और बेंचमार्क करना