𝗜 𝗕𝘂𝗶𝗹𝘁 𝗥𝗔𝗚 𝗙𝗿𝗼𝗺 𝗦𝗰𝗿𝗮𝘁𝗰𝗵 𝗶𝗻 𝗣𝘆𝘁𝗵𝗼𝗻 𝘁𝗼 𝗨𝗻𝗱𝗲𝗿𝘀𝘁𝗮𝗻𝗱 𝗜𝘁

मी समजून घेण्यासाठी Python मध्ये शून्यातून RAG तयार केले.

मी सहा महिने प्रोडक्शनमध्ये LangChain वापरले. ते कसे काम करते हे मी स्पष्टपणे सांगू शकत नव्हतो. मी विशिष्ट मेट्रिक्स का निवडले किंवा मजकूर (text) वेक्टर्समध्ये कसा बदलला, हे मला माहित नव्हते. त्या लायब्ररीमुळे त्यामागील लॉजिक लपले होते.

हे सुधारण्यासाठी, मी तो फ्रेमवर्क काढून टाकला. मी ५०० ओळींच्या साध्या Python चा वापर करून शून्यातून एक RAG pipeline तयार केली.

स्टॅक मॅन्युअली तयार करताना मी काय शिकलो, ते खालीलप्रमाणे आहे.

'ब्लॅक बॉक्स'मधील समस्या

जेव्हा तुम्ही हाय-लेव्हल लायब्ररीज वापरता, तेव्हा तुमचे नियंत्रण सुटते. मी पाहिले की मॉडेल्स तथ्ये चुकीच्या पद्धतीने मांडतात (hallucinate) किंवा चुकीचे संदर्भ (citations) देतात. चूक चंकर (chunker) मध्ये आहे, एम्बेडिंग मॉडेलमध्ये आहे की प्रॉम्प्टमध्ये, हे मला सांगता येत नव्हते.

जेव्हा तुम्ही ते स्वतः तयार करता, तेव्हा प्रत्येक लेअर तपासता येतो. तुम्ही LLM ला पाठवलेले नेमके चंक्स (chunks) प्रिंट करून पाहू शकता. एखादे वाक्य नेमके कुठे तुटते, हे देखील तुम्ही पाहू शकता.

RAG चे पाच लेअर्स (Layers)

RAG हा एक अल्गोरिदम नाही. ते एकत्र जोडलेल्या पाच वेगवेगळ्या प्रक्रिया आहेत:

  • Chunking: मजकूर कसा विभाजित करायचा हे ठरवणे.
  • Embedding: मजकुराचे गणितात रूपांतर करणे.
  • Retrieval: योग्य भाग शोधणे.
  • Prompt Construction: मॉडेलने कसे वागावे हे सांगणे.
  • Generation: अंतिम उत्तर मिळवणे.

निर्मितीपासून मिळालेले धडे

१. Chunking ही सर्वात महत्त्वाची पायरी आहे बहुतेक ट्युटोरियल्समध्ये हे वगळले जाते. जर तुम्ही 'overlap' वापरले नाही, तर सीमांवर (boundaries) संदर्भाचा (context) अभाव जाणवतो. मी कॅरेक्टर-लेव्हल ओव्हरलॅपसह 'sliding window' वापरले. यामुळे मॉडेलला दोन चंक्समधील संबंध समजण्यास मदत होते.

२. डिस्टन्स मेट्रिक्स (Distance metrics) महत्त्वाचे आहेत चुकीच्या सर्च रिझल्ट्समुळे मला तासनतास डीबगिंग करावे लागले. समस्या डेटाची नव्हती, तर मेट्रिकची होती. ChromaDB मध्ये डीफॉल्टनुसार L2 डिस्टन्स असतो. सिमँटिक सर्चसाठी (semantic search), तुम्हाला Cosine similarity ची गरज असते. कोडच्या एका ओळीने सर्व काही बदलले.

३. प्रॉम्प्ट्सना मर्यादा (constraints) आवश्यक आहेत LLM हे माहिती पूर्ण करणारे साधन आहे, भविष्य सांगणारे (oracle) नाही. जर तुम्ही अस्पष्ट प्रश्न विचारला, तर ते स्वतःहून उत्तर तयार करेल. मी एक कडक 'refusal template' वापरण्यास शिकलो. मी मॉडेलला सांगितले: "जर संदर्भात (context) उत्तर नसेल, तर तुम्हाला माहित नाही असे सांगा." यामुळे hallucinations ४०% वरून ५% पर्यंत खाली आले.

४. तुमच्या विनंत्या (requests) बॅचमध्ये पाठवा प्रत्येक चंकसाठी एक HTTP रिक्वेस्ट पाठवणे संथ असते. बॅचेसमध्ये पाठवणे खूप जलद असते. यामुळे लोकल मॉडेलला कामाचे पाइपलाइनिंग करण्यास मदत होते.

५. खालून वरच्या दिशेने चाचणी (Test) करा चाचण्या शेवटी लिहू नका. प्रथम तुमचा चंकर (chunker) तपासा. त्यानंतर तुमचा एम्बेडर (embedder) तपासा. त्यानंतर तुमचा स्टोअर (store) तपासा. जर तुम्ही शेवटी चाचणी केली, तर तुम्ही लॉजिकऐवजी फक्त बग्स (bugs) तपासत राहता.

जर तुम्हाला असे वाटत असेल की तुम्हाला तुमचा AI स्टॅक खरोखर समजलेला नाही, तर तो स्वतः तयार करा. कोड हे ध्येय नाही, तर विचार करण्याची प्रक्रिया हे ध्येय आहे.

Source: https://dev.to/avinash_zala_1c6f5e7c4af9/i-built-rag-from-scratch-in-python-to-understand-it-heres-what-i-learned-33kf

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