30 నిమిషాల్లో ఒక లోకల్ RAG చాట్బాట్ను నిర్మించండి
నేను నా లోకల్ చాట్బాట్కు 40 పేజీల API స్పెసిఫికేషన్ను అప్లోడ్ చేశాను. ఒక నిర్దిష్ట ఎండ్పాయింట్ (endpoint) యొక్క రేట్ లిమిట్ గురించి నేను అడిగాను.
ఆ బాట్ మూడు సెకన్లలోనే సమాధానం ఇచ్చింది. అది డాక్యుమెంట్లోని ఖచ్చితమైన సెక్షన్ను పేర్కొంది.
అన్నిటికంటే ఉత్తమమైన విషయం ఏమిటంటే? దీనికి ఖర్చు $0. .NET 8, Ollama మరియు React ఉపయోగించి అంతా నా లాప్టాప్లోనే నడుస్తుంది. నా మెషీన్ నుండి ఎటువంటి డేటా బయటకు వెళ్లదు.
చాలా ట్యుటోరియల్స్ OpenAIని ఉపయోగించమని చెబుతాయి. అది డెమోలకు పని చేస్తుంది, కానీ నిజమైన పనుల విషయంలో విఫలమవుతుంది, ఎందుకంటే:
- ప్రైవసీ (Privacy): కంపెనీకి సంబంధించిన సున్నితమైన డేటా క్లౌడ్ ట్రైనింగ్ పైప్లైన్లో ఉండాలని మీరు కోరుకోరు.
- ఖర్చు (Cost): LLMకి పెద్ద ఫైళ్లను పంపడం వల్ల ఖర్చు వేగంగా పెరుగుతుంది.
- హాలూసినేషన్స్ (Hallucinations): మోడల్స్ తరచుగా పొడవైన డాక్యుమెంట్ల మధ్య భాగాన్ని మర్చిపోతుంటాయి.
దీనికి పరిష్కారం RAG (Retrieval-Augmented Generation). మొత్తం PDFని పంపే బదులు, మీరు కేవలం సంబంధిత భాగాలుగా (chunks) మాత్రమే పంపుతారు.
నేను ఈ పైప్లైన్ను ఎలా నిర్మించానో ఇక్కడ ఉంది:
• టెక్స్ట్ ఎక్స్ట్రాక్షన్ (Text Extraction): PDFల నుండి టెక్స్ట్ను సంగ్రహించడానికి నేను PdfPigని ఉపయోగించాను. • చంకింగ్ (Chunking): నేను టెక్స్ట్ను 500 పదాల ముక్కలుగా, 50 పదాల ఓవర్లాప్తో విభజించాను. ఈ ఓవర్లాప్ వల్ల రెండు చంక్స్ల మధ్య ఉన్న సమాధానాలను మోడల్ మిస్ కాకుండా ఉంటుంది. • ఎంబెడ్డింగ్స్ (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
