30 मिनट में एक लोकल RAG चैटबॉट बनाएँ
मैंने अपने लोकल चैटबॉट में 40 पन्नों का एक API spec अपलोड किया। मैंने एक विशिष्ट एंडपॉइंट (endpoint) के लिए रेट लिमिट (rate limit) के बारे में पूछा।
बॉट ने तीन सेकंड में उत्तर दिया। उसने दस्तावेज़ के सटीक सेक्शन का हवाला दिया।
सबसे अच्छी बात? इसकी लागत $0 है। सब कुछ मेरे लैपटॉप पर .NET 8, Ollama और React का उपयोग करके चलता है। कोई भी डेटा मेरे सिस्टम से बाहर नहीं जाता।
अधिकांश ट्यूटोरियल आपको OpenAI का उपयोग करने के लिए कहते हैं। यह डेमो के लिए तो ठीक है, लेकिन वास्तविक काम के लिए विफल हो जाता है क्योंकि:
- प्राइवेसी (Privacy): आप क्लाउड ट्रेनिंग पाइपलाइन में कंपनी का संवेदनशील डेटा नहीं रखना चाहेंगे।
- लागत (Cost): LLM को बड़ी फाइलें भेजने से खर्च तेजी से बढ़ता है।
- हैलुसिनेशन (Hallucinations): मॉडल अक्सर लंबे दस्तावेज़ों के बीच का हिस्सा भूल जाते हैं।
इसका समाधान RAG (Retrieval-Augmented Generation) है। पूरी PDF भेजने के बजाय, आप केवल प्रासंगिक चंक्स (chunks) भेजते हैं।
यहाँ बताया गया है कि मैंने यह पाइपलाइन कैसे बनाई:
• टेक्स्ट एक्सट्रैक्शन (Text Extraction): मैंने PDFs से टेक्स्ट निकालने के लिए PdfPig का उपयोग किया। • चंकिंग (Chunking): मैंने टेक्स्ट को 50-शब्दों के ओवरलैप के साथ 500-शब्दों के टुकड़ों में विभाजित किया। यह ओवरलैप यह सुनिश्चित करता है कि मॉडल उन उत्तरों को न छोड़े जो दो चंक्स के बीच फैले हुए हों। • एम्बेडिंग्स (Embeddings): मैंने टेक्स्ट को वेक्टर्स में बदलने के लिए Ollama के माध्यम से nomic-embed-text मॉडल का उपयोग किया। • वेक्टर स्टोर (Vector Store): मैंने सबसे अच्छे मिलान खोजने के लिए cosine similarity का उपयोग करके एक सरल इन-मेमोरी लिस्ट बनाई। • जनरेशन (Generation): मैंने केवल मिले हुए चंक्स के आधार पर सवालों के जवाब देने के लिए llama3.2 का उपयोग किया।
निर्माण के दौरान मैंने जो तीन सबक सीखे:
- एक लंबा टाइमआउट (timeout) उपयोग करें: लोकल मॉडल्स को मेमोरी में लोड होने में समय लगता है। मैंने कोल्ड स्टार्ट (cold starts) के दौरान त्रुटियों से बचने के लिए अपने HttpClient timeout को 5 मिनट पर सेट किया।
- प्रॉम्प्ट इंजीनियरिंग (Prompt engineering) महत्वपूर्ण है: मैं मॉडल को केवल दिए गए संदर्भ (context) का उपयोग करके उत्तर देने के लिए कहता हूँ। इससे हैलुसिनेशन 80% तक कम हो जाते हैं।
- चंकिंग (Chunking) मायने रखती है: मैं कैरेक्टर्स के बजाय शब्दों के आधार पर चंकिंग करता हूँ। इससे आकार अनुमानित रहता है और मॉडल की सीमाओं के भीतर रहता है।
आप इस पूरे स्टैक को स्थानीय रूप से चला सकते हैं। यह शून्य-डॉलर बजट पर एक प्रोफेशनल-ग्रेड टूल है।
पूरा बिल्ड लॉग और कोड यहाँ देखें:
Optional learning community: https://t.me/GyaanSetuAi
