लार्ज लैंग्वेज मॉडल (LLMs) और उनके अनुप्रयोगों के बढ़ते चलन के साथ, इंटीग्रेशन टूल्स, LLMOps फ्रेमवर्क, और वेक्टर डेटाबेस की लोकप्रियता भी बढ़ी है। इसका कारण यह है कि LLMs के साथ काम करने का तरीका पारंपरिक मशीन लर्निंग मॉडलों से अलग होता है।
LLMs के लिए एक प्रमुख सक्षम तकनीक वेक्टर एम्बेडिंग्स हैं। कंप्यूटर सीधे टेक्स्ट को नहीं समझते, लेकिन एम्बेडिंग्स टेक्स्ट को संख्यात्मक रूप में प्रस्तुत करती हैं। उपयोगकर्ता द्वारा दिया गया सारा टेक्स्ट एम्बेडिंग्स में बदला जाता है, और इन्हीं का उपयोग प्रतिक्रियाएँ तैयार करने में होता है।
टेक्स्ट को एम्बेडिंग में बदलना समय लेने वाली प्रक्रिया है। इससे बचने के लिए हमारे पास वेक्टर डेटाबेस होते हैं जो वेक्टर एम्बेडिंग्स के कुशल भंडारण और पुनर्प्राप्ति के लिए विशेष रूप से बनाए गए हैं।
इस ट्यूटोरियल में, मैं वेक्टर स्टोर्स और Chroma DB—एक ओपन-सोर्स डेटाबेस जो एम्बेडिंग्स को सहेजने और प्रबंधित करने के लिए है—पर चलकर दिखाऊँगा। आप सीखेंगे कि दस्तावेज़ कैसे जोड़ें और हटाएँ, समानता खोज कैसे चलाएँ, और टेक्स्ट को एम्बेडिंग्स में कैसे बदलें।
छवि: लेखक द्वारा
संक्षेप में
ChromaDB एम्बेडिंग्स को सहेजने और प्राप्त करने के लिए एक ओपन-सोर्स वेक्टर डेटाबेस है—इसे pip install chromadb से इंस्टॉल करें
लोकल पर्सिस्टेंस के लिए chromadb.PersistentClient(path="./chroma_db") या इन-मेमोरी टेस्टिंग के लिए chromadb.EphemeralClient() का उपयोग करें
एक कलेक्शन (टेबल जैसा) बनाएँ, फिर वैकल्पिक मेटाडेटा और IDs के साथ add() से दस्तावेज़ जोड़ें
collection.query(query_texts=["..."], n_results=5) से सेमांटिक समानता खोज चलाएँ
कोई भी एम्बेडिंग मॉडल प्लग करें—OpenAI, HuggingFace, Google Gemini, या कस्टम फ़ंक्शन
ChromaDB का व्यापक उपयोग RAG (Retrieval-Augmented Generation) पाइपलाइंस में वेक्टर स्टोर के रूप में होता है
वेक्टर स्टोर्स क्या हैं?
वेक्टर स्टोर्स ऐसे डेटाबेस हैं जो वेक्टर एम्बेडिंग्स को कुशलतापूर्वक सहेजने और पुनः प्राप्त करने के लिए विशेष रूप से डिज़ाइन किए गए हैं। इनकी आवश्यकता इसलिए पड़ती है क्योंकि SQL जैसे पारंपरिक डेटाबेस बड़े वेक्टर डेटा को सहेजने और क्वेरी करने के लिए अनुकूलित नहीं होते।
एम्बेडिंग्स डेटा (आमतौर पर असंरचित डेटा जैसे टेक्स्ट) को एक उच्च-आयामी स्पेस में संख्यात्मक वेक्टर प्रारूप में प्रस्तुत करती हैं। पारंपरिक रिलेशनल डेटाबेस इन वेक्टर निरूपणों को सहेजने और खोजने के लिए उपयुक्त नहीं हैं।
वेक्टर स्टोर्स समानता एल्गोरिदम का उपयोग करके समान वेक्टरों का इंडेक्स बना सकते हैं और उन्हें तेज़ी से खोज सकते हैं, जिससे अनुप्रयोग किसी लक्ष्य वेक्टर क्वेरी के अनुसार संबंधित वेक्टर ढूँढ पाते हैं।
उदाहरण के लिए, किसी पर्सनलाइज़्ड चैटबॉट में उपयोगकर्ता जनरेटिव AI मॉडल के लिए एक प्रॉम्प्ट देता है। समानता खोज एल्गोरिदम का उपयोग करते हुए, मॉडल दस्तावेज़ों के संग्रह में समान टेक्स्ट खोजता है। प्राप्त जानकारी का उपयोग फिर अत्यधिक व्यक्तिगत और सटीक उत्तर तैयार करने के लिए किया जाता है। यह पुनर्प्राप्ति एम्बेडिंग और वेक्टर इंडेक्सिंग के माध्यम से संभव होती है।
Chroma DB क्या है?
Chroma DB एक ओपन-सोर्स वेक्टर स्टोर है जिसका उपयोग वेक्टर एम्बेडिंग्स को सहेजने और प्राप्त करने के लिए किया जाता है। इसका मुख्य उपयोग एम्बेडिंग्स को मेटाडेटा के साथ सहेजना है ताकि बाद में लार्ज लैंग्वेज मॉडल्स द्वारा इस्तेमाल किया जा सके। इसके अलावा, इसे टेक्स्ट डेटा पर सेमांटिक सर्च इंजन के रूप में भी उपयोग किया जा सकता है।
Chroma DB की विशेषताएँ
सरल और शक्तिशाली:
एक साधारण कमांड से इंस्टॉल करें: pip install chromadb.
Python SDK से तेज़ शुरुआत—सीमलेस इंटीग्रेशन और फास्ट सेटअप।
पूर्ण-विशेषताओं वाला:
व्यापक रिट्रीवल क्षमताएँ: वेक्टर सर्च, फुल-टेक्स्ट सर्च, डॉक्युमेंट स्टोरेज, मेटाडेटा फिल्टरिंग, और मल्टी-मोडल रिट्रीवल।
उच्च स्केलेबिलिटी: लोकल पर्सिस्टेंट स्टोरेज के लिए SQLite का उपयोग करता है और मल्टी-क्लाइंट तथा प्रोडक्शन डिप्लॉयमेंट्स के लिए क्लाइंट-सर्वर मोड सपोर्ट करता है।
मल्टीलैंग्वेज सपोर्ट:
Python, JavaScript/TypeScript, Ruby, PHP, और Java सहित लोकप्रिय भाषाओं के लिए SDK उपलब्ध।
इंटीग्रेटेड:
HuggingFace, OpenAI, Google आदि के एम्बेडिंग मॉडलों से नैटिव इंटीग्रेशन।
Langchain और LlamaIndex के साथ संगत—और अधिक टूल इंटीग्रेशन शीघ्र आ रहे हैं।
ओपन सोर्स:
Apache 2.0 लाइसेंस के अंतर्गत।
गति और सरलता:
सरलता और स्पीड पर फोकस—विश्लेषण और रिट्रीवल को कुशल बनाते हुए सहज उपयोग।
Chroma DB एक सेल्फ-होस्टेड सर्वर विकल्प प्रदान करता है। यदि आपको एक मैनेज्ड या क्लाउड-नेटिव वेक्टर डेटाबेस चाहिए, तो वैकल्पिक समाधान के रूप में हमारे Pinecone या Weaviate पर गाइड्स देखें।
सबसे पहले, आपको एक कलेक्शन बनाना होगा, जो रिलेशनल डेटाबेस में टेबल जैसा होता है। डिफ़ॉल्ट रूप से, Chroma all-MiniLM-L6-v2 का उपयोग करके टेक्स्ट को एम्बेडिंग्स में बदलता है, लेकिन आप कलेक्शन को किसी अन्य एम्बेडिंग मॉडल के लिए संशोधित कर सकते हैं।
नए बनाए गए कलेक्शन में मेटाडेटा और एक यूनिक ID के साथ टेक्स्ट दस्तावेज़ जोड़ें। आपका कलेक्शन जैसे ही टेक्स्ट प्राप्त करता है, वह इसे स्वतः एम्बेडिंग में बदल देता है।
समान दस्तावेज़ प्राप्त करने के लिए टेक्स्ट या एम्बेडिंग द्वारा कलेक्शन को क्वेरी करें। आप मेटाडेटा के आधार पर परिणामों को फ़िल्टर भी कर सकते हैं।
पूर्वापेक्षाएँ
इस ट्यूटोरियल का अनुसरण करने के लिए आपको चाहिए:
Python 3.8+ (बेहतर ChromaDB संगतता के लिए Python 3.11 अनुशंसित)
pip पैकेज मैनेजर
एक OpenAI API कुंजी (केवल एम्बेडिंग्स अनुभाग के लिए आवश्यक; कोर ChromaDB अनुभाग इसके बिना भी चलते हैं)
SQLite 3.35 या उससे ऊपर (Python 3.11 में बिल्ट-इन; यदि आप पुराने संस्करण पर हैं और समस्या आती है, तो pip install pysqlite3-binary का उपयोग करें)
Python लिस्ट्स और डिक्शनरीज़ की बुनियादी जानकारी
Chroma DB के साथ शुरुआत
इस खंड में, मैं एक वेक्टर डेटाबेस बनाऊँगा, एक कलेक्शन जोड़ूँगा, उसमें टेक्स्ट लोड करूँगा, और समानता खोज क्वेरी चलाऊँगा।
सबसे पहले, chromadb और openai इंस्टॉल करें। आपको OpenAI API कुंजी केवल एम्बेडिंग्स खंड के लिए चाहिए—नीचे दिए गए कोर ChromaDB उदाहरण इसके बिना भी काम करते हैं।
नोट: Chroma को SQLite संस्करण 3.35 या उससे ऊपर चाहिए। यदि समस्या आए, तो या तो Python 3.11 में अपग्रेड करें या chromadb के पुराने संस्करण को इंस्टॉल करें।
ChromaDB आपके उपयोग के आधार पर तीन क्लाइंट मोड प्रदान करता है:
Client
Use case
Code
EphemeralClient
इन-मेमोरी टेस्टिंग; एग्ज़िट पर डेटा खो जाता है
chromadb.EphemeralClient()
PersistentClient
लोकल फ़ाइल स्टोरेज; रीस्टार्ट के बाद भी डेटा बना रहता है
chromadb.PersistentClient(path="./chroma_db")
HttpClient
प्रोडक्शन; चल रहे ChromaDB सर्वर से कनेक्ट होता है
chromadb.HttpClient(host="localhost", port=8000)
आप टेस्टिंग के लिए chromadb.EphemeralClient() का उपयोग करके इन-मेमोरी (क्षणिक) डेटाबेस बना सकते हैं। यह डेटा को केवल मेमोरी में सहेजता है और प्रोग्राम समाप्त होने पर रीसेट हो जाता है—त्वरित प्रयोगों के लिए उपयुक्त।
इस उदाहरण में, मैं ./chroma_db डायरेक्टरी में सहेजा गया पर्सिस्टेंट डेटाबेस बनाऊँगा। पर्सिस्टेंट मोड में ChromaDB SQLite-बैक्ड स्टोरेज का उपयोग करता है—DuckDB बैकएंड को ChromaDB 0.4.0 में हटा दिया गया था।
import chromadb
client = chromadb.PersistentClient(path="./chroma_db")संचालित द्वारा
इसके बाद, हम क्लाइंट का उपयोग करके एक collection ऑब्जेक्ट बनाएँगे। यह पारंपरिक डेटाबेस में टेबल बनाने जैसा है।
collection = client.create_collection(name="Students")संचालित द्वारा
अपने कलेक्शन में टेक्स्ट जोड़ने के लिए, हम छात्र, क्लब और विश्वविद्यालय के बारे में रैंडम टेक्स्ट जनरेट करेंगे। आप ChatGPT का उपयोग कर रैंडम टेक्स्ट बना सकते हैं।
student_info ="""
Alexandra Thompson, a 19-year-old computer science sophomore with a 3.7 GPA,
is a member of the programming and chess clubs who enjoys pizza, swimming, and hiking
in her free time in hopes of working at a tech company after graduating from the University of Washington.
"""
club_info ="""
The university chess club provides an outlet for students to come together and enjoy playing
the classic strategy game of chess. Members of all skill levels are welcome, from beginners learning
the rules to experienced tournament players. The club typically meets a few times per week to play casual games,
participate in tournaments, analyze famous chess matches, and improve members' skills.
"""
university_info ="""
The University of Washington, founded in 1861 in Seattle, is a public research university
with over 45,000 students across three campuses in Seattle, Tacoma, and Bothell.
As the flagship institution of the six public universities in Washington state,
UW encompasses over 500 buildings and 20 million square feet of space,
including one of the largest library systems in the world.
"""संचालित द्वारा
अब हम add() फ़ंक्शन का उपयोग करके मेटाडेटा और यूनिक IDs के साथ टेक्स्ट डेटा जोड़ेंगे। इसके बाद, Chroma all-MiniLM-L6-v2 मॉडल को स्वतः डाउनलोड करेगा, टेक्स्ट को एम्बेडिंग्स में बदलेगा और उसे "Students" कलेक्शन में स्टोर करेगा।
समानता खोज चलाने के लिए, आप query() फ़ंक्शन का उपयोग कर प्राकृतिक भाषा में प्रश्न पूछ सकते हैं। यह क्वेरी को एम्बेडिंग में बदलेगा और समानता एल्गोरिदम से समान परिणाम लौटाएगा। हमारे मामले में यह दो समान परिणाम लौटा रहा है।
results = collection.query(
query_texts=["What is the student name?"],
n_results=2)
resultsसंचालित द्वारा
एम्बेडिंग्स
आप एम्बेडिंग सूची में से किसी भी उच्च-प्रदर्शन एम्बेडिंग मॉडल का उपयोग कर सकते हैं। आप अपने कस्टम एम्बेडिंग फ़ंक्शन भी बना सकते हैं। OpenAI के वर्तमान जनरेशन मॉडलों की विस्तृत जानकारी के लिए हमारा text-embedding-3-large गाइड देखें।
इस खंड में, मैं OpenAI के text-embedding-3-small मॉडल का उपयोग टेक्स्ट को एम्बेडिंग्स में बदलने के लिए करूँगा। यह लेगेसी text-embedding-ada-002 का OpenAI द्वारा अनुशंसित प्रतिस्थापन है—यह 5× कम लागत पर बेहतर बेंचमार्क प्रदर्शन देता है।
OpenAI एम्बेडिंग फ़ंक्शन बनाने के बाद, आप टेक्स्ट दस्तावेज़ों की सूची जोड़कर एम्बेडिंग्स जनरेट कर सकते हैं।
जानें कि OpenAI API for Text Embeddings का उपयोग कर टेक्स्ट क्लासिफ़ायर्स, सूचना पुनर्प्राप्ति सिस्टम, और सेमांटिक समानता डिटेक्टर कैसे बनाएँ।
from chromadb.utils import embedding_functions
openai_ef = embedding_functions.OpenAIEmbeddingFunction(
api_key="YOUR_OPENAI_API_KEY",
model_name="text-embedding-3-small")
students_embeddings = openai_ef([student_info, club_info, university_info])print(students_embeddings)संचालित द्वारा
[[-0.01015068031847477, 0.0070903063751757145, 0.010579396970570087, -0.04118313640356064, 0.0011583581799641252, 0.026857420802116394,....],]संचालित द्वारा
डिफ़ॉल्ट एम्बेडिंग मॉडल का उपयोग करने के बजाय, मैं पहले से जनरेट की गई एम्बेडिंग्स को सीधे एक नए कलेक्शन में लोड करूँगा।
हम get_or_create_collection() फ़ंक्शन से "Students2" नाम का नया कलेक्शन बनाएँगे। यह फ़ंक्शन create_collection() से अलग है—यह मौजूद कलेक्शन को पाता है या उसके न होने पर नया बनाता है।
अब हम अपनी नई कलेक्शन में एम्बेडिंग, टेक्स्ट दस्तावेज़, मेटाडेटा और IDs जोड़ेंगे।
एक और, और भी सरल तरीका भी है। आप कलेक्शन बनाते या एक्सेस करते समय OpenAI एम्बेडिंग फ़ंक्शन जोड़ सकते हैं। OpenAI के अलावा, आप Cohere, Google Gemini, HuggingFace, और Instructor मॉडलों का भी उपयोग कर सकते हैं।
हमारे मामले में, नए टेक्स्ट दस्तावेज़ जोड़ने पर डिफ़ॉल्ट मॉडल के बजाय OpenAI एम्बेडिंग फ़ंक्शन का उपयोग करके टेक्स्ट को एम्बेडिंग्स में बदला जाएगा।
results = collection2.query(
query_texts=["What is the student name?"],
n_results=2)
resultsसंचालित द्वारा
हमारे परिणाम बेहतर हुए हैं। अब समानता खोज क्लब के बजाय विश्वविद्यालय की जानकारी लौटा रही है। साथ ही, वेक्टरों के बीच की दूरी डिफ़ॉल्ट एम्बेडिंग मॉडल से कम है, जो अच्छा संकेत है।
क्वेरी परिणामों को फ़िल्टर करना
ChromaDB समानता खोज परिणामों को सीमित करने के लिए मेटाडेटा फ़िल्टरिंग सपोर्ट करता है। query() के अंदर where पैरामीटर में फ़िल्टर ऑपरेटर्स का उपयोग करें:
results = collection.query(
query_texts=["What is the student name?"],
n_results=2,
where={"source":"student info"}# only return documents with this metadata)# Combine multiple filters with $and / $or
results = collection.query(
query_texts=["university"],
n_results=5,
where={"$or":[{"source":"student info"},{"source":"university info"}]})संचालित द्वारा
समर्थित ऑपरेटर्स: $eq, $ne, $gt, $gte, $lt, $lte, $in, $nin, $and, $or। आप डॉक्युमेंट कंटेंट पर भी where_document={"$contains": "chess"} के साथ फ़िल्टर कर सकते हैं।
डेटा अपडेट और हटाना
बिल्कुल रिलेशनल डेटाबेस की तरह, आप कलेक्शंस से मान अपडेट या हटाकर सकते हैं। टेक्स्ट और मेटाडेटा अपडेट करने के लिए, हम रिकॉर्ड की विशेष ID और नया टेक्स्ट प्रदान करेंगे।
collection2.update(
ids=["id1"],
documents=["Kristiane Carina, a 19-year-old computer science sophomore with a 3.7 GPA"],
metadatas=[{"source":"student info"}],)संचालित द्वारा
जाँचने के लिए कि बदलाव सफल रहे हैं या नहीं, एक सरल क्वेरी चलाएँ।
results = collection2.query(
query_texts=["What is the student name?"],
n_results=2)
resultsसंचालित द्वारा
जैसा कि हम देख सकते हैं, Alexandra की जगह Kristiane मिला।
कलेक्शन से कोई रिकॉर्ड हटाने के लिए, हम delete() फ़ंक्शन का उपयोग करेंगे और यूनिक ID निर्दिष्ट करेंगे।
collection2.delete(ids =['id1'])
results = collection2.query(
query_texts=["What is the student name?"],
n_results=2)
resultsसंचालित द्वारा
छात्र जानकारी वाला टेक्स्ट हटा दिया गया है; उसकी जगह हमें अगले सर्वश्रेष्ठ परिणाम मिलते हैं।
कलेक्शन प्रबंधन
इस खंड में, मैं कलेक्शंस की गिनती, सूची, नाम बदलने और हटाने के लिए यूटिलिटी फ़ंक्शंस कवर करूँगा।
हम "vectordb" नाम का नया कलेक्शन बनाएँगे और उसमें Chroma DB चीट शीट, प्रलेखन, और JS API के बारे में जानकारी मेटाडेटा सहित जोड़ेंगे।
vector_collections = client.create_collection("vectordb")
vector_collections.add(
documents=["This is Chroma DB CheatSheet","This is Chroma DB Documentation","This document Chroma JS API Docs"],
metadatas=[{"source":"Chroma Cheatsheet"},{"source":"Chroma Doc"},{'source':'JS API Doc'}],
ids=["id1","id2","id3"])संचालित द्वारा
कलेक्शन में कितने रिकॉर्ड हैं, यह जाँचने के लिए हम count() फ़ंक्शन का उपयोग करेंगे।
{'ids':['id1','id2','id3'],'embeddings':None,'documents':['This is Chroma DB CheatSheet','This is Chroma DB Documentation','This document Chroma JS API Docs'],'metadatas':[{'source':'Chroma Cheatsheet'},{'source':'Chroma Doc'},{'source':'JS API Doc'}]}संचालित द्वारा
कलेक्शन का नाम बदलने के लिए modify() फ़ंक्शन का उपयोग करें। सभी कलेक्शन नाम देखने के लिए list_collections() का उपयोग करें।
vector_collections.modify(name="chroma_info")# list all collections
client.list_collections()संचालित द्वारा
ऐसा प्रतीत होता है कि हमने "vectordb" का नाम प्रभावी रूप से बदलकर "chroma_info" कर दिया है।
[Collection(name=Students),
Collection(name=Students2),
Collection(name=chroma_info)]संचालित द्वारा
किसी भी नए कलेक्शन तक पहुँचने के लिए, आप कलेक्शन के नाम के साथ get_collection() का उपयोग कर सकते हैं।
vector_collections_new = client.get_collection(name="chroma_info")संचालित द्वारा
हम delete_collection() क्लाइंट फ़ंक्शन का उपयोग करके कलेक्शन को हटा सकते हैं और कलेक्शन का नाम निर्दिष्ट कर सकते हैं।
client.delete_collection(name="chroma_info")
client.list_collections()संचालित द्वारा
[Collection(name=Students), Collection(name=Students2)]संचालित द्वारा
हम client.reset() का उपयोग करके पूरी डेटाबेस कलेक्शन हटा सकते हैं। हालाँकि, यह अनुशंसित नहीं है क्योंकि हटाने के बाद डेटा को पुनर्स्थापित करने का कोई तरीका नहीं है।
सबसे आम ChromaDB इंटीग्रेशनों में से एक RAG एप्लिकेशन बनाने के लिए LangChain के साथ है। यहाँ ChromaDB को वेक्टर स्टोर के रूप में उपयोग करते हुए एक न्यूनतम उदाहरण है:
from langchain_community.vectorstores import Chroma
from langchain_openai import OpenAIEmbeddings
from langchain_core.documents import Document
# Initialize embedding model and vector store
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vector_store = Chroma(
collection_name="rag_docs",
embedding_function=embeddings,
persist_directory="./chroma_db")# Add documents
docs =[
Document(page_content="ChromaDB stores vector embeddings", metadata={"source":"doc1"}),
Document(page_content="LangChain simplifies LLM application development", metadata={"source":"doc2"}),]
vector_store.add_documents(docs)# Similarity search
results = vector_store.similarity_search("vector database", k=2)for doc in results:print(doc.page_content)संचालित द्वारा
Chroma DB जैसे वेक्टर स्टोर्स लार्ज लैंग्वेज मॉडल सिस्टम्स के आवश्यक घटक बनते जा रहे हैं। वेक्टर एम्बेडिंग्स के विशेष भंडारण और कुशल रिट्रीवल के जरिए, ये LLMs को प्रासंगिक सेमांटिक जानकारी तक तेज़ पहुँच प्रदान करते हैं।
इस Chroma DB ट्यूटोरियल में, हमने कलेक्शन बनाना, दस्तावेज़ जोड़ना, टेक्स्ट को एम्बेडिंग्स में बदलना, सेमांटिक समानता के लिए क्वेरी करना, और कलेक्शंस का प्रबंधन करना—इन मूल बातों को कवर किया।
अगला स्वाभाविक कदम ChromaDB को वेक्टर स्टोर के रूप में उपयोग करते हुए Retrieval-Augmented Generation (RAG) एप्लिकेशन बनाना है। प्रोडक्शन-तैयार पाइपलाइन के लिए हमारे Building a RAG System with LangChain and FastAPI ट्यूटोरियल से शुरुआत करें, या उन्नत एजेंट-चालित रिट्रीवल वर्कफ़्लो के लिए Agentic RAG एक्सप्लोर करें। आप LlamaIndex का उपयोग करके निजी डेटा LLMs में इनजेस्ट कर सकते हैं, या पूर्ण एप्लिकेशन विकास के लिए LangChain LLM ट्यूटोरियल का अनुसरण करें।
FAQs
क्या Chroma DB गैर-टेक्स्ट डेटा, जैसे इमेज या ऑडियो, की एम्बेडिंग्स के भंडारण और रिट्रीवल को संभाल सकता है?⌄
हाँ, ChromaDB किसी भी डेटा प्रकार की एम्बेडिंग्स सहेज सकता है—सिर्फ टेक्स्ट ही नहीं। यदि आप मल्टीमॉडल मॉडल का उपयोग करके इमेज, ऑडियो या अन्य असंरचित डेटा से एम्बेडिंग्स बनाते हैं, तो आप उन्हें टेक्स्ट एम्बेडिंग्स की तरह ही सहेज और क्वेरी कर सकते हैं। अपने पूर्व-गणना किए गए एम्बेडिंग वेक्टर सीधे collection.add() में embeddings पैरामीटर के जरिए पास करें। रिट्रीवल और फ़िल्टरिंग लॉजिक एम्बेडिंग स्रोत के बावजूद समान रूप से काम करता है।
क्या Chroma DB में किसी डॉक्युमेंट का केवल मेटाडेटा एम्बेडिंग्स बदले बिना अपडेट करना संभव है?⌄
हाँ। collection.update() कॉल करते समय, आप केवल ids और metadatas पैरामीटर्स पास कर सकते हैं और documents तथा embeddings को छोड़ सकते हैं। ChromaDB एम्बेडिंग्स को दोबारा बनाए बिना इन-प्लेस मेटाडेटा अपडेट कर देगा। आप collection.upsert() भी उपयोग कर सकते हैं, जो मौजूदा डॉक्युमेंट को अपडेट करता है या उसके न होने पर उसे इन्सर्ट कर देता है।
बड़े पैमाने के डिप्लॉयमेंट्स को संभालने में Chroma DB और Pinecone की तुलना कैसी है?⌄
ChromaDB ओपन-सोर्स और सेल्फ-होस्टेड है, जिससे आपको अपने डेटा और इन्फ्रास्ट्रक्चर पर पूरा नियंत्रण मिलता है। बड़े पैमाने के लोकल या क्लाउड डिप्लॉयमेंट्स के लिए, आप ChromaDB को सर्वर मोड (HttpClient) में चला सकते हैं और इसे स्वतंत्र रूप से स्केल कर सकते हैं। इसके विपरीत, Pinecone पूरी तरह मैनेज्ड क्लाउड सर्विस है, जिसमें ऑटोमैटिक स्केलिंग और सर्वरलेस टियर शामिल हैं—इसे ऑपरेट करना सरल है, लेकिन वेंडर लॉक-इन और उपयोग-आधारित लागतें आती हैं।
यदि आप नियंत्रण चाहते हैं और SaaS लागतों से बचना चाहते हैं, तो ChromaDB एक मजबूत विकल्प है। यदि आप ज़ीरो-ऑप्स इन्फ्रास्ट्रक्चर को प्राथमिकता देते हैं, तो Pinecone बेहतर हो सकता है। तुलना के लिए हमारा Pinecone ट्यूटोरियल और Weaviate ट्यूटोरियल देखें।
क्या मैं Chroma DB में किसी अन्य मॉडल द्वारा जनरेट की गई कस्टम एम्बेडिंग्स का उपयोग कर सकता/सकती हूँ?⌄
बिलकुल। ChromaDB आपको collection.add() में embeddings पैरामीटर के जरिए पूर्व-गणना की गई एम्बेडिंग्स सीधे पास करने देता है। आप कलेक्शन बनाते समय embedding_function=your_function देकर कस्टम एम्बेडिंग फ़ंक्शन भी पास कर सकते हैं—ChromaDB जब भी आप डॉक्युमेंट जोड़ेंगे या क्वेरी करेंगे, इसे अपने-आप कॉल करेगा।
बिल्ट-इन एम्बेडिंग फ़ंक्शंस में OpenAI (text-embedding-3-small, text-embedding-3-large), HuggingFace Sentence Transformers, Cohere, और Google Gemini आदि शामिल हैं।
यदि मैंने गलती से कोई कलेक्शन डिलीट कर दिया तो क्या होगा? क्या मैं उसे रिकवर कर सकता/सकती हूँ?⌄
दुर्भाग्यवश, ChromaDB में कलेक्शन डिलीट करना स्थायी होता है। delete_collection() और reset() फ़ंक्शंस डेटा को तुरंत हटा देते हैं और कोई बिल्ट-इन अनडू नहीं है। PersistentClient के लिए, अंतर्निहित SQLite फाइलें डिस्क से डिलीट हो जाती हैं।
श्रेष्ठ अभ्यास: विनाशकारी ऑपरेशंस चलाने से पहले अपने ChromaDB डेटा डायरेक्टरी (./chroma_db/) का बैकअप लें। आप कलेक्शन डेटा को JSON या DataFrame में एक्सपोर्ट कर सकते हैं, या पहले EphemeralClient() पर ऐसे ऑपरेशंस की टेस्टिंग करें।
ChromaDB के EphemeralClient, PersistentClient, और HttpClient में क्या अंतर है?⌄
ChromaDB तीन क्लाइंट मोड प्रदान करता है: EphemeralClient() डेटा को केवल मेमोरी में सहेजता है और टेस्टिंग के लिए आदर्श है—स्क्रिप्ट समाप्त होने पर सारा डेटा खो जाता है। PersistentClient(path='./chroma_db') डेटा को डिस्क पर लिखता है ताकि रीस्टार्ट्स के बाद भी बना रहे—यह लोकल डेवलपमेंट और छोटे डिप्लॉयमेंट्स के लिए उपयुक्त है। HttpClient(host='...', port=8000) अलग से चल रहे ChromaDB सर्वर प्रोसेस से कनेक्ट होता है, जिससे मल्टी-क्लाइंट एक्सेस और प्रोडक्शन डिप्लॉयमेंट्स संभव होते हैं।
पुराना chromadb.Client(Settings(chroma_db_impl='duckdb+parquet')) पैटर्न ChromaDB 0.4.0 में हटा दिया गया है और उपयोग नहीं करना चाहिए।
मैं RAG (Retrieval-Augmented Generation) एप्लिकेशन में ChromaDB का उपयोग कैसे करूँ?⌄
RAG पाइपलाइन में, ChromaDB वेक्टर स्टोर के रूप में काम करता है जो आपके डॉक्युमेंट एम्बेडिंग्स को होल्ड करता है। वर्कफ़्लो: (1) अपने डॉक्युमेंट्स को छोटे पैसेजेज़ में चंक करें, (2) हर चंक को text-embedding-3-small जैसे मॉडल से एम्बेड करें, (3) एम्बेडिंग्स को मेटाडेटा सहित ChromaDB कलेक्शन में स्टोर करें, और (4) क्वेरी के समय, उपयोगकर्ता के प्रश्न को एम्बेड करें और collection.query() कॉल कर सबसे सेमांटिक रूप से समान चंक्स प्राप्त करें। फिर इन चंक्स को संदर्भ के रूप में LLM को पास किया जाता है ताकि आधारभूत उत्तर जेनरेट हो सके।
ChromaDB LangChain (langchain_community.vectorstores.Chroma) और LlamaIndex के साथ नैटिवली इंटीग्रेट होता है, जिससे मौजूदा RAG फ्रेमवर्क्स में जोड़ना आसान हो जाता है। पूर्ण इम्प्लीमेंटेशन के लिए हमारा Building a RAG System with LangChain and FastAPI ट्यूटोरियल देखें।
ChromaDB के EphemeralClient, PersistentClient, और HttpClient में क्या अंतर है?⌄
ChromaDB तीन क्लाइंट मोड प्रदान करता है: EphemeralClient() डेटा को केवल मेमोरी में सहेजता है और टेस्टिंग के लिए आदर्श है—स्क्रिप्ट समाप्त होने पर सारा डेटा खो जाता है। PersistentClient(path='./chroma_db') डेटा को डिस्क पर लिखता है ताकि रीस्टार्ट्स के बाद भी बना रहे—यह लोकल डेवलपमेंट और छोटे डिप्लॉयमेंट्स के लिए उपयुक्त है। HttpClient(host='...', port=8000) अलग से चल रहे ChromaDB सर्वर प्रोसेस से कनेक्ट होता है, जिससे मल्टी-क्लाइंट एक्सेस और प्रोडक्शन डिप्लॉयमेंट्स संभव होते हैं।
पुराना chromadb.Client(Settings(chroma_db_impl='duckdb+parquet')) पैटर्न ChromaDB 0.4.0 में हटा दिया गया है और उपयोग नहीं करना चाहिए।
मैं RAG (Retrieval-Augmented Generation) एप्लिकेशन में ChromaDB का उपयोग कैसे करूँ?⌄
RAG पाइपलाइन में, ChromaDB वेक्टर स्टोर के रूप में काम करता है जो आपके डॉक्युमेंट एम्बेडिंग्स को होल्ड करता है। वर्कफ़्लो: (1) अपने डॉक्युमेंट्स को छोटे पैसेजेज़ में चंक करें, (2) हर चंक को text-embedding-3-small जैसे मॉडल से एम्बेड करें, (3) एम्बेडिंग्स को मेटाडेटा सहित ChromaDB कलेक्शन में स्टोर करें, और (4) क्वेरी के समय, उपयोगकर्ता के प्रश्न को एम्बेड करें और collection.query() कॉल कर सबसे सेमांटिक रूप से समान चंक्स प्राप्त करें। फिर इन चंक्स को संदर्भ के रूप में LLM को पास किया जाता है ताकि आधारभूत उत्तर जेनरेट हो सके।
ChromaDB LangChain (langchain_community.vectorstores.Chroma) और LlamaIndex के साथ नैटिवली इंटीग्रेट होता है, जिससे मौजूदा RAG फ्रेमवर्क्स में जोड़ना आसान हो जाता है। पूर्ण इम्प्लीमेंटेशन के लिए हमारा Building a RAG System with LangChain and FastAPI ट्यूटोरियल देखें।
एक प्रमाणित डेटा साइंटिस्ट के रूप में, मैं अत्याधुनिक तकनीक का उपयोग करके नवाचारी मशीन लर्निंग अनुप्रयोग बनाने के लिए उत्साहित रहता/रहती हूँ। स्पीच रिकॉग्निशन, डेटा विश्लेषण और रिपोर्टिंग, MLOps, संवादात्मक AI और NLP में मजबूत पृष्ठभूमि के साथ, मैंने ऐसे बुद्धिमान सिस्टम विकसित करने में अपनी विशेषज्ञता निखारी है जो वास्तविक प्रभाव डाल सकें। तकनीकी दक्षता के अलावा, मैं जटिल अवधारणाओं को स्पष्ट और संक्षिप्त भाषा में प्रस्तुत करने में भी निपुण हूँ। परिणामस्वरूप, मैं डेटा साइंस पर एक मांग में रहने वाला/वाली ब्लॉगर बन गया/गई हूँ, और डेटा प्रोफेशनलों के बढ़ते समुदाय के साथ अपने अनुभव और विचार साझा करता/करती हूँ। वर्तमान में, मैं कंटेंट निर्माण और संपादन पर केंद्रित हूँ, बड़े भाषा मॉडलों के साथ काम करते हुए ऐसा प्रभावशाली और आकर्षक कंटेंट विकसित कर रहा/रही हूँ जो व्यवसायों और व्यक्तियों दोनों को अपने डेटा का अधिकतम लाभ उठाने में मदद कर सके।
लार्ज लैंग्वेज मॉडल (LLMs) और उनके अनुप्रयोगों के बढ़ते चलन के साथ, इंटीग्रेशन टूल्स, LLMOps फ्रेमवर्क, और वेक्टर डेटाबेस की लोकप्रियता भी बढ़ी है। इसका कारण यह है कि LLMs के साथ काम करने का तरीका पारंपरिक मशीन लर्निंग मॉडलों से अलग होता है।
LLMs के लिए एक प्रमुख सक्षम तकनीक वेक्टर एम्बेडिंग्स हैं। कंप्यूटर सीधे टेक्स्ट को नहीं समझते, लेकिन एम्बेडिंग्स टेक्स्ट को संख्यात्मक रूप में प्रस्तुत करती हैं। उपयोगकर्ता द्वारा दिया गया सारा टेक्स्ट एम्बेडिंग्स में बदला जाता है, और इन्हीं का उपयोग प्रतिक्रियाएँ तैयार करने में होता है।
टेक्स्ट को एम्बेडिंग में बदलना समय लेने वाली प्रक्रिया है। इससे बचने के लिए हमारे पास वेक्टर डेटाबेस होते हैं जो वेक्टर एम्बेडिंग्स के कुशल भंडारण और पुनर्प्राप्ति के लिए विशेष रूप से बनाए गए हैं।
इस ट्यूटोरियल में, मैं वेक्टर स्टोर्स और Chroma DB—एक ओपन-सोर्स डेटाबेस जो एम्बेडिंग्स को सहेजने और प्रबंधित करने के लिए है—पर चलकर दिखाऊँगा। आप सीखेंगे कि दस्तावेज़ कैसे जोड़ें और हटाएँ, समानता खोज कैसे चलाएँ, और टेक्स्ट को एम्बेडिंग्स में कैसे बदलें।
छवि: लेखक द्वारा
संक्षेप में
pip install chromadbसे इंस्टॉल करेंchromadb.PersistentClient(path="./chroma_db")या इन-मेमोरी टेस्टिंग के लिएchromadb.EphemeralClient()का उपयोग करेंadd()से दस्तावेज़ जोड़ेंcollection.query(query_texts=["..."], n_results=5)से सेमांटिक समानता खोज चलाएँवेक्टर स्टोर्स क्या हैं?
वेक्टर स्टोर्स ऐसे डेटाबेस हैं जो वेक्टर एम्बेडिंग्स को कुशलतापूर्वक सहेजने और पुनः प्राप्त करने के लिए विशेष रूप से डिज़ाइन किए गए हैं। इनकी आवश्यकता इसलिए पड़ती है क्योंकि SQL जैसे पारंपरिक डेटाबेस बड़े वेक्टर डेटा को सहेजने और क्वेरी करने के लिए अनुकूलित नहीं होते।
एम्बेडिंग्स डेटा (आमतौर पर असंरचित डेटा जैसे टेक्स्ट) को एक उच्च-आयामी स्पेस में संख्यात्मक वेक्टर प्रारूप में प्रस्तुत करती हैं। पारंपरिक रिलेशनल डेटाबेस इन वेक्टर निरूपणों को सहेजने और खोजने के लिए उपयुक्त नहीं हैं।
वेक्टर स्टोर्स समानता एल्गोरिदम का उपयोग करके समान वेक्टरों का इंडेक्स बना सकते हैं और उन्हें तेज़ी से खोज सकते हैं, जिससे अनुप्रयोग किसी लक्ष्य वेक्टर क्वेरी के अनुसार संबंधित वेक्टर ढूँढ पाते हैं।
उदाहरण के लिए, किसी पर्सनलाइज़्ड चैटबॉट में उपयोगकर्ता जनरेटिव AI मॉडल के लिए एक प्रॉम्प्ट देता है। समानता खोज एल्गोरिदम का उपयोग करते हुए, मॉडल दस्तावेज़ों के संग्रह में समान टेक्स्ट खोजता है। प्राप्त जानकारी का उपयोग फिर अत्यधिक व्यक्तिगत और सटीक उत्तर तैयार करने के लिए किया जाता है। यह पुनर्प्राप्ति एम्बेडिंग और वेक्टर इंडेक्सिंग के माध्यम से संभव होती है।
Chroma DB क्या है?
Chroma DB एक ओपन-सोर्स वेक्टर स्टोर है जिसका उपयोग वेक्टर एम्बेडिंग्स को सहेजने और प्राप्त करने के लिए किया जाता है। इसका मुख्य उपयोग एम्बेडिंग्स को मेटाडेटा के साथ सहेजना है ताकि बाद में लार्ज लैंग्वेज मॉडल्स द्वारा इस्तेमाल किया जा सके। इसके अलावा, इसे टेक्स्ट डेटा पर सेमांटिक सर्च इंजन के रूप में भी उपयोग किया जा सकता है।
Chroma DB की विशेषताएँ
pip install chromadb.Chroma DB एक सेल्फ-होस्टेड सर्वर विकल्प प्रदान करता है। यदि आपको एक मैनेज्ड या क्लाउड-नेटिव वेक्टर डेटाबेस चाहिए, तो वैकल्पिक समाधान के रूप में हमारे Pinecone या Weaviate पर गाइड्स देखें।
छवि स्रोत: Chroma
Chroma DB कैसे काम करता है?
all-MiniLM-L6-v2का उपयोग करके टेक्स्ट को एम्बेडिंग्स में बदलता है, लेकिन आप कलेक्शन को किसी अन्य एम्बेडिंग मॉडल के लिए संशोधित कर सकते हैं।पूर्वापेक्षाएँ
इस ट्यूटोरियल का अनुसरण करने के लिए आपको चाहिए:
pip install pysqlite3-binaryका उपयोग करें)Chroma DB के साथ शुरुआत
इस खंड में, मैं एक वेक्टर डेटाबेस बनाऊँगा, एक कलेक्शन जोड़ूँगा, उसमें टेक्स्ट लोड करूँगा, और समानता खोज क्वेरी चलाऊँगा।
सबसे पहले,
chromadbऔरopenaiइंस्टॉल करें। आपको OpenAI API कुंजी केवल एम्बेडिंग्स खंड के लिए चाहिए—नीचे दिए गए कोर ChromaDB उदाहरण इसके बिना भी काम करते हैं।नोट: Chroma को SQLite संस्करण 3.35 या उससे ऊपर चाहिए। यदि समस्या आए, तो या तो Python 3.11 में अपग्रेड करें या
chromadbके पुराने संस्करण को इंस्टॉल करें।क्लाइंट मोड चुनना
ChromaDB आपके उपयोग के आधार पर तीन क्लाइंट मोड प्रदान करता है:
chromadb.EphemeralClient()chromadb.PersistentClient(path="./chroma_db")chromadb.HttpClient(host="localhost", port=8000)आप टेस्टिंग के लिए
chromadb.EphemeralClient()का उपयोग करके इन-मेमोरी (क्षणिक) डेटाबेस बना सकते हैं। यह डेटा को केवल मेमोरी में सहेजता है और प्रोग्राम समाप्त होने पर रीसेट हो जाता है—त्वरित प्रयोगों के लिए उपयुक्त।इस उदाहरण में, मैं
./chroma_dbडायरेक्टरी में सहेजा गया पर्सिस्टेंट डेटाबेस बनाऊँगा। पर्सिस्टेंट मोड में ChromaDB SQLite-बैक्ड स्टोरेज का उपयोग करता है—DuckDB बैकएंड को ChromaDB 0.4.0 में हटा दिया गया था।इसके बाद, हम क्लाइंट का उपयोग करके एक
collectionऑब्जेक्ट बनाएँगे। यह पारंपरिक डेटाबेस में टेबल बनाने जैसा है।अपने कलेक्शन में टेक्स्ट जोड़ने के लिए, हम छात्र, क्लब और विश्वविद्यालय के बारे में रैंडम टेक्स्ट जनरेट करेंगे। आप ChatGPT का उपयोग कर रैंडम टेक्स्ट बना सकते हैं।
अब हम
add()फ़ंक्शन का उपयोग करके मेटाडेटा और यूनिक IDs के साथ टेक्स्ट डेटा जोड़ेंगे। इसके बाद, Chromaall-MiniLM-L6-v2मॉडल को स्वतः डाउनलोड करेगा, टेक्स्ट को एम्बेडिंग्स में बदलेगा और उसे "Students" कलेक्शन में स्टोर करेगा।समानता खोज चलाने के लिए, आप
query()फ़ंक्शन का उपयोग कर प्राकृतिक भाषा में प्रश्न पूछ सकते हैं। यह क्वेरी को एम्बेडिंग में बदलेगा और समानता एल्गोरिदम से समान परिणाम लौटाएगा। हमारे मामले में यह दो समान परिणाम लौटा रहा है।एम्बेडिंग्स
आप एम्बेडिंग सूची में से किसी भी उच्च-प्रदर्शन एम्बेडिंग मॉडल का उपयोग कर सकते हैं। आप अपने कस्टम एम्बेडिंग फ़ंक्शन भी बना सकते हैं। OpenAI के वर्तमान जनरेशन मॉडलों की विस्तृत जानकारी के लिए हमारा text-embedding-3-large गाइड देखें।
इस खंड में, मैं OpenAI के
text-embedding-3-smallमॉडल का उपयोग टेक्स्ट को एम्बेडिंग्स में बदलने के लिए करूँगा। यह लेगेसीtext-embedding-ada-002का OpenAI द्वारा अनुशंसित प्रतिस्थापन है—यह 5× कम लागत पर बेहतर बेंचमार्क प्रदर्शन देता है।OpenAI एम्बेडिंग फ़ंक्शन बनाने के बाद, आप टेक्स्ट दस्तावेज़ों की सूची जोड़कर एम्बेडिंग्स जनरेट कर सकते हैं।
जानें कि OpenAI API for Text Embeddings का उपयोग कर टेक्स्ट क्लासिफ़ायर्स, सूचना पुनर्प्राप्ति सिस्टम, और सेमांटिक समानता डिटेक्टर कैसे बनाएँ।
डिफ़ॉल्ट एम्बेडिंग मॉडल का उपयोग करने के बजाय, मैं पहले से जनरेट की गई एम्बेडिंग्स को सीधे एक नए कलेक्शन में लोड करूँगा।
get_or_create_collection()फ़ंक्शन से "Students2" नाम का नया कलेक्शन बनाएँगे। यह फ़ंक्शनcreate_collection()से अलग है—यह मौजूद कलेक्शन को पाता है या उसके न होने पर नया बनाता है।एक और, और भी सरल तरीका भी है। आप कलेक्शन बनाते या एक्सेस करते समय OpenAI एम्बेडिंग फ़ंक्शन जोड़ सकते हैं। OpenAI के अलावा, आप Cohere, Google Gemini, HuggingFace, और Instructor मॉडलों का भी उपयोग कर सकते हैं।
हमारे मामले में, नए टेक्स्ट दस्तावेज़ जोड़ने पर डिफ़ॉल्ट मॉडल के बजाय OpenAI एम्बेडिंग फ़ंक्शन का उपयोग करके टेक्स्ट को एम्बेडिंग्स में बदला जाएगा।
आइए नए कलेक्शन पर समान क्वेरी चलाकर अंतर देखें।
हमारे परिणाम बेहतर हुए हैं। अब समानता खोज क्लब के बजाय विश्वविद्यालय की जानकारी लौटा रही है। साथ ही, वेक्टरों के बीच की दूरी डिफ़ॉल्ट एम्बेडिंग मॉडल से कम है, जो अच्छा संकेत है।
क्वेरी परिणामों को फ़िल्टर करना
ChromaDB समानता खोज परिणामों को सीमित करने के लिए मेटाडेटा फ़िल्टरिंग सपोर्ट करता है।
query()के अंदरwhereपैरामीटर में फ़िल्टर ऑपरेटर्स का उपयोग करें:समर्थित ऑपरेटर्स:
$eq,$ne,$gt,$gte,$lt,$lte,$in,$nin,$and,$or। आप डॉक्युमेंट कंटेंट पर भीwhere_document={"$contains": "chess"}के साथ फ़िल्टर कर सकते हैं।डेटा अपडेट और हटाना
बिल्कुल रिलेशनल डेटाबेस की तरह, आप कलेक्शंस से मान अपडेट या हटाकर सकते हैं। टेक्स्ट और मेटाडेटा अपडेट करने के लिए, हम रिकॉर्ड की विशेष ID और नया टेक्स्ट प्रदान करेंगे।
जाँचने के लिए कि बदलाव सफल रहे हैं या नहीं, एक सरल क्वेरी चलाएँ।
जैसा कि हम देख सकते हैं, Alexandra की जगह Kristiane मिला।
कलेक्शन से कोई रिकॉर्ड हटाने के लिए, हम
delete()फ़ंक्शन का उपयोग करेंगे और यूनिक ID निर्दिष्ट करेंगे।छात्र जानकारी वाला टेक्स्ट हटा दिया गया है; उसकी जगह हमें अगले सर्वश्रेष्ठ परिणाम मिलते हैं।
कलेक्शन प्रबंधन
इस खंड में, मैं कलेक्शंस की गिनती, सूची, नाम बदलने और हटाने के लिए यूटिलिटी फ़ंक्शंस कवर करूँगा।
हम "vectordb" नाम का नया कलेक्शन बनाएँगे और उसमें Chroma DB चीट शीट, प्रलेखन, और JS API के बारे में जानकारी मेटाडेटा सहित जोड़ेंगे।
कलेक्शन में कितने रिकॉर्ड हैं, यह जाँचने के लिए हम
count()फ़ंक्शन का उपयोग करेंगे।कलेक्शन से सभी रिकॉर्ड देखने के लिए
get()फ़ंक्शन का उपयोग करें।कलेक्शन का नाम बदलने के लिए
modify()फ़ंक्शन का उपयोग करें। सभी कलेक्शन नाम देखने के लिएlist_collections()का उपयोग करें।ऐसा प्रतीत होता है कि हमने "vectordb" का नाम प्रभावी रूप से बदलकर "chroma_info" कर दिया है।
किसी भी नए कलेक्शन तक पहुँचने के लिए, आप कलेक्शन के नाम के साथ
get_collection()का उपयोग कर सकते हैं।हम
delete_collection()क्लाइंट फ़ंक्शन का उपयोग करके कलेक्शन को हटा सकते हैं और कलेक्शन का नाम निर्दिष्ट कर सकते हैं।हम
client.reset()का उपयोग करके पूरी डेटाबेस कलेक्शन हटा सकते हैं। हालाँकि, यह अनुशंसित नहीं है क्योंकि हटाने के बाद डेटा को पुनर्स्थापित करने का कोई तरीका नहीं है।LangChain के साथ ChromaDB: एक RAG उदाहरण
सबसे आम ChromaDB इंटीग्रेशनों में से एक RAG एप्लिकेशन बनाने के लिए LangChain के साथ है। यहाँ ChromaDB को वेक्टर स्टोर के रूप में उपयोग करते हुए एक न्यूनतम उदाहरण है:
FastAPI के साथ पूर्ण प्रोडक्शन-तैयार RAG पाइपलाइन के लिए हमारा Building a RAG System with LangChain and FastAPI ट्यूटोरियल देखें। DeepSeek का उपयोग करने वाले उदाहरण के लिए हमारा DeepSeek R1 RAG Chatbot with Chroma ट्यूटोरियल देखें।
निष्कर्ष
Chroma DB जैसे वेक्टर स्टोर्स लार्ज लैंग्वेज मॉडल सिस्टम्स के आवश्यक घटक बनते जा रहे हैं। वेक्टर एम्बेडिंग्स के विशेष भंडारण और कुशल रिट्रीवल के जरिए, ये LLMs को प्रासंगिक सेमांटिक जानकारी तक तेज़ पहुँच प्रदान करते हैं।
इस Chroma DB ट्यूटोरियल में, हमने कलेक्शन बनाना, दस्तावेज़ जोड़ना, टेक्स्ट को एम्बेडिंग्स में बदलना, सेमांटिक समानता के लिए क्वेरी करना, और कलेक्शंस का प्रबंधन करना—इन मूल बातों को कवर किया।
अगला स्वाभाविक कदम ChromaDB को वेक्टर स्टोर के रूप में उपयोग करते हुए Retrieval-Augmented Generation (RAG) एप्लिकेशन बनाना है। प्रोडक्शन-तैयार पाइपलाइन के लिए हमारे Building a RAG System with LangChain and FastAPI ट्यूटोरियल से शुरुआत करें, या उन्नत एजेंट-चालित रिट्रीवल वर्कफ़्लो के लिए Agentic RAG एक्सप्लोर करें। आप LlamaIndex का उपयोग करके निजी डेटा LLMs में इनजेस्ट कर सकते हैं, या पूर्ण एप्लिकेशन विकास के लिए LangChain LLM ट्यूटोरियल का अनुसरण करें।