సున్నా నుండి RAG పైప్లైన్ను నిర్మించడం
నేను SmartQueueకి ఒక AI అసిస్టెంట్ను జోడించాలనుకున్నాను.
SmartQueue అనేది IT సపోర్ట్ టికెట్ల కోసం నేను Go భాషలో రూపొందించిన ఒక టాస్క్ క్యూ. నాకు ఒక సాధారణ (generic) AI అవసరం లేదు. ఒక సాధారణ మోడల్కు మీ నిర్దిష్ట పాస్వర్డ్ రీసెట్ నియమాలు లేదా మీ అవుటేజ్ రన్బుక్స్ (outage runbooks) గురించి తెలియదు.
నాకు Retrieval-Augmented Generation (RAG) అవసరమైంది. ఇది మొదట మీ పత్రాల నుండి వాస్తవాలను సేకరిస్తుంది. ఆ తర్వాత ఆ వాస్తవాలను మోడల్కు సందర్భం (context)గా అందిస్తుంది.
ఈ పైప్లైన్ను నిర్మించేటప్పుడు నేను నేర్చుకున్న విషయాలు ఇక్కడ ఉన్నాయి.
డిప్లాయ్మెంట్ వైఫల్యం
నా మొదటి వెర్షన్లో వెక్టర్ సెర్చ్ కోసం ChromaDBని ఉపయోగించాను. అది లోకల్గా పనిచేసింది. కానీ డిప్లాయ్మెంట్ సమయంలో విఫలమైంది.
నేను Hugging Face Spacesలో ఒకే కంటైనర్లో అన్నింటినీ నడిపాను. ఇందులో Redis, ఒక Go API, వర్కర్లు, ఒక FastAPI సర్వీస్ మరియు ChromaDB ఉన్నాయి. ఐదు ప్రాసెస్ లు పరిమిత మెమరీ మరియు CPU కోసం పోటీ పడ్డాయి. ChromaDB వల్ల స్టార్టప్ రేసెస్ (startup races) మరియు సైలెంట్ ఫెయిల్యూర్స్ (silent failures) ఏర్పడ్డాయి.
నేను ఒక నిర్ణయం తీసుకున్నాను. వెక్టర్ డేటాబేస్ను తొలగించి, దానికి బదులుగా ఒక సాధారణ BM25 సెర్చ్ను ఉపయోగించాను.
సరళమైన పరిష్కారం
కొత్త ప్రత్యామ్నాయం కేవలం 50 లైన్ల Python కోడ్ మాత్రమే. దీనికి ఎటువంటి బాహ్య ప్రాసెస్ (external process) లేదు. దీనికి నెట్వర్క్ కాల్స్ లేవు. ఇది మెమరీలో కీవర్డ్లను సరిపోల్చడానికి Okapi BM25 ఫార్ములాను ఉపయోగిస్తుంది.
దీని వల్ల కలిగే లాభనష్టాలు (trade-off) స్పష్టంగా ఉన్నాయి:
- BM25 ఖచ్చితమైన పదాల సరిపోలికపై ఆధారపడుతుంది. ఇది పర్యాయపదాలను (synonyms) గుర్తించలేదు.
- 10 చిన్న IT రన్బుక్ల విషయానికి వస్తే, ఇది పెద్ద సమస్య కాదు. వినియోగదారులు "VPN" లేదా "password reset" వంటి నిర్దిష్ట పదాలనే ఉపయోగిస్తారు.
- ఇప్పుడు ఈ సర్వీస్ ప్రతిసారీ నమ్మదగిన రీతిలో ప్రారంభమవుతుంది.
సిస్టమ్ను ట్యూన్ చేయడం
సిస్టమ్ను స్థిరంగా ఉంచడానికి నేను కొన్ని సెట్టింగ్లను ట్యూన్ చేశాను: • రిట్రీవ్ చేసిన డాక్యుమెంట్లు (k): 4. ఇది టోకెన్ పరిమితులను మించకుండా తగినంత సందర్భాన్ని అందిస్తుంది. • బాట్ టెంపరేచర్ (Bot temperature): 0.2. ట్రబుల్షూటింగ్ కోసం సృజనాత్మకత కంటే ఖచ్చితమైన సమాధానాలు అవసరం. • క్లాసిఫైయర్ టెంపరేచర్ (Classifier temperature): 0.1. ఇది JSON అవుట్పుట్ ఊహించిన విధంగా ఉండేలా చేస్తుంది. • సెషన్ హిస్టరీ: చివరి 10 టర్న్లు. ఇది ఎక్కువ మెమరీని ఉపయోగించకుండా కొనసాగింపును అందిస్తుంది. • రేట్ లిమిట్స్: నిమిషానికి 30 రిక్వెస్ట్లు. ఇది నా API కోటాను రక్షిస్తుంది.
ఉత్తమమైన డిజైన్ అంటే 'డిగ్రేడింగ్ డిజైన్'
నేను ప్రతి ఎండ్పాయింట్ను నాన్-AI ఫాల్బ్యాక్ (non-AI fallback) తో నిర్మించాను. ఒకవేళ AI సర్వీస్ పనిచేయకపోతే, సిస్టమ్ కీవర్డ్ మ్యాచింగ్ లేదా రూల్-బేస్డ్ లాజిక్ను ఉపయోగిస్తుంది. సిస్టమ్ పూర్తిగా విఫలం కాకుండా, దాని సామర్థ్యం తగ్గుతుంది (degrades).
ఇది సంక్లిష్టమైన RAG సెటప్ కాదు. ఇందులో రీ-ర్యాంకింగ్ లేదా హైబ్రిడ్ సెర్చ్ లేదు. ఇది ఒక నిర్దిష్ట స్థాయి కోసం నిర్మించబడిన చిన్న, తెలివైన సాధనం.
నేర్చుకున్న పాఠాలు:
- మీ పరిమితులకు అనుగుణంగా ఆప్టిమైజ్ చేయండి, టెక్స్ట్బుక్ సెటప్ కోసం కాదు.
- సిద్ధాంతపరమైన ఖచ్చితత్వం కంటే విశ్వసనీయత తరచుగా మెరుగ్గా ఉంటుంది.
- వందలాది పత్రాలు ఉన్నప్పుడు వెక్టర్ సెర్చ్ ఉపయోగించండి. పది పత్రాలు ఉన్నప్పుడు కీవర్డ్ సెర్చ్ ఉపయోగించండి.
ఐచ్ఛిక అభ్యాస సమూహం: https://t.me/GyaanSetuAi