मॉड्यूल 03: RAG (रिट्रीव्हल-ऑगमेंटेड जनरेशन)
March 2, 2026 · View on GitHub
मजकूर सामग्री
- व्हिडिओ वॉकथ्रू
- तुम्ही काय शिकाल
- पूर्वअटी
- RAG समजून घेणे
- हे कसे कार्य करते
- अॅप्लिकेशन चालवा
- अॅप्लिकेशन वापरणे
- महेतवाचे संकल्पना
- जेव्हा RAG महत्वाचे असते
- पुढील पावले
व्हिडिओ वॉकथ्रू
हा लाईव्ह सत्र पाहा जे या मॉड्यूलसह सुरू कसे करायचे हे स्पष्ट करते:
तुम्ही काय शिकाल
मागील मॉड्यूलमध्ये, तुम्ही AI सह संवाद साधणे आणि प्रभावीपणे प्रॉम्प्ट कसे रचायचे हे शिकलात. पण एक मूलभूत मर्यादा आहे: भाषा मॉडेल्सना फक्त त्यांच्या प्रशिक्षणादरम्यान काय शिकवले गेले आहे तेच माहिती असते. ते तुमच्या कंपनीच्या धोरणांबद्दल, प्रोजेक्ट दस्तऐवजांबद्दल किंवा त्यांना प्रशिक्षण दिलेल्या माहितीबाहेर असलेल्या कोणत्याही माहितीबद्दल प्रश्नांची उत्तरे देऊ शकत नाहीत.
RAG (रिट्रीव्हल-ऑगमेंटेड जनरेशन) हा प्रश्न सोडवतो. मॉडेलला तुमची माहिती शिकवण्याचा प्रयत्न करण्याऐवजी (जो खर्चिक आणि अव्यवहार्य आहे), तुम्ही त्याला तुमचे दस्तऐवज शोधण्याची क्षमता देता. जेव्हा कोणी प्रश्न विचारतो, तेव्हा प्रणाली संबंधित माहिती मिळवते आणि ती प्रॉम्प्टमध्ये समाविष्ट करते. मॉडेल मग त्या प्राप्त संदर्भावर आधारित उत्तर देते.
RAG ला मॉडेलसाठी संदर्भ ग्रंथालय देणे म्हणून विचार करा. जेव्हा तुम्ही प्रश्न विचारता, तेव्हा प्रणाली:
- वापरकर्ता क्वेरी - तुम्ही प्रश्न विचारता
- एम्बेडिंग - तुमच्या प्रश्नाला एक व्हेक्टरमध्ये रूपांतरित करते
- व्हेक्टर शोध - समान दस्तऐवज चंक शोधते
- संदर्भ संकलन - संबंधित चंक प्रॉम्प्टमध्ये जोडते
- प्रतिसाद - LLM त्या संदर्भावर आधारित उत्तर तयार करते
हे मॉडेलच्या प्रतिसादांना त्याच्या प्रशिक्षण ज्ञानावर अवलंबून राहण्याऐवजी तुमच्या खऱ्या डेटावर आधारित करते.
पूर्वअटी
- पूर्ण केलेले मॉड्यूल 00 - क्विक स्टार्ट (सोप्या RAG उदाहरणासाठी जे या मॉड्यूलमध्ये नंतर संदर्भित केले आहे)
- पूर्ण केलेले मॉड्यूल 01 - परिचय (Azure OpenAI संसाधने तैनात, ज्यात
text-embedding-3-smallएम्बेडिंग मॉडेलसह) - मूळ फोल्डरमध्ये
.envफाइल जिथे Azure प्रमाणपत्रे आहेत (मॉड्यूल 01 मध्येazd upद्वारा तयार केलेली)
टीप: जर तुम्ही मॉड्यूल 01 पूर्ण केले नसेल, तर प्रथम तेथील डिप्लॉयमेंट सूचना पाळा.
azd upआदेश GPT चॅट मॉडेल आणि या मॉड्यूलमध्ये वापरल्या जाणार्या एम्बेडिंग मॉडेल दोन्ही तैनात करतो.
RAG समजून घेणे
खालील आकृती मुख्य संकल्पना दाखवते: फक्त मॉडेलच्या प्रशिक्षण डेटावर अवलंबून राहण्याऐवजी, RAG प्रत्येक उत्तर तयार करण्यापूर्वी तुमच्या दस्तऐवजांच्या संदर्भ ग्रंथालयाचा सल्ला देतो.
ही आकृती एक सामान्य LLM (जे प्रशिक्षण डेटावरून अंदाज लावते) आणि RAG-संवर्धित LLM (जे प्रथम तुमचे दस्तऐवज सल्ला करतो) यातील फरक दाखवते.
येथे भाग कसे जोडलेले आहेत, पूर्ण प्रवाह. वापरकर्त्याचा प्रश्न चार टप्प्यांतून जातो — एम्बेडिंग, व्हेक्टर शोध, संदर्भ संकलन, आणि उत्तर निर्मिती — प्रत्येक टप्पा मागील टप्प्यावर आधारित आहे:
ही आकृती RAG संपूर्ण पाइपलाइन दाखवते — वापरकर्ता क्वेरी एम्बेडिंग, व्हेक्टर शोध, संदर्भ संकलन, आणि उत्तर निर्मितीतून जातो.
या मॉड्यूलचे उर्वरित भाग प्रत्येक टप्प्यात तपशीलवार देखावा देतात, ज्यात तुम्ही चालवू आणि सुधारू शकणारा कोड आहे.
हा ट्युटोरियल कोणता RAG दृष्टिकोन वापरतो?
LangChain4j RAG अमलासाठी तीन मार्ग प्रदान करतो, प्रत्येक वेगवेगळ्या स्तरावरील अमूर्तता सह. खालील आकृती त्यांची बाजूने तुलना करते:
ही आकृती तीन LangChain4j RAG दृष्टिकोनांची तुलना करते — सोपी, नैसर्गिक, आणि प्रगत — त्यांचे मुख्य घटक आणि वापरावे कधी ते दाखवते.
| दृष्टिकोन | काय करतो | उलाढाल |
|---|---|---|
| सोप्या RAG | AiServices आणि ContentRetriever द्वारे सर्व काही आपोआप वायर करते. तुम्ही इंटरफेसवर भाष्य करता, एक रिट्रीव्हर जोडता, आणि LangChain4j एम्बेडिंग, शोध आणि प्रॉम्प्ट संकलन पार्श्वभूमीत हाताळते. | कोड कमी, पण प्रत्येक टप्प्यावर काय होते ते दिसत नाही. |
| नैसर्गिक RAG | तुम्ही एम्बेडिंग मॉडेल कॉल करता, स्टोअर शोधता, प्रॉम्प्ट तयार करता, आणि उत्तर स्वतः तयार करता — एक स्पष्ट टप्पा एकावेळी. | अधिक कोड, पण प्रत्येक टप्पा दिसतो आणि सुधारता येतो. |
| प्रगत RAG | RetrievalAugmentor फ्रेमवर्क वापरते ज्यात प्लगबल क्वेरी ट्रान्सफॉर्मर, राऊटर, री-रँकर, आणि कंटेंट इंजेक्टर आहेत उत्पादन दर्जा पाइपलाइनसाठी. | जास्त लवचिकता, पण खूप जास्त गुंतागुंत. |
हा ट्युटोरियल नैसर्गिक दृष्टिकोन वापरतो. RAG पाइपलाइनचा प्रत्येक टप्पा — क्वेरीचे एम्बेडिंग, व्हेक्टर स्टोअर शोध, संदर्भ संकलन, आणि उत्तर निर्मिती — हे RagService.java मध्ये स्पष्टपणे लिहिलेले आहे. हे जाणून घेण्यासाठी केलेले आहे: शिकत असताना प्रत्येक टप्पा तुम्हाला दिसायलाच हवा, कोड कमी करण्यापेक्षा समजून घेणे जास्त महत्वाचे आहे. एकदा तुम्हाला संपूर्ण प्रक्रिया कळली की, तुम्ही पटकन प्रोटोटाइपसाठी सोप्या RAG कडे किंवा उत्पादनासाठी प्रगत RAG कडे जाऊ शकता.
💡 आधीच सोपा RAG पाहिला आहे का? क्विक स्टार्ट मॉड्यूल मध्ये Document Q&A उदाहरण (
SimpleReaderDemo.java) सोपा RAG दृष्टिकोन वापरते — LangChain4j एम्बेडिंग, शोध आणि प्रॉम्प्ट संकलन आपोआप हाताळतो. हा मॉड्यूल पुढील पावलाने ते पाइपलाइन उघडतो जेणेकरून तुम्ही प्रत्येक टप्पा पाहू आणि नियंत्रित करू शकाल.
खालील आकृती क्विक स्टार्टमधील सोप्या RAG पाइपलाइन दाखवते. लक्षात घ्या कसे AiServices आणि EmbeddingStoreContentRetriever सर्व गुंतागुंती लपवतात — तुम्ही दस्तऐवज लोड करता, रिट्रीव्हर जोडता, आणि उत्तरे मिळवता. या मॉड्यूलमधील नैसर्गिक दृष्टिकोन त्या सर्व गुपित टप्पे उघडतो:
ही आकृती SimpleReaderDemo.java मधील सोप्या RAG पाइपलाइन दाखवते. या मॉड्यूलमधील नैसर्गिक दृष्टिकोनशी तुलना करा: सोपा RAG एम्बेडिंग, रिट्रीव्हल, आणि प्रॉम्प्ट संकलन AiServices आणि ContentRetriever मागे लपवतो — तुम्ही दस्तऐवज लोड करता, रिट्रीव्हर जोडता, आणि उत्तरे मिळवता. नैसर्गिक दृष्टिकोन मध्ये तुम्ही प्रत्येक टप्पा थेट कॉल करता (एम्बेड, शोध, संदर्भ संकलन, उत्तर तयार) जे पूर्ण नियंत्रण आणि दृश्यता देते.
हे कसे कार्य करते
या मॉड्यूलमधील RAG पाइपलाइन चार टप्पे मोडते जे प्रत्येकी वापरकर्त्याचा प्रश्न विचारल्यावर अनुक्रमे चालतात. प्रथम, एक अपलोड केलेला दस्तऐवज पार्स आणि चंक केली जाते ज्याने हाताळण्यासाठी सोप्या तुकड्यांत विभागले जाते. त्या चंकना नंतर व्हेक्टर एम्बेडिंग्स मध्ये रूपांतरित केले जाते आणि साठवले जाते ज्याने गणितीय तुलना शक्य होते. जेव्हा क्वेरी येते, प्रणाली सेंमॅंटिक शोध करते सर्वात संबंधित चंक शोधण्यासाठी, आणि शेवटी LLM ला उत्तर निर्मितीसाठी संदर्भ म्हणून पुरवते. खालील विभाग प्रत्येक टप्पा कोड आणि आकृतींसह दाखवतात. पहिला टप्पा पाहूया.
डॉक्युमेंट प्रक्रिया
जेव्हा तुम्ही दस्तऐवज अपलोड करता, तेव्हा प्रणाली तो पार्स करते (PDF किंवा साधा मजकूर), फाईलनेम सारखी मेटाडेटा जोडते, आणि नंतर तो चंकमध्ये विभागते — छोटे तुकडे जे मॉडेलच्या संदर्भ विंडोत सहज येतात. हे चंक थोडे ओव्हरलॅप होतात जेणेकरून सीमारेषेवरील संदर्भ हरवू नये.
// अपलोड केलेली फाईल पार्स करा आणि त्याला LangChain4j दस्तऐवजात गुंडाळा
Document document = Document.from(content, metadata);
// 300-टोकनच्या तुकड्यांमध्ये विभाजित करा ज्यात 30-टोकनचे ओव्हरलॅप आहे
DocumentSplitter splitter = DocumentSplitters
.recursive(300, 30);
List<TextSegment> segments = splitter.split(document);
खालील आकृती हे कसे दृश्यात्मकपणे कार्य करते ते दाखवते. प्रत्येक चंक जवळच्या शेजाऱ्यांबरोबर काही टोकन्स शेअर करतो — ३० टोकन ओव्हरलॅपमुळे महत्त्वाचा संदर्भ दरम्यान गहाळ न राहतो:
ही आकृती दाखवते की दस्तऐवज ३० टोकन ओव्हरलॅप सह ३००-टोकन चंकमध्ये कसे विभागला जातो, सीमारेषेवरील संदर्भ जपताना.
🤖 GitHub Copilot चॅटसह प्रयत्न करा:
DocumentService.javaउघडा आणि विचारा:
- "LangChain4j दस्तऐवज चंकमध्ये कसे विभागतो आणि ओव्हरलॅप का महत्त्वाचा आहे?"
- "वेगवेगळ्या दस्तऐवज प्रकारांसाठी आदर्श चंक आकार काय आहे आणि का?"
- "कृपया मल्टीलिंग्वल किंवा विशेष फॉरमॅटिंग असलेले दस्तऐवज कसे हाताळायचे?"
एम्बेडिंग तयार करणे
प्रत्येक चंक एक संख्यात्मक प्रतिनिधित्वात रूपांतरित केला जातो ज्याला एम्बेडिंग म्हणतात — मूलत: अर्थ ते संख्यांचा कन्व्हर्टर. एम्बेडिंग मॉडेल चॅट मॉडेलसारखे "बुद्धिमान" नसते; ते सूचनांचे पालन करू शकत नाही, तार्किक विचार करू शकत नाही किंवा प्रश्नांना उत्तरे देऊ शकत नाही. ते काय करू शकते ते म्हणजे मजकूराला अशा गणितीय अवकाशात नकाशा करणे जिथे समान अर्थ जवळजवळ येतात — "कार" जवळ "ऑटोमोबाईल," "रिफंड धोरण" जवळ "माझे पैसे परत करा." चॅट मॉडेलला तुम्ही ज्याच्याशी बोलू शकता असा एखादा व्यक्ती समजा; एम्बेडिंग मॉडेल ही अल्ट्रा-चांगली फाइलिंग प्रणाली आहे.
खालील आकृती हा संकल्पना दर्शवते — मजकूर आत जातो, संख्यात्मक व्हेक्टर बाहेर येतात, आणि समान अर्थ जवळचे व्हेक्टर तयार करतात:
ही आकृती दाखवते की एम्बेडिंग मॉडेल मजकूर कसा संख्यात्मक व्हेक्टरमध्ये रूपांतरित करतो, ज्यात समान अर्थ — जसे "कार" आणि "ऑटोमोबाईल" — व्हेक्टर स्पेसमध्ये एकमेकांच्या जवळ येतात.
@Bean
public EmbeddingModel embeddingModel() {
return OpenAiOfficialEmbeddingModel.builder()
.baseUrl(azureOpenAiEndpoint)
.apiKey(azureOpenAiKey)
.modelName(azureEmbeddingDeploymentName)
.build();
}
EmbeddingStore<TextSegment> embeddingStore =
new InMemoryEmbeddingStore<>();
खालील वर्ग आकृती एक RAG पाइपलाइनमधील दोन वेगळ्या प्रवाह आणि LangChain4j वर्ग दर्शवते. इंजेस्टिंग प्रवाह (एकदा अपलोडवेळी चालणारा) दस्तऐवज विभागतो, चंक एम्बेड करतो, आणि .addAll() द्वारे साठवतो. क्वेरी प्रवाह (प्रत्येक वेळी वापरकर्ता प्रश्न विचारतो तेव्हा चालणारा) प्रश्न एम्बेड करतो, .search() द्वारे स्टोअर शोधतो, आणि जुळलेला संदर्भ चॅट मॉडेलला पाठवतो. दोन्ही प्रवाह सामान्य EmbeddingStore<TextSegment> इंटरफेसवर भेटतात:
ही आकृती RAG पाइपलाइनमधील दोन प्रवाह दाखवते — इंजेस्टिंग आणि क्वेरी — आणि ते सामान्य EmbeddingStore द्वारे कसे जोडलेले आहेत.
एकदा एम्बेडिंग साठवले गेल्यावर, समान सामग्री नैसर्गिकरित्या व्हेक्टर स्पेसमध्ये एकत्र जमते. खालील दृष्टीकोन दाखवतो की संबंधित विषयांच्या दस्तऐवज कसे पुढच्या-अगोदरच्या बिंदू म्हणून येतात, जे सेंमॅंटिक शोध शक्य बनवते:
ही दृष्टीकोन दर्शवते की संबंधित दस्तऐवज 3D व्हेक्टर स्पेसमध्ये एकत्र जमतात, ज्यात टेक्निकल डॉक्स, बिझनेस नियम, आणि FAQ सारखे वेगळे समूह तयार होतात.
जेव्हा वापरकर्ता शोध करतो, प्रणाली चार टप्पे पार पाडते: एकदा दस्तऐवज एम्बेड करणे, प्रत्येक शोधावर क्वेरी एम्बेड करणे, क्वेरी व्हेक्टर आणि साठवलेल्या सर्व व्हेक्टरशी कोसाईन सादृश्यता वापरून तुलना करणे, आणि टॉप-K उच्चगुणांक मिळालेल्या चंक परत करणे. खालील आकृती प्रत्येक टप्पा आणि त्यात समाविष्ट LangChain4j वर्ग दाखवते:
ही आकृती चार टप्प्यांत एम्बेडिंग शोध प्रक्रिया दाखवते: दस्तऐवज एम्बेड करा, क्वेरी एम्बेड करा, व्हेक्टर कोसाईन सादृश्यतेने तुलना करा, आणि टॉप-K निकाल परत करा.
सेंमॅंटिक शोध
जेव्हा तुम्ही प्रश्न विचारता, तुमचा प्रश्न देखील एम्बेडिंगमध्ये बदलतो. प्रणाली तुमच्या प्रश्नाच्या एम्बेडिंगची तुलना सर्व दस्तऐवज चंकच्या एम्बेडिंगशी करते. ती असे चंक शोधते ज्याचं अर्थ सर्वाधिक समान आहे - केवळ कीवर्ड जुळणारे नव्हे, तर खरी संमॅंटिक समानता असलेले.
Embedding queryEmbedding = embeddingModel.embed(question).content();
EmbeddingSearchRequest searchRequest = EmbeddingSearchRequest.builder()
.queryEmbedding(queryEmbedding)
.maxResults(5)
.minScore(0.5)
.build();
EmbeddingSearchResult<TextSegment> searchResult = embeddingStore.search(searchRequest);
List<EmbeddingMatch<TextSegment>> matches = searchResult.matches();
for (EmbeddingMatch<TextSegment> match : matches) {
String relevantText = match.embedded().text();
double score = match.score();
}
खालील आकृती पारंपरिक कीवर्ड शोधाशी तुलना करते. "व्हेहिकल" साठी कीवर्ड शोध "कार आणि ट्रक्स" बद्दलचा चंक चुकतो, पण सेंमॅंटिक शोध त्यांचा समान अर्थ समजून तो उच्च गुण मिळवलेल्या जुळणारा म्हणून परत करतो:
ही आकृती कीवर्ड-आधारित शोध आणि सेंमॅंटिक शोध यांची तुलना करते, जे दाखवते की सेंमॅंटिक शोध कसे संकल्पनात्मकदृष्ट्या संबंधित सामग्री परत करतो जरी नेमके कीवर्ड वेगळे असतील. खालील तत्त्वाधारावर, सादृश्यता कॉसाईन सादृश्यता वापरून मोजली जाते — मूलत: "हे दोन बाण एकाच दिशेने दर्शवत आहेत का?" असं विचारत आहे. दोन भागांमध्ये पूर्णपणे वेगवेगळे शब्द असू शकतात, पण जर त्यांचा अर्थ सारखा असेल तर त्यांच्या व्हेक्टरची दिशा सारखी असते आणि त्यांची स्कोअर 1.0 च्या जवळ असते:
हे आकृती एम्बेडिंग व्हेक्टरमधील कोन म्हणून कॉसाईन सादृश्यता दर्शवते — जास्त संरेखित व्हेक्टरचे स्कोर 1.0 च्या जवळ असते, जे उच्चसंदर्भित सादृश्यता सूचित करते.
🤖 GitHub Copilot Chat सह प्रयत्न करा:
RagService.javaउघडा आणि विचारा:
- "एम्बेडिंगसह सादृश्यता शोध कसा कार्य करतो आणि स्कोअर काय ठरवतो?"
- "मला कोणता सादृश्यता थ्रेशोल्ड वापरायचा आणि तो निकालांवर कसा परिणाम करतो?"
- "जर कोणतेही संबंधित दस्तऐवज सापडले नाहीत तर मी कसे हाताळू?"
उत्तर निर्मिती
सर्वाधिक संबंधित भाग सुसंगत सूचना, प्राप्त संदर्भ आणि वापरकर्त्याच्या प्रश्नासह एक संरचित प्रॉम्प्टमध्ये एकत्र केले जातात. मॉडेल त्या विशिष्ट भागांना वाचते आणि त्या माहितीवर आधारित उत्तर देते — ते फक्त समोर असलेल्या माहितीचा वापर करू शकते, ज्यामुळे भासवटा होत नाही.
String context = matches.stream()
.map(match -> match.embedded().text())
.collect(Collectors.joining("\n\n"));
String prompt = String.format("""
Answer the question based on the following context.
If the answer cannot be found in the context, say so.
Context:
%s
Question: %s
Answer:""", context, request.question());
String answer = chatModel.chat(prompt);
खालील आकृती या संकलनाची क्रिया दर्शवते — शोध टप्प्यातील सर्वोच्च स्कोअर असलेले भाग प्रॉम्प्ट टेम्पलेटमध्ये टाकले जातात, आणि OpenAiOfficialChatModel एक आधारभूत उत्तर तयार करते:
ही आकृती दाखवते की कशी सर्वोच्च स्कोअर असलेले भाग संरचित प्रॉम्प्टमध्ये एकत्र केले जातात, ज्यामुळे मॉडेल आपल्या डेटावरून एक आधारभूत उत्तर देऊ शकते.
अनुप्रयोग चालवा
परिनियोजन तपासा:
रूट डिरेक्टरीमध्ये .env फाइल असल्याची खात्री करा ज्यात Azure क्रेडेन्शियल्स आहेत (Module 01 मध्ये तयार केलेली). हे चालवा ते मॉड्यूल डिरेक्टरीतून (03-rag/):
Bash:
cat ../.env # AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT दाखवायला हवे
PowerShell:
Get-Content ..\.env # AZURE_OPENAI_ENDPOINT, API_KEY, DEPLOYMENT दाखवावे
अनुप्रयोग सुरू करा:
टीप: जर तुम्ही आधीच सर्व अनुप्रयोग
./start-all.shवापरून रूट डिरेक्टरीतून सुरू केले असाल (Module 01 मध्ये वर्णन केलेले), तर हा मॉड्युल आधीच पोर्ट 8081 वर चालू आहे. तुम्ही खालील सुरुवात आदेश वगळून थेट http://localhost:8081 वर जाऊ शकता.
पर्याय 1: Spring Boot डॅशबोर्ड वापरून (VS Code वापरकर्त्यांसाठी शिफारसीय)
डेव्ह कंटेनरमध्ये Spring Boot डॅशबोर्ड विस्तार आहे, जो सर्व Spring Boot अनुप्रयोगांचे व्यवस्थापन करण्यासाठी दृश्यात्मक इंटरफेस प्रदान करतो. तुम्ही ते VS Code च्या Activity Bar मध्ये डाव्या बाजूला (Spring Boot आयकॉन शोधा) पाहू शकता.
Spring Boot डॅशबोर्डमधून तुम्ही:
- कार्यक्षेत्रातील सर्व उपलब्ध Spring Boot अनुप्रयोग पाहू शकता
- एक क्लिकने अनुप्रयोग सुरू/थांबवू शकता
- अनुप्रयोग लॉग रिअल-टाइममध्ये पाहू शकता
- अनुप्रयोग स्थिती मॉनिटर करू शकता
"rag" च्या बाजूला प्ले बटणावर क्लिक करून हा मॉड्युल सुरू करा, किंवा एकावेळी सर्व मॉड्यूल सुरू करा.
ही स्क्रीनशॉट VS Code मधील Spring Boot डॅशबोर्ड दाखवते, जिथे तुम्ही अनुप्रयोग दृश्यात्मक रीतीने सुरू, थांबवू आणि मॉनिटर करू शकता.
पर्याय 2: शेल स्क्रिप्ट वापरून
सर्व वेब अनुप्रयोग सुरू करा (मॉड्यूल 01-04):
Bash:
cd .. # मूळ निर्देशिकेतून
./start-all.sh
PowerShell:
cd .. # रूट निर्देशिकेपासून
.\start-all.ps1
किंवा केवळ हा मॉड्युल सुरू करा:
Bash:
cd 03-rag
./start.sh
PowerShell:
cd 03-rag
.\start.ps1
दोन्ही स्क्रिप्ट रूट .env फाइलमधून पर्यावरण चल आपोआप लोड करतात आणि जर JAR अस्तित्वात नसल्यास ती तयार करतील.
टीप: सर्व मॉड्यूल स्वतःहून तयार करून नंतर सुरू करायचे असल्यास:
Bash:
cd .. # Go to root directory mvn clean package -DskipTestsPowerShell:
cd .. # Go to root directory mvn clean package -DskipTests
तुमच्या ब्राउजरमध्ये http://localhost:8081 उघडा.
थांबवण्यासाठी:
Bash:
./stop.sh # हा मॉड्यूल फक्त
# किंवा
cd .. && ./stop-all.sh # सर्व मॉड्यूल्स
PowerShell:
.\stop.ps1 # हा मॉड्यूल फक्त
# किंवा
cd ..; .\stop-all.ps1 # सर्व मॉड्यूल्स
अनुप्रयोग वापरणे
हा अनुप्रयोग दस्तऐवज अपलोड करण्यासाठी आणि प्रश्न विचारण्यासाठी एक वेब इंटरफेस प्रदान करतो.
ही स्क्रीनशॉट RAG अनुप्रयोग इंटरफेस दाखवते जिथे तुम्ही दस्तऐवज अपलोड करता आणि प्रश्न विचारता.
दस्तऐवज अपलोड करा
दस्तऐवज अपलोड करून सुरुवात करा — TXT फाईल्स चाचणीसाठी उत्तम काम करतात. या डिरेक्टरीमध्ये sample-document.txt उपलब्ध आहे ज्यात LangChain4j वैशिष्ट्ये, RAG अंमलबजावणी आणि उत्तम पद्धतींबद्दल माहिती आहे — प्रणालीची चाचणीसाठी उत्तम.
प्रणाली तुमचा दस्तऐवज प्रक्रिया करते, त्याला भागांमध्ये विभागते, आणि प्रत्येक भागासाठी एम्बेडिंग तयार करते. हे तुम्ही अपलोड करताच स्वयंचलितपणे होते.
प्रश्न विचारा
आता दस्तऐवजातील विशिष्ट प्रश्न विचारा. दस्तऐवजामध्ये स्पष्टपणे नमूद केलेलं काहीतरी तथ्याचा प्रश्न विचारा. प्रणाली संबंधित भाग शोधते, त्यांना प्रॉम्प्टमध्ये समाविष्ट करते आणि उत्तर निर्माण करते.
स्रोत संदर्भ तपासा
प्रत्येक उत्तरासह स्रोत संदर्भ आणि सादृश्यता स्कोअर दिले जातात. हे स्कोअर (0 ते 1) दाखवतात की प्रत्येक भाग तुमच्या प्रश्नाशी किती संबंधित होता. जास्त स्कोअर म्हणजे उत्तम जुळणी. या द्वारे तुम्ही उत्तर स्रोत सामग्रीशी तपासू शकता.
ही स्क्रीनशॉट क्वेरी निकाल दाखवते, ज्यामध्ये तयार केलेले उत्तर, स्रोत संदर्भ आणि प्रत्येक मिळवलेल्या भागासाठी सादृश्यता स्कोअर आहे.
प्रश्नांसह प्रयोग करा
वेगवेगळ्या प्रकारचे प्रश्न विचारून पहा:
- विशिष्ट तथ्य: "मुख्य विषय काय आहे?"
- तुलना: "X आणि Y मधील फरक काय आहे?"
- सारांश: "Z बद्दल मुख्य मुद्दे सारांश करा"
प्रश्नाच्या दस्तऐवजाशी जुळण्यानुसार सादृश्यता स्कोअर कसे बदलतात ते पाहा.
मुख्य संकल्पना
भागांमध्ये विभागणी धोरण
दस्तऐवज 300-टोकन च्या भागांमध्ये विभागले जातात ज्यात 30 टोकन ओव्हरलॅप असतो. हे संतुलन सुनिश्चित करते की प्रत्येक भागात पुरेसा संदर्भ आहे जेणेकरून तो अर्थपूर्ण राहतो आणि तो इतका लहान आहे की अनेक भाग प्रॉम्प्टमध्ये समाविष्ट करता येतात.
सादृश्यता स्कोअर
प्रत्येक मिळालेला भाग 0 ते 1 दरम्यान सादृश्यता स्कोअर सह येतो जो वापरकर्त्याच्या प्रश्नाशी त्याची जुळणारी सादृश्यता दर्शवतो. खालील आकृती स्कोअर श्रेणी आणि त्यांचा उपयोग निकाल फिल्टर करण्यासाठी कसा होतो हे दर्शवते:
ही आकृती 0 ते 1 पर्यंतची स्कोअर श्रेणी दाखवते, ज्यात किमान थ्रेशोल्ड 0.5 आहे जे अवांछित भाग फिल्टर करते.
स्कोअर रेंज:
- 0.7-1.0: अत्यंत संबंधित, अचूक जुळणी
- 0.5-0.7: संबंधित, चांगला संदर्भ
- 0.5 खाली: फिल्टर केलेले, फारसी वेगळे
प्रणाली गुणवत्ता सुनिश्चित करण्यासाठी फक्त किमान थ्रेशोल्ड पेक्षा जास्त स्कोअर असलेले भाग परत करते.
एम्बेडिंग्स तेव्हा चांगले कार्य करतात जेव्हा अर्थाने क्लस्टर स्वच्छ असतात, पण त्यात अडचणी देखील असतात. खालील आकृती सामान्य त्रुटीचे प्रकार दाखवते — खूप मोठे भाग अस्पष्ट व्हेक्टर तयार करतात, खूप लहान भागांना संदर्भ नसतो, अस्पष्ट संज्ञा अनेक क्लस्टर्सकडे निर्देश करतात, आणि अचूक-जुळणी शोध (IDs, भाग क्रमांक) एमबेडिंग्जशी नसतात:
ही आकृती सामान्य एम्बेडिंग त्रुटी प्रकार दाखवते: खूप मोठे भाग, खूप लहान भाग, बहुउद्देशीय संज्ञा जी विविध क्लस्टर्स दाखवतात, आणि अचूक-जुळणी शोध (IDs) जे एम्बेडिंग्जशी जुळत नाहीत.
इन-मेमरी संचयन
सोपेसाठी हा मॉड्युल इन-मेमरी संचयन वापरतो. अनुप्रयोग पुन्हा सुरू केल्यास अपलोड केलेली दस्तऐवज गहाळ होतात. व्यावसायिक प्रणाली Qdrant किंवा Azure AI Search सारख्या कायमस्वरूपी व्हेक्टर डेटाबेस वापरतात.
संदर्भ विंडो व्यवस्थापन
प्रत्येक मॉडेलची कमाल संदर्भ विंडो असते. तुम्ही मोठ्या दस्तऐवजातील प्रत्येक भाग समाविष्ट करू शकत नाही. प्रणाली शीर्ष N सर्वाधिक संबंधित भाग (डिफॉल्ट 5) शोधते जेणेकरून मर्यादांमध्ये राहून अचूक उत्तरासाठी पुरेसा संदर्भ दिला जातो.
RAG कधी महत्त्वाचा आहे
RAG नेहमीच योग्य पद्धत नाही. खालील निर्णय मार्गदर्शक तुम्हाला ठरवण्यास मदत करतो की RAG कधी मूल्य वाढवतो आणि कधी सोप्प्या पद्धती जसे की थेट प्रॉम्प्टमध्ये सामग्री समाविष्ट करणे किंवा मॉडेलच्या अंतर्निर्मित ज्ञानावर अवलंबून राहणे पुरेसे असतात:
ही आकृती दाखवते की RAG कधी मूल्य वाढवतो आणि कधी सोप्या पद्धती पुरेसे असतात.
पुढील पावले
पुढील मॉड्युल: 04-tools - AI एजंट्स विथ टूल्स
नेव्हिगेशन: ← मागील: Module 02 - Prompt Engineering | मुख्यपृष्ठावर परत | पुढे: Module 04 - Tools →
अस्वीकरण: हा दस्तऐवज AI अनुवाद सेवा Co-op Translator वापरून अनुवादित केला आहे. आम्ही अचूकतेसाठी प्रयत्न करतो, तरी कृपया लक्षात ठेवा की स्वयंचलित अनुवादांमध्ये चुका किंवा अचूकतेतील त्रुटी असू शकतात. मूळ दस्तऐवज त्याच्या स्थानिक भाषेत अधिकृत स्रोत म्हणून मानला जावा. महत्त्वाच्या माहितीच्या बाबतीत व्यावसायिक मानवी अनुवाद करण्याचा सल्ला दिला जातो. या अनुवादाच्या वापरामुळे उद्भवणाऱ्या कुठल्याही गैरसमज किंवा चुकीच्या अर्थलावासाठी आम्ही जबाबदार नाही.


