చాలా RAG ట్యుటోరియల్స్ నోట్బుక్ స్థాయిలోనే ముగిసిపోతాయి. అవి కొన్ని మెరుగుపరచబడిన PDFలను లోడ్ చేస్తాయి, ప్రతి వెయ్యి అక్షరాలకు టెక్స్ట్ను విడగొడతాయి, ఆ ముక్కలను ఒక వెక్టర్ డేటాబేస్లోకి పంపిస్తాయి మరియు దానిని ఒక ఆర్కిటెక్చర్ అని పిలుస్తాయి. శుక్రవారం మధ్యాహ్నం ఆ డెమో అద్భుతంగా నడుస్తుంది. కానీ ప్రొడక్షన్లో, అదే పైప్లైన్ నిశ్శబ్దంగా ఒక భారంగా (liability) మారుతుంది.
రిట్రీవల్ సిస్టమ్లో అసలైన అడ్డంకి (bottleneck) చాలా అరుదుగా మోడల్ లేదా ప్రాంప్ట్ వల్ల వస్తుంది. అది ఇంజెషన్ (ingestion) వల్ల వస్తుంది. ఒక RAG పైప్లైన్ దానికి అందించిన సమాచారాన్ని మాత్రమే రిట్రీవ్ చేయగలదు, మరియు ఆ ఫీడ్ అస్పష్టంగా (noisy), పాతబడినదిగా (stale), లేదా అసంపూర్తిగా ఉంటే, మోడల్ నమ్మశక్యంగా ఉండే తప్పుడు సమాచారాన్ని (confident nonsense) అందిస్తుంది. బాట్ హాలూసినేట్ (hallucinated) చేసిందని వినియోగదారులు ఫిర్యాదు చేసినప్పుడు, ఆ తప్పు తరచుగా ఎవరూ నిశితంగా పర్యవేక్షించని డేటా పైప్లైన్లో, చాలా ముందు దశల్లో (miles upstream) ఉంటుంది.
వైట్బోర్డ్ ట్రాప్ (The Whiteboard Trap)
ఆర్కిటెక్చర్ డయాగ్రామ్లు ఇంజెషన్ను "Documents → Vector DB" అని లేబుల్ చేయబడిన ఒకే ఒక బాణం గుర్తులా చూపిస్తాయి. వాస్తవంలో ఇది చాలా క్లిష్టంగా ఉంటుంది. సోర్స్ సిస్టమ్స్ ఎటువంటి నోటీసు లేకుండా మారుతుంటాయి. HTML లేఅవుట్లు రీడిజైన్ చేయబడతాయి. URLలు జనరిక్ ల్యాండింగ్ పేజీలకు రీడైరెక్ట్ అవుతాయి. ప్రారంభ HTTP రెస్పాన్స్ తర్వాత JavaScript ఫ్రేమ్వర్క్లు కంటెంట్ను మారుస్తాయి. ఇంజెషన్ను ఒకసారి చేసే సెటప్ టాస్క్గా పరిగణించడం మొదటి తప్పు. ఇది ఏదైనా ETL పైప్లైన్లాగే కఠినమైన పద్ధతిని కోరుకునే నిరంతర డేటా ఇంజనీరింగ్ సమస్య.
RAG వైఫల్యాలు సాధారణంగా ఫీడ్ వైఫల్యాలే ఎందుకు?
ఇలా ఊహించుకోండి: ఒక వినియోగదారుడు మీ అంతర్గత అసిస్టెంట్ను ప్రస్తుత రీఫండ్ పాలసీ గురించి అడుగుతారు. మోడల్ వెక్టర్ స్టోర్ నుండి టాప్ చంక్ను తీసుకుని 30 రోజుల విండో అని చెబుతుంది. కానీ అసలు పాలసీ గత త్రైమాసికంలో 60 రోజులకు మారింది. LLM తప్పుడు సమాధానాన్ని సృష్టించలేదు. అది తప్పుడు ఇన్పుట్ను నమ్మింది. రిట్రీవల్ లేయర్ ఒక పాత పేజీని అందించింది, మరియు ఎంబెడ్డింగ్ (embedding) సెమాంటికల్గా దగ్గరగా ఉన్నందున, మోడల్ దానిని గ్రౌండ్ ట్రూత్ (ground truth) గా పరిగణించింది.
ఈ విధానం నిరంతరం పునరావృతమవుతుంది. వారి కార్పస్ (corpus) నావిగేషన్ ఫుటర్లు, డూప్లికేట్ ప్రెస్ రిలీజ్లు మరియు టేబుల్స్ను సగం చేసే చంక్లతో నిండి ఉన్నప్పుడు, టీమ్లు temperature మరియు top-kలను సర్దుబాటు చేయడానికి గంటల కొద్దీ సమయాన్ని వృధా చేస్తారు. మీరు జనరేషన్ను ఆప్టిమైజ్ చేసే ముందు, మీ సిస్టమ్ దేనిని తెలుసుకోగలుగుతుందో ఆడిట్ చేయండి.
ఇంజెషన్ను దెబ్బతీసే ఏడు ట్రాప్లు
1. మొదటి రన్ ఒక అబద్ధం
మీ ప్రారంభ క్రాల్ (crawl) పై గ్రీన్ చెక్మార్క్ ఉండటం వల్ల పెద్దగా ఉపయోగం లేదు. ప్రొడక్షన్ డేటా నిరంతరం మారుతూ ఉంటుంది. డాక్యుమెంటేషన్ పేజీలు రీఫాక్టర్ చేయబడతాయి, బ్లాగ్ పర్మలింక్లు విచ్ఛిన్నమవుతాయి మరియు సైట్మ్యాప్లు నిశ్శబ్దంగా కొన్ని సెక్షన్లను తొలగిస్తాయి. పైప్లైన్ ఎటువంటి ఎర్రర్ లేకుండా పూర్తయిందని మాత్రమే మీరు ధృవీకరిస్తే, మీరు చీకటిలో బాణం వేసినట్లు అవుతుంది. మీరు అవుట్పుట్ను ధృవీకరించాలి. ఆశించిన డాక్యుమెంట్లు ఉన్నాయా, వాటి స్ట్రక్చర్ ఇంకా పార్స్ అవుతుందా మరియు ఏదైనా సోర్స్ ఫలితాలను వేరే విధంగా పేజినేట్ (paginate) చేయడం వల్ల మొత్తం టెక్స్ట్ పరిమాణం తగ్గిపోయిందా లేదా అనేది తనిఖీ చేయండి.
2. క్రాలింగ్ అంటే ఇంజెషన్ కాదు
HTMLని పొందడం సులభమైన భాగం. ఒక రా (raw) క్రాల్ ప్రతిదీ క్యాప్చర్ చేస్తుంది: కుకీ బ్యానర్లు, "Related Articles" సైడ్బార్లు, యాడ్ బ్లాక్లు మరియు ఫుటర్ కాపీరైట్ నోటీసులు. మీరు ఆ రా HTMLని అమాయకంగా చంక్ చేస్తే, ప్రతి టెక్స్ట్ ముక్కతో పాటు నావిగేషన్ మెనూ యొక్క ముక్కలు కూడా వస్తాయి. ఒక వినియోగదారు API రేట్ లిమిట్స్ గురించి అడిగినప్పుడు, రిట్రీవర్ 40 శాతం సైడ్బార్ లింక్లతో కూడిన చంక్ను చూపించవచ్చు. క్లీన్ ఎక్స్ట్రాక్షన్ (Clean extraction) చాలా ముఖ్యం. మీరు ప్రధాన కంటెంట్ ఏరియాను గుర్తించాలి, బోయిలర్ప్లేట్ (boilerplate) ను తొలగించాలి మరియు ప్రతి పేజీలోనూ పునరావృతమయ్యే ఎలిమెంట్లను తొలగించాలి. లేకపోతే మీరు నాలెడ్జ్ బేస్ను నిర్మించడం లేదు, వెబ్సైట్ క్రోమ్ (website chrome) కోసం సెర్చ్ ఇంజిన్ను నిర్మిస్తున్నారు.
3. చంకింగ్ అర్థాన్ని దెబ్బతీస్తుంది
దాదాపు ప్రతి క్విక్స్టార్ట్ గైడ్లో ఫిక్స్డ్-సైజ్ చంకింగ్ (Fixed-size chunking) డిఫాల్ట్గా ఉంటుంది, మరియు ఇది ప్రమాదకరం. కేవలం క్యారెక్టర్ కౌంట్ ఆధారంగా డాక్యుమెంట్ను విడగొడితే, మీరు టేబుల్స్ను మధ్యలోకి కత్తిరిస్తారు, నంబర్డ్ ప్రొసీజర్లో స్టెప్స్ 4 మరియు 5ని వేరు చేస్తారు మరియు బుల్లెట్ పాయింట్లను వాటి హెడ్డింగ్ల నుండి విడదీస్తారు. ధరల టేబుల్ యొక్క రెండవ సగ భాగాన్ని మాత్రమే కలిగి ఉన్న చంక్ సెమాంటికల్గా ఉపయోగపడదు. స్ట్రక్చర్-అవేర్ చంకింగ్ (Structure-aware chunking) అసలు ఫార్మాట్ను గౌరవిస్తుంది. హెడ్డింగ్ హైరార్కీని పార్స్ చేయండి. వీలైనంత వరకు టేబుల్స్ను అలాగే ఉంచండి. ఒకే H2 లేదా H3 కింద పారాగ్రాఫ్ సరిహద్దుల వద్ద విడగొట్టండి. జాబితాలు (lists) తగినంత చిన్నవిగా ఉంటే వాటిని ఒకే చంక్లో ఉంచండి. సమాన పరిమాణంలో ఉండే బ్లాక్లను సృష్టించడం లక్ష్యం కాదు. అర్థవంతమైన యూనిట్లను సృష్టించడమే లక్ష్యం.
4. ఫ్రెష్నెస్ సమస్య (The Freshness Problem)
అంతర్గత వికీ యొక్క స్టాటిక్ స్నాప్షాట్ సులభమైన పద్ధతి. లైవ్ వెబ్ నుండి నిరంతరం డేటాను సేకరించడం (ingesting) కష్టమైన పని. ఒక పేజీని చివరిసారిగా ఎప్పుడు సేకరించారు, అప్పటి నుండి అందులో మార్పులు వచ్చాయా మరియు ఆ సమాచారం ఎంత కాలం చెల్లుబాటులో ఉంటుందో మీకు తెలియాలి. పాత డేటా (Stale data) అంటే ఎప్పుడూ స్పష్టంగా కనిపించే పాత తేదీ అని కాదు. కొన్నిసార్లు ఒక పేజీ తన వచనాన్ని (text) అప్డేట్ చేస్తుంది కానీ అదే URLని కలిగి ఉంటుంది, కాబట్టి కంటెంట్ హ్యాషింగ్ (content hashing) లేకపోతే మీ సిస్టమ్ దానిని ఎప్పటికీ గుర్తించలేదు. మూలాల యొక్క మార్పుల తీవ్రత (source volatility) ఆధారంగా స్పష్టమైన రిఫ్రెష్ నియమాలను రూపొందించండి. ఒక ఫైనాన్షియల్ డేటా ఫీడ్కు ప్రతి గంటకు ఒకసారి తనిఖీలు అవసరం కావచ్చు. ఒక కంపెనీ 'అబౌట్' పేజీకి త్రైమాసిక తనిఖీలు అవసరం కావచ్చు. టైమ్స్టాంప్లను రికార్డ్ చేయండి మరియు time-to-live పరిమితులను నిర్ణయించండి, ముఖ్యంగా మీ డొమైన్ నియంత్రిత లేదా భద్రతకు సంబంధించిన మార్గదర్శకాలను కలిగి ఉన్నప్పుడు, ఎందుకంటే పాత వాస్తవాలు నిజమైన నష్టాన్ని కలిగించవచ్చు.
5. డూప్లికేట్ కాలుష్యం (Duplicate Pollution)
వెబ్సైట్లు పునరావృత సమాచారంతో నిండి ఉంటాయి. ఒకే ఉత్పత్తి వివరణ కేటగిరీ పేజీలో, ఉత్పత్తి పేజీలో మరియు ప్రమోషనల్ ల్యాండింగ్ పేజీలో కనిపిస్తుంది. ఒకే ప్రెస్ రిలీజ్ /news/, /press/, మరియు /blog/ లలో ఉంటుంది. వెక్టర్ సెర్చ్ (Vector search) ఆటోమేటిక్గా డూప్లికేట్లను తొలగించదు. మీ డేటాబేస్లో పది దాదాపు ఒకేలాంటి చంక్స్ (chunks) ఉంటే, అవి మీ top-k రిట్రీవల్లో వైవిధ్యమైన, సంబంధిత ఫలితాలను తక్కువ చేసి చూపవచ్చు. ఎంబెడ్డింగ్ (embedding) చేయడానికి ముందు మీకు కానోనికల్ ట్రాకింగ్ లేదా కంటెంట్ డూప్లికేషన్ అవసరం. రెండు చంక్స్ ఒకే విషయాన్ని చెబితే, అధికారిక మూలాన్ని ఉంచుకుని మిగిలిన కాపీలను తొలగించండి. మీ రిట్రీవర్కు పరిమిత స్లాట్లు మాత్రమే ఉంటాయి. వాటిని వృధా చేయకండి.
6. మిస్సింగ్ మెటాడేటా (Missing Metadata)
మెటాడేటా లేని వెక్టర్ డేటాబేస్ అనేది సందర్భం (context) గురించి ఎటువంటి జ్ఞాపకశక్తి లేని ఒక డెన్స్ టెక్స్ట్ సెర్చ్ ఇంజిన్ మాత్రమే. స్మార్ట్ రిట్రీవల్ అనేది ఫిల్టరింగ్ మరియు ర్యాంకింగ్ సిగ్నల్స్పై ఆధారపడి ఉంటుంది, వీటిని రా (raw) ఎంబెడ్డింగ్లు అందించలేవు. సోర్స్ URL, క్యాప్చర్ తేదీ, డాక్యుమెంట్ కేటగిరీ మరియు వెర్షన్ నంబర్ను నిల్వ చేయండి. మీరు API డాక్యుమెంటేషన్ను సేకరిస్తుంటే, వెర్షనింగ్ (versioning) చాలా ముఖ్యం. అది లేకపోతే, ఒక క్వెరీ v1 మరియు v2 స్పెసిఫికేషన్లను కలిపి ఒకే సమాధానంగా ఇవ్వవచ్చు. మీరు HR పాలసీలను సేకరిస్తుంటే, రీజియన్ లేదా డిపార్ట్మెంట్ వారీగా ట్యాగింగ్ చేయడం వల్ల ఫలితాలు మోడల్కు చేరుకోకముందే వాటిని ఫిల్టర్ చేయవచ్చు. మెటాడేటా ఒక టెక్స్ట్ డంప్ను క్రమబద్ధీకరించబడిన నాలెడ్జ్ సిస్టమ్గా మారుస్తుంది.
7. జావాస్క్రిప్ట్ గ్యాప్స్ (JavaScript Gaps)
ఆధునిక సైట్లు తమ కంటెంట్ను మొదటి HTML పేలోడ్లోనే పంపవు. అవి ఒక స్కెలిటన్ను పంపి, దానిని JavaScript కాల్స్ ద్వారా హైడ్రేట్ (hydrate) చేస్తాయి. ఒక సాధారణ HTTP రిక్వెస్ట్ కేవలం లోడింగ్ స్పిన్నర్ మరియు లేఅవుట్ షెల్ను మాత్రమే చూడగలదు. మీ పైప్లైన్ JavaScriptని అమలు చేయలేకపోతే, మీరు ఖాళీ పేజీలను లేదా పాక్షిక భాగాలను మాత్రమే సేకరిస్తారు మరియు ఏదో తప్పు జరిగిందని మీకు ఎప్పటికీ తెలియదు. హెడ్లెస్ బ్రౌజర్ (headless browser) ఉపయోగించడం రెండరింగ్ సమస్యను పరిష్కరిస్తుంది కానీ కొత్త సమస్యలను తెస్తుంది: ఎక్కువ మెమరీ వినియోగం, నెమ్మదైన త్రూపుట్ (throughput) మరియు బాట్ డిటెక్షన్ (bot detection) అడ్డంకులు. మీ ట్రేడ్-ఆఫ్స్ను జాగ్రత్తగా ఎంచుకోండి, కానీ ప్రతి సోర్స్ కోసం ఒక సాధారణ curl సరిపోతుందని అనుకోవద్దు.
ఒక ప్రాక్టికల్ ఇంగెషన్ చెక్లిస్ట్ (A Practical Ingestion Checklist)
మీరు RAG ఫీడ్ను నిర్మిస్తున్నా లేదా సమీక్షిస్తున్నా, ఇక్కడి నుండి ప్రారంభించండి:
- సోర్స్ కవరేజ్ మరియు పేజినేషన్ను ధృవీకరించండి. ఒక సైట్మ్యాప్ కేటగిరీలోని మొదటి పది ఆర్టికల్లను మాత్రమే జాబితా చేయవచ్చు. లోతుగా క్రాల్ చేసి, పేజినేటెడ్ లేదా డైనమిక్గా లోడ్ చేయబడిన కంటెంట్ నిజంగా సేకరించబడిందో లేదో తనిఖీ చేయండి.
- చంకింగ్ (chunking) చేయడానికి ముందు బాయిలర్ప్లేట్ (boilerplate) సమాచారాన్ని తొలగించండి. నావిగేషన్, ప్రకటనలు, ఫుటర్లు మరియు పునరావృతమయ్యే లీగల్ డిస్క్లైమర్లను తొలగించండి. ఒక వాక్యం ప్రతి పేజీలో కనిపిస్తే, అది అనవసరమైన నాయిస్ (noise).
- స్ట్రక్చర్-అవేర్ చంకింగ్ను ఉపయోగించండి. హెడ్డింగ్లు, బుల్లెట్ లిస్ట్లు మరియు టేబుల్లను గౌరవించండి. క్యారెక్టర్ కౌంట్ల ఆధారంగా కాకుండా, సెమాంటిక్ బౌండరీల (semantic boundaries) ఆధారంగా విభజించండి.
- రిచ్ మెటాడేటాను జోడించండి. URL, క్యాప్చర్ తేదీ, కంటెంట్ కేటగిరీ మరియు వెర్షన్ను చేర్చండి. మీ రిట్రీవల్ క్వెరీలలో ఈ ఫీల్డ్లను ఫిల్టర్ చేసేలా చేయండి.
- డేటా వోలటాలిటీ ఆధారంగా రిఫ్రెష్ ఫ్రీక్వెన్సీలను నిర్ణయించండి. తరచుగా మారే సోర్స్లకు తరచుగా రీ-క్రాల్స్ అవసరం. స్టాటిక్ ఆర్కైవ్లకు అవసరం లేదు.
- కేవలం జాబ్ స్టేటస్ను మాత్రమే కాకుండా, కార్పస్ (corpus)ను కూడా పర్యవేక్షించండి. ఒక పైప్లైన్ తప్పుడు సమాచారాన్ని (garbage) ఉత్పత్తి చేస్తూనే కోడ్ జీరోతో ముగియవచ్చు. స్టోర్ చేయబడిన చంక్స్ యొక్క నమూనాలను డ్రిఫ్ట్ మరియు నాణ్యత కోసం క్రమబద్ధంగా ఆడిట్ చేయండి.
- వెర్షనింగ్ మరియు డిలీషన్ల కోసం నియమాలను నిర్వచించండి. ఒక సోర్స్ పేజీని తొలగించినప్పుడు, దాని చంక్స్ను కూడా తొలగించండి. అది అప్డేట్ అయినప్పుడు, వాటిని ఓవర్రైట్ చేయండి లేదా వెర్షన్ చేయండి. ఒంటరిగా మిగిలిపోయిన డేటా (Orphaned data) ఒక నిశ్శబ్ద హంతకి.
ఎంబెడ్డింగ్ల గురించి కఠిన వాస్తవం (The Hard Truth About Embeddings)
ఎంత అధునాతనమైన ఎంబెడ్డింగ్ మోడల్ అయినా, మిస్ అయిన డాక్యుమెంట్ను సరిచేయలేదు. మీ ఫీడ్ ఇంకా గత సంవత్సరం కాపీని కలిగి ఉంటే, ఒక పేజీ గత వారం అప్డేట్ చేయబడిందని అది ఊహించలేదు. ఒక చెడ్డ చంక్ బౌండరీ వల్ల హెడర్ నుండి విడిపోయిన టేబుల్ రో యొక్క సందర్భాన్ని (context) అది గ్రహించలేదు. ఎంబెడ్డింగ్లు అర్థాన్ని కుదిస్తాయి (compress), కానీ ఇంగెషన్ లేయర్ (ingestion layer) దానిని భద్రపరచడంలో విఫలమైన చోట అవి కొత్త అర్థాన్ని సృష్టించలేవు.
రిట్రీవల్ నాణ్యత ఇంగెషన్ లేయర్లోనే మొదలవుతుంది. మీ RAG సిస్టమ్ ఒక ఉపయోగకరమైన సాధనమా లేదా వెక్టర్ డేటాబేస్ను వెనుక ఉంచుకున్న ఒక నమ్మకమైన అబద్ధాలకోరునా అనేది ఆ లేయర్ నిర్ణయిస్తుంది.
కేవలం పైప్లైన్ డ్యాష్బోర్డ్లతో మాత్రమే ఇంజెషన్ హెల్త్ను కొలవడం ఆపండి. గ్రీన్ జాబ్స్ మరియు క్లీన్ లాగ్స్ ఉన్నంత మాత్రాన క్లీన్ కార్పస్ లభిస్తుందని గ్యారెంటీ లేదు. డేటాబేస్ను ఓపెన్ చేసి, మీ యూజర్లు రిట్రీవ్ చేసే అసలైన చంక్స్ను చదవండి. ఒకవేళ ఆ టెక్స్ట్ కాపీరైట్ నోటీసులు, విడిపోయిన టేబుల్స్ మరియు పాతబడిన పాలసీ పేజీలతో నిండి ఉంటే, మీ సమస్య LLM కాదు. ముందుగా ఫీడ్ను సరిచేయండి. మిగిలినవన్నీ చెత్తపై చేసే ట్యూనింగ్ మాత్రమే.
