నేను ఒక RAG Appని నిర్మించాను, ఆపై నాకు ఏ కారు ఇష్టమో అడిగాను. దానికి తెలియలేదు.

నేను Kenning అనే డాక్యుమెంట్-చాట్ టూల్‌ను రూపొందిస్తున్నాను. వినియోగదారులు అప్‌లోడ్ చేసిన ఫైళ్ల గురించి ప్రశ్నలు అడగడానికి ఇది RAG (Retrieval-Augmented Generation)ని ఉపయోగిస్తుంది.

నేను ఈ మొత్తం పైప్‌లైన్‌ను ఈ క్రింది వాటిని ఉపయోగించి మొదటి నుండి నిర్మించాను:

  • Java 21 మరియు Spring Boot
  • Spring AI
  • PostgreSQL with pgvector
  • Ollama (llama3.2:3b మరియు nomic-embed-text రన్ చేస్తూ)
  • Docker Compose

ఈ పైప్‌లైన్ ఈ విధంగా పనిచేస్తుంది: Upload file → Extract text → Chunk text → Convert chunks to vectors → Store in pgvector → Search for similar chunks → Send chunks + question to the model → Get answer with sources.

సిస్టమ్ పనిచేసింది, కానీ నేను రెండు వేర్వేరు వైఫల్యాలను ఎదుర్కొన్నాను. అవి చూడటానికి ఒకేలా ఉన్నప్పటికీ, వాటి కారణాలు వేర్వేరుగా ఉన్నాయి.

వైఫల్యం 1: మోడల్ అయోమయానికి గురైంది. నేను అడిగాను: "What embedding model does this project use?" డాక్యుమెంట్‌లో సమాధానం స్పష్టంగా ఉంది. మోడల్ సరైన టెక్స్ట్‌ను వెలికితీసింది (retrieved). అయినప్పటికీ, తదుపరి వాక్యంలో సరైన మోడల్ పేరును పేర్కొన్నప్పటికీ, తనకు తెలియదని సమాధానమిచ్చింది.

నా సిద్ధాంతం: 3B మోడల్ చాలా చిన్నది. ఇది సరైన డేటాను వెలికితీసింది కానీ నమ్మకమైన సమాధానాన్ని ఇవ్వలేకపోయింది. పెద్ద మోడల్‌ను ఉపయోగిస్తే బహుశా ఇది పరిష్కరించబడుతుంది.

వైఫల్యం 2: మోడల్‌కు ఏమీ దొరకలేదు. నేను అడిగాను: "What car brand do I like?" నాకు BMW ఇష్టమని డాక్యుమెంట్‌లో ఉంది. కానీ సిస్టమ్ సున్నా ఫలితాలను ఇచ్చింది. నా థ్రెషోల్డ్ (threshold) దాటడానికి similarity score చాలా తక్కువగా ఉంది.

నా సిద్ధాంతం: Chunk dilution. నా టెస్ట్ డాక్యుమెంట్ చిన్నది. అది Spring AI, OAuth2 మరియు నా కారు ఇష్టాలు వంటి అనేక అంశాలను ఒకే చంక్‌లో కలిపివేసింది. ఆ చంక్ యొక్క వెక్టార్ ఆ అంశాలన్నింటి మధ్య విస్తరించిపోయి (diluted) బలహీనపడింది. ఒక విస్తృతమైన చంక్‌తో పోలిస్తే, కార్ల గురించి అడిగిన నిర్దిష్ట ప్రశ్న తన ప్రభావాన్ని కోల్పోయింది. మెరుగైన chunking strategy దీనిని పరిష్కరిస్తుంది.

నేర్చుకున్న పాఠాలు:

  • చిన్న మోడళ్లకు రీజనింగ్ పరిమితులు ఉంటాయి.
  • Naive chunking రిట్రీవల్ ఖచ్చితత్వాన్ని ప్రభావితం చేస్తుంది.
  • కేవలం లోపాన్ని సరిదిద్దడం కంటే, అది "ఎందుకు" జరిగిందో డీబగ్ చేయడం ముఖ్యం.

ఆర్కిటెక్చర్ బలంగా ఉంది. ఇది నెమ్మదిగా ఉంది మరియు కొన్నిసార్లు తప్పుగా ఉండవచ్చు, కానీ లూప్ పూర్తయింది.

Source: https://dev.to/mido-dev/i-built-a-rag-app-then-asked-it-what-car-i-like-it-didnt-know-583n

Optional learning community: https://t.me/GyaanSetuAi