पुनर्प्राप्ति-संवर्धित जनरेशन पाइपलाइन
ऐसे RAG प्रवाह तैयार कीजिए, जो मॉडल के उत्तरों को पुनर्प्राप्त दस्तावेज़ों के संदर्भ पर आधारित करें।
पुनर्प्राप्ति-संवर्धित जनरेशन पाइपलाइन, CoddyKit पर Spring Boot 4 की संपूर्ण मार्गदर्शिका का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Spring Boot 4 की संपूर्ण मार्गदर्शिका सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Spring Boot 4 की संपूर्ण मार्गदर्शिका पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
RAG क्यों?
Retrieval-Augmented Generation (RAG) LLM के उत्तरों को आपके अपने दस्तावेज़ों पर आधारित करता है, बजाय इसके कि वह केवल प्रशिक्षण के दौरान याद की गई जानकारी पर निर्भर रहे।
- नया और निजी डेटा — उन आंतरिक दस्तावेज़ों के बारे में प्रश्नों का उत्तर दें जिन्हें मॉडल ने कभी नहीं देखा।
- कम मनगढ़ंत उत्तर — मॉडल तथ्य गढ़ने के बजाय प्राप्त संदर्भ का उल्लेख करता है।
- फ़ाइन-ट्यूनिंग से सस्ता — आप मॉडल के वज़न नहीं, बल्कि वेक्टर स्टोर को अपडेट करते हैं।
Spring AI RAG pipeline के दो चरण होते हैं: एक अंतर्ग्रहण चरण (पढ़ना → बाँटना → एम्बेड करना → संग्रहीत करना) और एक क्वेरी चरण (प्रश्न की एम्बेडिंग बनाना → पुनर्प्राप्त करना → प्रॉम्प्ट को विस्तृत करना → उत्पन्न करना)।
एक नज़र में pipeline
Spring AI दोनों चरणों के लिए संयोज्य building blocks उपलब्ध कराता है। आपके द्वारा जोड़े जाने वाले मुख्य प्रकार ये हैं:
DocumentReader— कच्चे स्रोत लोड करता है (PDF, Markdown, JSON, वेब पेज)।DocumentTransformer— दस्तावेज़ों को खंडों में बाँटता है (जैसेTokenTextSplitter)।EmbeddingModel— टेक्स्ट को वेक्टरों में बदलता है।VectorStore— उन वेक्टरों को संग्रहीत करता है और समानता-खोज करता है।ChatClientऔर एक RAG एडवाइज़र — पुनर्प्राप्ति को अपने-आप प्रॉम्प्ट से जोड़ते हैं।
पहले तीन अंतर्ग्रहण को संचालित करते हैं; अंतिम दो क्वेरी चलाते हैं।
अंतर्ग्रहण: पढ़ना और बाँटना
अंतर्ग्रहण के दौरान आप स्रोत files पढ़ते हैं और उन्हें इतने छोटे खंडों में बाँटते हैं कि वे मॉडल की संदर्भ विंडो में आ जाएँ, साथ ही उनका सिमैंटिक सामंजस्य बना रहे। TokenTextSplitter ओवरलैप के साथ टोकन संख्या के आधार पर खंड बनाता है, ताकि वाक्य के बीच में अर्थ न कटे।
नीचे, एक Markdown file पढ़ी जाती है और संग्रहीत करने से पहले लगभग 800-टोकन वाले खंडों में बाँटी जाती है।
@Component
class DocumentIngestor {
private final VectorStore vectorStore;
DocumentIngestor(VectorStore vectorStore) {
this.vectorStore = vectorStore;
}
void ingest(Resource markdown) {
var reader = new TextReader(markdown);
List<Document> raw = reader.get();
var splitter = new TokenTextSplitter(800, 350, 5, 10000, true);
List<Document> chunks = splitter.apply(raw);
vectorStore.add(chunks);
}
}एम्बेडिंग: टेक्स्ट से वेक्टर तक
एम्बेडिंग एक सघन वेक्टर होता है, जो पाठ का अर्थ समेटे रहता है। एक ही विषय पर लिखे गए दो अंश वेक्टर स्पेस में एक-दूसरे के पास स्थित होते हैं; इसी वजह से समानता खोज काम करती है।
Spring AI आपके स्टार्टर (OpenAI, Azure, Ollama आदि) के आधार पर EmbeddingModel को स्वतः कॉन्फ़िगर करता है। आप इसे सीधे बहुत कम ही कॉल करते हैं — VectorStore इसे आंतरिक रूप से इस्तेमाल करता है — लेकिन आप यह कर सकते हैं:
@Service
class EmbeddingDemo {
private final EmbeddingModel embeddingModel;
EmbeddingDemo(EmbeddingModel embeddingModel) {
this.embeddingModel = embeddingModel;
}
float[] embed(String text) {
return embeddingModel.embed(text);
}
int dimensions() {
return embeddingModel.dimensions();
}
}VectorStore को कॉन्फ़िगर करना
VectorStore एम्बेडिंग को स्थायी रूप से सहेजता है और समानता खोज चलाता है। Spring AI, PgVector, Redis, Chroma, Qdrant, Milvus और एक सरल मेमोरी-आधारित स्टोर के लिए अडैप्टर उपलब्ध कराता है।
spring-ai-starter-vector-store-pgvector निर्भरता के साथ, प्रॉपर्टीज़ से एक बीन स्वतः कॉन्फ़िगर हो जाती है — मैन्युअल वायरिंग की आवश्यकता नहीं होती:
spring:
ai:
vectorstore:
pgvector:
initialize-schema: true
index-type: HNSW
distance-type: COSINE_DISTANCE
dimensions: 1536
datasource:
url: jdbc:postgresql://localhost:5432/ragdb
username: rag
password: secretक्वेरी करना: समानता खोज
क्वेरी के समय आप उपयोगकर्ता के प्रश्न को एक वेक्टर में बदलते हैं और स्टोर से सबसे निकटवर्ती अंश माँगते हैं। SearchRequest परिणामों की संख्या (topK) और कमजोर मिलानों को फ़िल्टर करने के लिए न्यूनतम similarityThreshold नियंत्रित करता है।
List<Document> retrieve(VectorStore store, String question) {
var request = SearchRequest.builder()
.query(question)
.topK(4)
.similarityThreshold(0.7)
.build();
List<Document> hits = store.similaritySearch(request);
return hits;
}प्रॉम्प्ट को मैन्युअल रूप से बढ़ाना
सलाहकारों का उपयोग करने से पहले, इस प्रक्रिया को समझ लेना उपयोगी है। RAG, सरल शब्दों में, पुनर्प्राप्त किए गए पाठ को प्रॉम्प्ट में जोड़ता है और मॉडल को केवल उसी के आधार पर उत्तर देने का निर्देश देता है। यही "बढ़ाने" वाला चरण है:
String answer(ChatClient chat, VectorStore store, String question) {
List<Document> docs = store.similaritySearch(
SearchRequest.builder().query(question).topK(4).build());
String context = docs.stream()
.map(Document::getText)
.collect(Collectors.joining("\n---\n"));
return chat.prompt()
.system("Answer using ONLY the context. If unknown, say you don't know.")
.user(u -> u.text("Context:\n{ctx}\n\nQuestion: {q}")
.param("ctx", context)
.param("q", question))
.call()
.content();
}QuestionAnswerAdvisor
Spring AI इस मैन्युअल पैटर्न को QuestionAnswerAdvisor के रूप में उपलब्ध कराता है। आप इसे ChatClient से जोड़ते हैं और यह प्रत्येक कॉल के लिए समानता खोज चलाकर संदर्भ को पारदर्शी रूप से जोड़ देता है।
Spring Boot 4 में RAG करने का यह मुहावरेदार, घोषणात्मक तरीका है:
@Service
class RagAssistant {
private final ChatClient chatClient;
RagAssistant(ChatClient.Builder builder, VectorStore vectorStore) {
this.chatClient = builder
.defaultAdvisors(new QuestionAnswerAdvisor(vectorStore))
.build();
}
String ask(String question) {
return chatClient.prompt()
.user(question)
.call()
.content();
}
}प्रति-अनुरोध पुनर्प्राप्ति का समायोजन
डिफ़ॉल्ट सुविधाजनक होते हैं, लेकिन वास्तविक ऐप्लिकेशन प्रत्येक अनुरोध के अनुसार पुनर्प्राप्ति का समायोजन करते हैं — किसी केंद्रित FAQ को topK=2 की आवश्यकता हो सकती है, जबकि किसी व्यापक शोध-क्वेरी को topK=8 की। कॉल के समय कोई सलाहकार पास करें और उसके SearchRequest को ओवरराइड करें; साथ ही किसी टेनेंट या दस्तावेज़ समूह तक सीमित करने के लिए मेटाडेटा फ़िल्टर लगाएँ:
String ask(ChatClient chatClient, VectorStore store, String q, String tenant) {
var advisor = QuestionAnswerAdvisor.builder(store)
.searchRequest(SearchRequest.builder()
.topK(6)
.similarityThreshold(0.75)
.filterExpression("tenant == '" + tenant + "'")
.build())
.build();
return chatClient.prompt()
.advisors(advisor)
.user(q)
.call()
.content();
}RetrievalAugmentationAdvisor के साथ मॉड्यूलर RAG
उन्नत पाइपलाइन के लिए Spring AI 1.0, RetrievalAugmentationAdvisor के माध्यम से मॉड्यूलर RAG API उपलब्ध कराता है। यह प्रत्येक चरण को बदले जा सकने वाले घटक के रूप में प्रस्तुत करता है:
QueryTransformer— क्वेरी को फिर से लिखता, संक्षिप्त करता या उसका अनुवाद करता है।DocumentRetriever— अंशों का स्रोत (जैसेVectorStoreDocumentRetriever)।QueryAugmenter— यह नियंत्रित करता है कि संदर्भ को कैसे मिलाया जाए और खाली संदर्भ को कैसे संभाला जाए।
var retriever = VectorStoreDocumentRetriever.builder()
.vectorStore(vectorStore)
.similarityThreshold(0.72)
.topK(5)
.build();
var ragAdvisor = RetrievalAugmentationAdvisor.builder()
.queryTransformers(RewriteQueryTransformer.builder()
.chatClientBuilder(chatClientBuilder)
.build())
.documentRetriever(retriever)
.build();
String answer = chatClient.prompt()
.advisors(ragAdvisor)
.user(question)
.call()
.content();खाली संदर्भ से सुरक्षा
RAG की एक सूक्ष्म विफलता यह है: जब पुनर्प्राप्ति में कुछ भी प्रासंगिक नहीं मिलता, तो एक साधारण प्रॉम्प्ट मॉडल को अपने प्रशिक्षण डेटा पर निर्भर होकर मनगढ़ंत उत्तर देने देता है। ContextualQueryAugmenter आपको यह नीति स्पष्ट रूप से तय करने देता है।
आत्मविश्वास से लगाए गए अनुमान के बजाय शालीनता से "मेरे पास इसकी जानकारी नहीं है" कहलवाने के लिए allowEmptyContext(false) सेट करें:
var augmenter = ContextualQueryAugmenter.builder()
.allowEmptyContext(false)
.build();
var ragAdvisor = RetrievalAugmentationAdvisor.builder()
.documentRetriever(retriever)
.queryAugmenter(augmenter)
.build();
// With no matching documents, the model returns a safe
// "no answer available" response instead of fabricating one.त्वरित जाँच
आप एक RAG सहायक बनाते हैं। जब कोई उपयोगकर्ता आपके ज्ञान-आधार से बाहर का प्रश्न पूछता है, तो समानता खोज थ्रेशोल्ड से ऊपर का कोई अंश नहीं लौटाती, फिर भी मॉडल मनगढ़ंत तथ्यों के साथ आत्मविश्वास से उत्तर देता है। इसे सबसे अच्छी तरह ठीक करने वाला बदलाव कौन-सा है?
पुनरावलोकन
आपने Spring AI में एक पूरी RAG पाइपलाइन तैयार की:
- अंतर्ग्रहण —
DocumentReader→TokenTextSplitter→EmbeddingModel→VectorStore.add()। - क्वेरी — प्रश्न का एम्बेड बनाना,
topKऔरsimilarityThresholdके साथsimilaritySearchचलाना, फिर प्रॉम्प्ट को बढ़ाना। - घोषणात्मक RAG —
QuestionAnswerAdvisorपुनर्प्राप्ति कोChatClientमें स्वतः जोड़ता है; कस्टमSearchRequestऔर मेटाडेटा फ़िल्टर के साथ प्रति अनुरोध इसका समायोजन करें। - मॉड्यूलर RAG — उन्नत नियंत्रण के लिए क्वेरी ट्रांसफ़ॉर्मर, पुनर्प्राप्तकर्ता और संवर्धक के साथ
RetrievalAugmentationAdvisor। - सुरक्षा —
ContextualQueryAugmenter.allowEmptyContext(false)प्रासंगिक सामग्री न मिलने पर मनगढ़ंत उत्तरों को रोकता है।
पुनर्प्राप्त संदर्भ में मॉडल के आउटपुट को आधारित करना, LLM सुविधाओं को विश्वसनीय बनाने का सबसे प्रभावी एकल तरीका है।
एआई शिक्षक के साथ Java सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 21
- पाठ
- 84
अक्सर पूछे जाने वाले प्रश्न
क्या “पुनर्प्राप्ति-संवर्धित जनरेशन पाइपलाइन” पाठ निःशुल्क है?
हाँ — Spring Boot 4 की संपूर्ण मार्गदर्शिका अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “पुनर्प्राप्ति-संवर्धित जनरेशन पाइपलाइन” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Spring Boot 4 की संपूर्ण मार्गदर्शिका पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“पुनर्प्राप्ति-संवर्धित जनरेशन पाइपलाइन” में मैं क्या सीखूँगा?
ऐसे RAG प्रवाह तैयार कीजिए, जो मॉडल के उत्तरों को पुनर्प्राप्त दस्तावेज़ों के संदर्भ पर आधारित करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Spring Boot 4 की संपूर्ण मार्गदर्शिका का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Spring Boot 4 की संपूर्ण मार्गदर्शिका शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Spring Boot 4 की संपूर्ण मार्गदर्शिका शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।
“पुनर्प्राप्ति-संवर्धित जनरेशन पाइपलाइन” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Spring Boot 4 की संपूर्ण मार्गदर्शिका पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Spring Boot 4 की संपूर्ण मार्गदर्शिका पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- ChatClient, प्रॉम्प्ट और संरचित आउटपुट
- एम्बेडिंग और वेक्टर स्टोर से पुनर्प्राप्ति
- पुनर्प्राप्ति-संवर्धित जनरेशन पाइपलाइन
- टूल कॉलिंग और एजेंट सलाहकार