నా RAG యాప్ ఎందుకు హాలూసినేట్ చేస్తూనే ఉంది మరియు నేను దానిని ఎలా సరిదిద్దాను
కొన్ని నెలల క్రితం, నేను నా RAG సపోర్ట్ బాట్ను డెమో చేశాను. మా రీఫండ్ పాలసీ 30 రోజులు అని అది ఒక సహోద్యోగికి చెప్పింది. మా అసలు పాలసీ 14 రోజులు. బాట్ ఏమాత్రం సంకోచించలేదు. తనకు తెలియదని కూడా చెప్పలేదు. పూర్తి నమ్మకంతో ఒక తప్పుడు సమాధానాన్ని సృష్టించింది.
RAG అనేది హాలూసినేషన్స్ను (hallucinations) తగ్గించాలి. కానీ నా సెటప్ వాటిని కేవలం ఒక చోటు నుండి మరో చోటుకి మార్చింది అంతే. ఈ సిస్టమ్ను డీబగ్ చేస్తున్నప్పుడు నేను ఐదు పాఠాలు నేర్చుకున్నాను.
చంక్స్ (chunks) కోసం ఫిక్స్డ్ క్యారెక్టర్ కౌంట్లను ఉపయోగించడం ఆపండి నేను స్వల్ప ఓవర్లాప్తో 1000 క్యారెక్టర్ల చంక్స్ను ఉపయోగించాను. దీనివల్ల సమస్యలు వచ్చాయి. ఒక చంక్లో తరచుగా షిప్పింగ్ నియమాలు మరియు రిటర్న్ నియమాలు కలిసిపోయి ఉండేవి. మోడల్ ఈ వేర్వేరు విభాగాలను కలిపి ఒక తప్పుడు సమాధానంగా ఇచ్చేది. పరిష్కారం: నేను సెమాంటిక్ చంకింగ్కు (semantic chunking) మారాను. నేను హెడ్డింగ్లు మరియు పారాగ్రాఫ్ల ఆధారంగా డేటాను విభజించాను. ఇది సంబంధిత సమాచారాన్ని కలిపి ఉంచుతుంది.
సిమిలారిటీ (Similarity) అంటే రిలెవెన్స్ (relevance) అని కాదు నా రిట్రీవర్ కోసైన్ సిమిలారిటీ (cosine similarity) ఆధారంగా టాప్ 3 చంక్స్ను తీసుకువచ్చింది. ఒక చంక్ సమాధానాన్ని కలిగి ఉండకుండానే, ప్రశ్నతో పోలిక ఉన్నట్లు అనిపించవచ్చు. కాంటెక్స్ట్లో ఉన్నవన్నీ నిజమని మోడల్ భావిస్తుంది. పరిష్కారం: నేను క్రాస్-ఎన్కోడర్ (cross-encoder) ఉపయోగించి రీ-ర్యాంకింగ్ (reranking) దశను జోడించాను. నేను రిట్రీవల్ స్కోర్లను (retrieval scores) కూడా లాగ్ చేయడం ప్రారంభించాను. దీనివల్ల సిస్టమ్కు సరైన సమాధానం లేనప్పుడు అది తెలుస్తుంది.
మోడల్ విఫలమైనా పర్వాలేదని దానికి చెప్పండి నా అసలు ప్రాంప్ట్ చాలా సరళంగా ఉండేది: ప్రశ్నను సమాధానం చేయడానికి కాంటెక్స్ట్ను ఉపయోగించండి. కాంటెక్స్ట్ లేనప్పుడు ఏమి చేయాలో అది మోడల్కు ఎటువంటి సూచనలు ఇవ్వలేదు. మోడల్ ఆ ఖాళీలను ఊహలతో నింపేసింది. పరిష్కారం: నేను ఒక నిర్దిష్ట సూచనను జోడించాను. ఒకవేళ సమాధానం కాంటెక్స్ట్లో లేకపోతే, "నాకు తెలియదు" అని చెప్పమని కోరాను. వెంటనే హాలూసినేషన్స్ తగ్గాయి.
రిట్రీవల్ థ్రెషోల్డ్ను (retrieval threshold) అమలు చేయండి రిట్రీవల్ విఫలమైనప్పుడు కూడా మోడల్ తన సాధారణ జ్ఞానాన్ని ఉపయోగించేది. ప్రాంప్ట్ పనిచేస్తుందని నేను ఆశించాను, కానీ కేవలం ఆశించడం అనేది ఒక వ్యూహం కాదు. పరిష్కారం: నేను ఒక కఠినమైన స్కోర్ థ్రెషోల్డ్ను సెట్ చేశాను. టాప్ రిట్రీవల్ స్కోర్ చాలా తక్కువగా ఉంటే, సిస్టమ్ ఆగిపోతుంది. మోడల్ను ఊహించనివ్వకుండా, దానికి బదులుగా ఒక ఫాల్బ్యాక్ మెసేజ్ను (fallback message) తిరిగి ఇస్తుంది.
కేవలం విజయం కోసం మాత్రమే కాకుండా, వైఫల్యాల కోసం కూడా పరీక్షించండి డాక్యుమెంట్లలో సమాధానాలు ఉన్నాయని నాకు తెలిసిన సులభమైన ప్రశ్నలను మాత్రమే నేను పరీక్షించాను. అస్పష్టమైన ప్రశ్నలను మరియు సమాచారం లేని సందర్భాలను నేను విస్మరించాను. హాలూసినేషన్స్ అటువంటి ఖాళీల్లోనే పుడతాయి. పరిష్కారం: నేను 'ట్రాప్ క్వశ్చన్స్' (trap questions) తో కూడిన ఒక ఎవాల్యుయేషన్ సెట్ను రూపొందించాను. ఇవి సిస్టమ్లో సరైన సమాధానం లేని సందర్భాలు. నేను ప్రతిసారి మార్పులు చేసినప్పుడు ఈ పరీక్షలను నిర్వహిస్తాను.
RAG హాలూసినేషన్స్ను పూర్తిగా ఆపదు. కానీ వాటిని నియంత్రించదగినవిగా చేస్తుంది. నా బాట్కు ఇంకా అన్ని విషయాలు తెలియవు. కానీ ఇప్పుడు, దానికి ఏదైనా తెలియకపోతే, అది స్పష్టంగా చెబుతుంది. అది ఆ టూల్ను ఉపయోగించదగినదిగా చేస్తుంది.
మూలం: https://dev.to/pallavi_sharma_10c1a6f1da/why-my-rag-app-kept-hallucinating-and-how-i-fixed-it-3i10