అడ్వాన్స్‌డ్ RAG టెక్నిక్స్ ఎప్పుడూ మెరుగ్గా ఉండవు. అవి కొన్ని సందర్భాల్లో మాత్రమే మెరుగ్గా ఉంటాయి.

అడ్వాన్స్‌డ్ RAG టెక్నిక్స్ అంటే ఉచిత అప్‌గ్రేడ్‌లు కావు. అవి కొన్ని లాభనష్టాలతో (trade-offs) కూడిన సాధనాలు.

వాటిని పరీక్షించడానికి నేను ఒక RAG పైప్‌లైన్‌కు ఐదు రిట్రీవల్ టెక్నిక్స్‌ను జోడించాను. అందులో అత్యంత ముఖ్యమైన ఫలితం ఏ టెక్నిక్ విఫలమైందనేది.

HyDE రిట్రీవల్‌ను మెరుగుపరుస్తుందని నేను ఆశించాను. కానీ, కొన్ని క్వెరీల విషయంలో అది రివర్స్ అయ్యింది. Recall 0.80 నుండి 0.17కి పడిపోయింది. ఆ టెక్నిక్ సహాయం చేయలేకపోవడమే కాదు, ఫలితాల్లో తప్పుడు డేటాను కూడా తీసుకువచ్చింది.

నేను పరీక్షించిన ప్రతి అడ్వాన్స్‌డ్ టెక్నిక్ ఇలా పనిచేస్తుంది:

  • Hybrid search (BM25 + dense): ఖచ్చితమైన పదాల కోసం ఇది అద్భుతంగా పనిచేస్తుంది. మీ క్వెరీ నిర్దిష్ట పారామీటర్లపై ఆధారపడినప్పుడు దీనిని ఉపయోగించండి.
  • HyDE: డాక్యుమెంట్ వొకాబులరీతో సరిపోని సాధారణ ప్రశ్నల కోసం ఇది బాగుంటుంది. క్వెరీ ఇప్పటికే కార్పస్ (corpus)తో బాగా సరిపోతున్నప్పుడు ఇది విఫలమవుతుంది.
  • Reranking: సరైన చంక్ (chunk) ఫలితాల్లో ఉన్నప్పటికీ, లిస్ట్‌లో చాలా కింద ఉన్నప్పుడు ఇది బాగా ఉపయోగపడుతుంది.
  • Contextual retrieval: సందర్భం (context) లేని చిన్న చంక్స్‌ కోసం ఇది అద్భుతంగా పనిచేస్తుంది. అయితే, ప్రతి చంక్‌కు మీరు LLMని ఉపయోగించాల్సి ఉంటుంది కాబట్టి ఇది ఖర్చును పెంచుతుంది.

నేను ఈ పైప్‌లైన్‌ను Anthropic డాక్యుమెంటేషన్‌ను ఉపయోగించి నిర్మించాను. నేను Postgresతో పాటు pgvector మరియు HNSW ఇండెక్స్‌ను ఉపయోగించాను. నేను దీనిని ఒక బ్యాకెండ్ ఇంజనీర్‌లా పరిగణించాను. ఏదైనా టెక్నిక్ 'state of the art' కాదా అని నేను అడగలేదు. అది తన సంక్లిష్టతకు (complexity) తగిన విలువను ఇస్తుందా లేదా అని మాత్రమే అడిగాను.

మీరు జోడించే ప్రతి కాంపోనెంట్‌ను మీరు నిర్వహించాల్సి ఉంటుంది, డీబగ్ చేయాల్సి ఉంటుంది మరియు దాని కోసం చెల్లించాల్సి ఉంటుంది.

సంక్లిష్టమైన సాధనాలను జోడించే ముందు, నేను సాధారణ డెన్స్ రిట్రీవల్ (plain dense retrieval) ఉపయోగించి బేస్‌లైన్‌ను కొలవాలనుకున్నాను.

ఫలితాలు రెండు వేర్వేరు మెట్రిక్స్‌ను చూపించాయి:

  • Faithfulness: 0.96
  • Context precision: 0.60

ఈ డేటా నా మొత్తం విధానాన్ని మార్చేసింది. చాలా టెక్నిక్స్ రిట్రీవల్‌ను లక్ష్యంగా చేసుకుంటాయి. కానీ నా విషయంలో రిట్రీవల్ మాత్రమే విఫలమవుతోంది. ఒకవేళ faithfulness తక్కువగా ఉంటే, నేను ప్రాంప్ట్‌లను (prompts) ట్యూన్ చేసేవాడిని. కానీ రిట్రీవల్ తక్కువగా ఉన్నందున, నేను సెర్చ్‌ను ట్యూన్ చేయాల్సి వచ్చింది.

ఎవాల్యుయేషన్ టూల్స్ (evaluation tools) గురించి కూడా నేను ఒక పాఠం నేర్చుకున్నాను. నేను Ragasని ఉపయోగించడానికి ప్రయత్నించాను, కానీ అది చాలా నెమ్మదిగా ఉంది. అది విఫలమైన కాల్స్‌ను మళ్ళీ మళ్ళీ ప్రయత్నిస్తూ గంటల కొద్దీ సమయం తీసుకునేది. దానికి బదులుగా నేను నా స్వంత async harnessను నిర్మించుకున్నాను. 11 గంటలకు బదులుగా అదే మెట్రిక్స్‌ను కేవలం 221 సెకన్లలోనే రన్ చేశాను.

దీని నుండి నేర్చుకోవలసిన విషయం సరళమైనది:

టెక్నిక్స్‌ను గుడ్డిగా అన్వయించకండి. సరైన ప్రశ్నకు సరైన మోడ్‌ను ఎంచుకోవడానికి క్వెరీ రూటర్ (query router)ను ఉపయోగించండి. ముందుగా మీ డేటాను కొలవండి. ఆ తర్వాత మీ నిర్దిష్ట వైఫల్యానికి (failure mode) పరిష్కారం చూపే సాధనాన్ని ఎంచుకోండి.

మోడల్ కొత్తది కావచ్చు, కానీ ఇంజనీరింగ్ క్రమశిక్షణ (engineering discipline) కొత్తది కాదు.

Source: https://dev.to/yogesh23012001/advanced-rag-techniques-arent-better-theyre-better-sometimes-4m2o