میں نے ایک RAG ایپ بنائی، پھر اس سے پوچھا کہ مجھے کون سی کار پسند ہے۔ اسے معلوم نہیں تھا۔

میں Kenning نامی ایک ڈاکومنٹ-چیٹ ٹول بنا رہا ہوں۔ یہ صارفین کو اپ لوڈ کردہ فائلوں کے بارے میں سوالات پوچھنے کی اجازت دینے کے لیے RAG (Retrieval-Augmented Generation) کا استعمال کرتا ہے۔

میں نے یہ پورا پائپ لائن (pipeline) بالکل شروع سے ان چیزوں کا استعمال کرتے ہوئے بنایا ہے:

  • Java 21 اور Spring Boot
  • Spring AI
  • PostgreSQL مع pgvector
  • Ollama (جس میں llama3.2:3b اور nomic-embed-text چل رہے ہیں)
  • Docker Compose

یہ پائپ لائن اس طرح کام کرتی ہے: فائل اپ لوڈ کریں → ٹیکسٹ نکالیں (Extract text) → ٹیکسٹ کے ٹکڑے (Chunk text) کریں → چنکس کو ویکٹرز (vectors) میں تبدیل کریں → pgvector میں اسٹور کریں → ملتے جلتے چنکس تلاش کریں → چنکس + سوال ماڈل کو بھیجیں → ذرائع (sources) کے ساتھ جواب حاصل کریں۔

سسٹم کام کر رہا تھا، لیکن مجھے دو مختلف ناکامیوں کا سامنا کرنا پڑا۔ وہ دیکھنے میں ایک جیسی تھیں، لیکن ان کی وجوہات مختلف تھیں۔

Failure 1: ماڈل الجھن کا شکار تھا۔ میں نے پوچھا: "یہ پروجیکٹ کون سا embedding model استعمال کرتا ہے؟" دستاویز میں جواب واضح طور پر درج تھا۔ ماڈل نے درست ٹیکسٹ نکالا۔ تاہم، اس نے یہ کہہ کر جواب دیا کہ اسے معلوم نہیں ہے، حالانکہ اگلی ہی لائن میں اس نے درست ماڈل کا نام بھی دہرایا تھا۔

میرا نظریہ: 3B ماڈل بہت چھوٹا ہے۔ اس نے درست ڈیٹا تو نکالا لیکن ایک پر اعتماد جواب دینے سے قاصر رہا۔ ایک بڑا ماڈل غالباً اس مسئلے کو حل کر دے گا۔

Failure 2: ماڈل کو کچھ نہیں ملا۔ میں نے پوچھا: "مجھے کون سا کار برانڈ پسند ہے؟" دستاویز میں ذکر تھا کہ مجھے BMW پسند ہے۔ لیکن سسٹم نے صفر نتائج دکھائے۔ similarity score میرے مقرر کردہ معیار (threshold) سے بہت کم تھا۔

میرا نظریہ: Chunk dilution۔ میری ٹیسٹ دستاویز مختصر تھی۔ اس نے Spring AI، OAuth2، اور میری کار کی پسند جیسے کئی موضوعات کو ایک ہی چنک (chunk) میں ملا دیا تھا۔ اس چنک کا ویکٹر ان تمام موضوعات میں تقسیم (dilute) ہو گیا۔ کار کے بارے میں ایک مخصوص سوال ایک وسیع چنک کے سامنے اپنی اہمیت کھو بیٹھا۔ بہتر chunking حکمت عملی اس مسئلے کو حل کر دے گی۔

Lessons learned:

  • چھوٹے ماڈلز کی استدلال (reasoning) کی صلاحیتیں محدود ہوتی ہیں۔
  • سادہ (Naive) chunking سے معلومات نکالنے کی درستگی (retrieval accuracy) متاثر ہوتی ہے۔
  • صرف غلطی کو ٹھیک کرنے کے بجائے اس کی "وجہ" تلاش کرنا زیادہ اہم ہے۔

آرکیٹیکچر (architecture) برقرار ہے۔ یہ سست ہے اور کبھی کبھی غلط بھی ہوتا ہے، لیکن یہ عمل (loop) مکمل ہے۔

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