30 நிமிடங்களில் ஒரு Local RAG Chatbot-ஐ உருவாக்குங்கள்
நான் எனது local chatbot-இல் 40 பக்கங்கள் கொண்ட API spec-ஐப் பதிவேற்றினேன். ஒரு குறிப்பிட்ட endpoint-க்கான rate limit பற்றி நான் கேட்டேன்.
அந்த bot மூன்று வினாடிகளில் பதிலளித்தது. ஆவணத்தின் சரியான பகுதியை அது மேற்கோள் காட்டியது.
இதில் சிறந்த விஷயம் என்ன? இதற்குச் செலவே $0. .NET 8, Ollama மற்றும் React ஆகியவற்றைப் பயன்படுத்தி அனைத்தும் எனது லேப்டாப்பிலேயே இயங்குகிறது. எந்தத் தரவும் எனது கணினியை விட்டு வெளியேறுவதில்லை.
பெரும்பாலான பயிற்சிகள் (tutorials) OpenAI-ஐப் பயன்படுத்தச் சொல்கின்றன. அது டெமோக்களுக்கு (demos) சரியாக இருக்கலாம், ஆனால் நிஜமான வேலைகளுக்கு அது தோல்வியடையும், ஏனெனில்:
- தனியுரிமை (Privacy): நிறுவனத்தின் முக்கியமான தரவுகளை (sensitive data) ஒரு cloud training pipeline-இல் வைக்க நீங்கள் விரும்பமாட்டீர்கள்.
- செலவு (Cost): ஒரு LLM-க்கு பெரிய கோப்புகளை அனுப்புவது விரைவாகச் செலவை அதிகரிக்கும்.
- மாயத்தோற்றங்கள் (Hallucinations): மாடல்கள் பெரும்பாலும் நீண்ட ஆவணங்களின் நடுப்பகுதியை மறந்துவிடுகின்றன.
இதற்கான தீர்வு RAG (Retrieval-Augmented Generation) ஆகும். முழு PDF-ஐயும் அனுப்புவதற்குப் பதிலாக, தொடர்புடைய துண்டுகளை (relevant chunks) மட்டும் நீங்கள் அனுப்பலாம்.
இந்த pipeline-ஐ நான் எவ்வாறு உருவாக்கினேன் என்பது இதோ:
• Text Extraction: PDF-களில் இருந்து உரையை எடுக்க நான் PdfPig பயன்படுத்தினேன். • Chunking: உரையை 500 வார்த்தைகள் கொண்ட துண்டுகளாகப் பிரித்தேன், அதில் 50 வார்த்தைகள் ஒன்றோடொன்று மேலெழும்பி (overlap) இருக்கும்படி செய்தேன். இந்த overlap, இரண்டு துண்டுகளுக்கு இடையில் இருக்கும் பதில்களை மாடல் தவறவிடாமல் இருப்பதை உறுதி செய்கிறது. • Embeddings: உரையை vectors-ஆக மாற்ற Ollama மூலம் nomic-embed-text மாடலைப் பயன்படுத்தினேன். • Vector Store: சிறந்த பொருத்தங்களைக் கண்டறிய cosine similarity முறையைப் பயன்படுத்தி ஒரு எளிய in-memory list-ஐ உருவாக்கினேன். • Generation: கண்டறியப்பட்ட துண்டுகளை மட்டுமே அடிப்படையாகக் கொண்டு கேள்விகளுக்குப் பதிலளிக்க llama3.2-ஐப் பயன்படுத்தினேன்.
இதை உருவாக்கும்போது நான் கற்றுக்கொண்ட மூன்று பாடங்கள்:
- நீண்ட timeout-ஐப் பயன்படுத்துங்கள்: Local மாடல்கள் மெமரியில் (memory) ஏற்றப்பட நேரம் எடுக்கும். Cold starts-ன் போது பிழைகளைத் தவிர்க்க எனது HttpClient timeout-ஐ 5 நிமிடங்களாக அமைத்தேன்.
- Prompt engineering தான் முக்கியம்: வழங்கப்பட்ட சூழலை (context) மட்டுமே பயன்படுத்தி பதிலளிக்குமாறு நான் மாடலுக்குக் கூறுகிறேன். இது hallucinations-ஐ 80% குறைக்கிறது.
- Chunking முக்கியமானது: நான் எழுத்துக்களுக்குப் (characters) பதிலாக வார்த்தைகளைக் கொண்டு chunk செய்கிறேன். இது அளவை முன்கூட்டியே கணிக்கக்கூடியதாகவும், மாடலின் வரம்பிற்குள்ளும் வைத்திருக்க உதவுகிறது.
இந்த முழு stack-ஐயும் நீங்கள் உள்ளூரிலேயே (locally) இயக்க முடியும். இது பூஜ்ஜிய பட்ஜெட்டில் ஒரு தொழில்முறைத் தரத்திலான (professional-grade) கருவியாகும்.
முழுமையான build log மற்றும் குறியீட்டை (code) இங்கே பாருங்கள்:
Optional learning community: https://t.me/GyaanSetuAi
