paint-brush
ज्ञान प्रबंधन के लिए एआई: क्यूई-आरएजी आर्किटेक्चर के साथ आरएजी पर पुनरावृत्तिद्वारा@shanglun
4,226 रीडिंग
4,226 रीडिंग

ज्ञान प्रबंधन के लिए एआई: क्यूई-आरएजी आर्किटेक्चर के साथ आरएजी पर पुनरावृत्ति

द्वारा Shanglun Wang27m2023/09/12
Read on Terminal Reader

बहुत लंबा; पढ़ने के लिए

रिट्रीवल-ऑगमेंटेड जेनरेशन, या आरएजी, शक्तिशाली एलएलएम ऐप्स विकसित करने के लिए एक लोकप्रिय आर्किटेक्चर है। हालाँकि, वर्तमान वास्तुकला की कुछ वास्तविक सीमाएँ हैं। हम एक RAG एप्लिकेशन का निर्माण करते हैं, फिर देखते हैं कि QE-RAG नामक एक नए आर्किटेक्चर का उपयोग करके हम इसे कैसे सुधार सकते हैं
featured image - ज्ञान प्रबंधन के लिए एआई: क्यूई-आरएजी आर्किटेक्चर के साथ आरएजी पर पुनरावृत्ति
Shanglun Wang HackerNoon profile picture


जैसे-जैसे एलएलएम क्रांति आकार लेने लगी है, प्रचार ने व्यावसायिक विकास का मार्ग प्रशस्त कर दिया है। जैसे-जैसे उत्साह की प्रारंभिक लहर कम होती जाती है, जेनरेटिव एआई को अब एक सर्वज्ञ ब्लैक बॉक्स के रूप में नहीं देखा जाता है, बल्कि एक इंजीनियर के शस्त्रागार में एक घटक, यदि बेहद शक्तिशाली, उपकरण के रूप में देखा जाता है। परिणामस्वरूप, उद्यमियों और प्रौद्योगिकीविदों के पास अब उपकरणों और तकनीकों का एक परिपक्व सेट है जिसके साथ एलएलएम अनुप्रयोगों को विकसित किया जा सकता है।


एलएलएम के लिए सबसे दिलचस्प उपयोग मामलों में से एक ज्ञान प्रबंधन का क्षेत्र रहा है। ओपनएआई की जीपीटी तकनीक या एलएलएएमए 2 और फ़्लान-टी5 जैसे ओपन-सोर्स मॉडल पर आधारित विशिष्ट एलएलएम का उपयोग बड़ी मात्रा में डेटा को प्रबंधित करने के लिए चतुर तरीकों से किया जा रहा है। जहां पहले बड़े टेक्स्ट डेटासेट वाले संगठनों को फ़ज़ी मिलान या पूर्ण-पाठ अनुक्रमणिका जैसी टेक्स्ट खोज तकनीकों पर निर्भर रहना पड़ता था, अब उनके पास एक शक्तिशाली प्रणाली तक पहुंच है जो न केवल जानकारी ढूंढ सकती है बल्कि इसे समय-कुशल और पाठक-अनुकूल तरीके से सारांशित कर सकती है। पहनावा।


इस उपयोग के मामले में, पुनर्प्राप्ति-संवर्धित पीढ़ी वास्तुकला , या आरएजी, अत्यधिक लचीलेपन और प्रदर्शन के साथ एक असाधारण वास्तुकला के रूप में उभरा है। इस वास्तुकला के साथ, संगठन किसी कार्य को शीघ्रता से अनुक्रमित कर सकते हैं, उस पर अर्थ संबंधी प्रश्न पूछ सकते हैं, और कॉर्पस के आधार पर उपयोगकर्ता द्वारा परिभाषित प्रश्नों के लिए सूचनात्मक और ठोस उत्तर उत्पन्न कर सकते हैं। आरएजी आर्किटेक्चर के कार्यान्वयन का समर्थन करने के लिए कई कंपनियां और सेवाएं सामने आई हैं, जो इसकी स्थायित्व शक्ति को उजागर करती हैं।


RAG जितना प्रभावी हो सकता है, इस वास्तुकला की कई वास्तविक सीमाएँ भी हैं। इस लेख में, हम RAG आर्किटेक्चर का पता लगाएंगे, इसकी सीमाओं की पहचान करेंगे और इन सीमाओं को हल करने के लिए एक बेहतर आर्किटेक्चर का प्रस्ताव करेंगे।


अन्य सभी लेखों की तरह, मैं अन्य प्रौद्योगिकीविदों और एआई उत्साही लोगों से जुड़ना चाहता हूं। यदि आपके पास इस बारे में विचार हैं कि इस आर्किटेक्चर को कैसे बेहतर बनाया जा सकता है, या एआई के बारे में आपके पास ऐसे विचार हैं जिन पर आप चर्चा करना चाहेंगे, तो कृपया हमसे संपर्क करने में संकोच न करें ! आप मुझे जीथब या लिंक्डइन पर पा सकते हैं, लिंक मेरी प्रोफ़ाइल के साथ-साथ इस लेख के नीचे भी हैं।


सामग्री अवलोकन

  • पुनर्प्राप्ति संवर्धित पीढ़ी (आरएजी) वास्तुकला
  • आरएजी आर्किटेक्चर की सीमाएँ
  • QE-RAG, या प्रश्न-संवर्धित RAG का प्रस्ताव
  • निष्कर्ष


पुनर्प्राप्ति संवर्धित पीढ़ी (आरएजी) वास्तुकला

RAG, फ़्लान और LLaMa जैसे नामों के साथ, AI समुदाय के भविष्यवादी और स्टाइलिश नामों के लिए निकट भविष्य में पुरस्कार जीतने की संभावना नहीं है। हालाँकि, आरएजी आर्किटेक्चर निश्चित रूप से एलएलएम के विकास द्वारा उपलब्ध कराई गई दो बेहद शक्तिशाली तकनीकों - प्रासंगिक दस्तावेज़ एम्बेडिंग और त्वरित इंजीनियरिंग के संयोजन के लिए एक पुरस्कार का हकदार है।


अपने सरलतम रूप में, आरएजी आर्किटेक्चर एक ऐसी प्रणाली है जो किसी प्रश्न के लिए सबसे अधिक प्रासंगिक कॉर्पस के भाग(भागों) को खोजने के लिए एम्बेडिंग वेक्टर खोज का उपयोग करती है, भाग(भागों) को प्रॉम्प्ट में सम्मिलित करती है, और फिर यह सुनिश्चित करने के लिए शीघ्र इंजीनियरिंग का उपयोग करती है उत्तर प्रॉम्प्ट में दिए गए अंशों पर आधारित है। यदि यह सब थोड़ा भ्रमित करने वाला लगता है, तो कृपया आगे पढ़ें क्योंकि मैं प्रत्येक घटक को बारी-बारी से समझाऊंगा। मैं उदाहरण कोड भी शामिल करूंगा ताकि आप अनुसरण कर सकें।


एंबेडिंग मॉडल

सबसे पहले और सबसे महत्वपूर्ण, एक प्रभावी आरएजी प्रणाली के लिए एक शक्तिशाली एम्बेडिंग मॉडल की आवश्यकता होती है। एम्बेडिंग मॉडल एक प्राकृतिक टेक्स्ट दस्तावेज़ को संख्याओं की श्रृंखला या "वेक्टर" में बदल देता है, जो मोटे तौर पर दस्तावेज़ की अर्थ सामग्री का प्रतिनिधित्व करता है। यह मानते हुए कि एम्बेडिंग मॉडल एक अच्छा है, आप दो अलग-अलग दस्तावेज़ों के अर्थ संबंधी मूल्यों की तुलना करने में सक्षम होंगे और वेक्टर अंकगणित का उपयोग करके यह निर्धारित कर सकेंगे कि क्या दोनों दस्तावेज़ शब्दार्थ रूप से समान हैं।


इसे क्रियान्वित रूप से देखने के लिए, निम्नलिखित कोड को पायथन फ़ाइल में पेस्ट करें और इसे चलाएँ:


 import openai from openai.embeddings_utils import cosine_similarity openai.api_key = [YOUR KEY] EMBEDDING_MODEL = "text-embedding-ada-002" def get_cos_sim(input_1, input_2): embeds = openai.Embedding.create(model=EMBEDDING_MODEL, input=[input_1, input_2]) return cosine_similarity(embeds['data'][0]['embedding'], embeds['data'][1]['embedding']) print(get_cos_sim('Driving a car', 'William Shakespeare')) print(get_cos_sim('Driving a car', 'Riding a horse'))



उपरोक्त कोड कोसाइन समानता एल्गोरिथ्म का उपयोग करके एक दूसरे के साथ तुलना करने से पहले "कार चलाना", "विलियम शेक्सपियर" और "घोड़े की सवारी" वाक्यांशों के लिए एम्बेडिंग उत्पन्न करता है। हम उम्मीद करेंगे कि कोसाइन समानता तब अधिक होगी जब वाक्यांश शब्दार्थ की दृष्टि से समान हों, इसलिए "कार चलाना" और "घोड़े की सवारी करना" बहुत करीब होना चाहिए, जबकि "कार चलाना" और "विलियम शेक्सपियर" भिन्न होना चाहिए।


आपको यह देखना चाहिए कि, OpenAI के एम्बेडिंग मॉडल, ada-002 के अनुसार, वाक्यांश "कार चलाना" वाक्यांश "घोड़े की सवारी" के समान 88% और वाक्यांश "विलियम शेक्सपियर" के समान 76% है। इसका मतलब है कि एम्बेडिंग मॉडल हमारी अपेक्षा के अनुरूप प्रदर्शन कर रहा है। शब्दार्थ समानता का यह निर्धारण आरएजी प्रणाली की नींव है।


जब आप इसे बहुत बड़े दस्तावेज़ों की तुलना में विस्तारित करते हैं तो कोसाइन समानता का विचार उल्लेखनीय रूप से मजबूत होता है। उदाहरण के लिए, शेक्सपियर के मैकबेथ, " टुमॉरो, एंड टुमॉरो, एंड टुमॉरो " से शक्तिशाली एकालाप लें:


 monologue = '''Tomorrow, and tomorrow, and tomorrow, Creeps in this petty pace from day to day, To the last syllable of recorded time; And all our yesterdays have lighted fools The way to dusty death. Out, out, brief candle! Life's but a walking shadow, a poor player, That struts and frets his hour upon the stage, And then is heard no more. It is a tale Told by an idiot, full of sound and fury, Signifying nothing.''' print(get_cos_sim(monologue, 'Riding a car')) print(get_cos_sim(monologue, 'The contemplation of mortality'))


आपको देखना चाहिए कि यह एकालाप "कार की सवारी" के विचार से केवल 75% समान है और "मृत्यु दर पर चिंतन" के विचार से 82% समान है।


लेकिन हमें केवल विचारों के साथ एकालाप की तुलना नहीं करनी है, हम वास्तव में एकालाप की तुलना प्रश्नों से कर सकते हैं। उदाहरण के लिए:


 get_cos_sim('''Tomorrow, and tomorrow, and tomorrow, Creeps in this petty pace from day to day, To the last syllable of recorded time; And all our yesterdays have lighted fools The way to dusty death. Out, out, brief candle! Life's but a walking shadow, a poor player, That struts and frets his hour upon the stage, And then is heard no more. It is a tale Told by an idiot, full of sound and fury, Signifying nothing.''', 'Which Shakespearean monologue contemplates mortality?') get_cos_sim('''Full of vexation come I, with complaint Against my child, my daughter Hermia. Stand forth, Demetrius. My noble lord, This man hath my consent to marry her. Stand forth, Lysander. And my gracious Duke, This man hath bewitch'd the bosom of my child. Thou, thou, Lysander, thou hast given her rhymes, And interchanged love-tokens with my child: Thou hast by moonlight at her window sung With feigning voice verses of feigning love, And stol'n the impression of her fantasy With bracelets of thy hair, rings, gauds, conceits, Knacks, trifles, nosegays, sweetmeats (messengers Of strong prevailment in unharden'd youth): With cunning hast thou filch'd my daughter's heart, Turn'd her obedience, which is due to me, To stubborn harshness. And, my gracious Duke, Be it so she will not here, before your Grace, Consent to marry with Demetrius, I beg the ancient privilege of Athens: As she is mine, I may dispose of her; Which shall be either to this gentleman, Or to her death, according to our law Immediately provided in that case.''', 'Which Shakespearean monologue contemplates mortality?')



आपको यह देखना चाहिए कि एम्बेडिंग से पता चलता है कि मैकबेथ का एकालाप, प्रासंगिक रूप से, इस प्रश्न के बहुत करीब है कि "शेक्सपियर का कौन सा एकालाप मृत्यु दर पर विचार करता है?" एगियस मोनोलॉग की तुलना में, जो मृत्यु का उल्लेख करता है लेकिन मृत्यु दर की अवधारणा से सीधे तौर पर नहीं जुड़ा है।


वेक्टर लुकअप

अब जब हमारे पास एम्बेडिंग है, तो हम इसे अपने RAG सिस्टम में कैसे उपयोग करेंगे? ठीक है, मान लीजिए कि हम अपने आरएजी सिस्टम को शेक्सपियर के सभी एकालापों का ज्ञान देना चाहते हैं ताकि वह शेक्सपियर के बारे में सवालों के जवाब दे सके। इस मामले में, हम शेक्सपियर के सभी मोनोलॉग डाउनलोड करेंगे, और उनके लिए एम्बेडिंग तैयार करेंगे। यदि आप अनुसरण कर रहे हैं, तो आप इस प्रकार एम्बेडिंग उत्पन्न कर सकते हैं:



 embedding = openai.Embedding.create(model=EMBEDDING_MODEL, input=[monologue])['data'][0]['embedding']


एक बार हमारे पास एम्बेडिंग हो जाने के बाद, हम उन्हें इस तरह से संग्रहीत करना चाहेंगे जिससे हमें क्वेरी करने और नई एम्बेडिंग के साथ उनकी तुलना करने की अनुमति मिल सके। आम तौर पर हम उन्हें वेक्टर डेटाबेस में डालते हैं, जो एक विशेष डेटा स्टोर है जो दो वैक्टरों की तेज़ तुलना की अनुमति देता है। हालाँकि, जब तक आपका कोष बहुत बड़ा न हो, अधिकांश गैर-उत्पादन, प्रयोगात्मक उपयोग के मामलों के लिए जानवर-बल की तुलना आश्चर्यजनक रूप से सहनीय होती है जहां प्रदर्शन महत्वपूर्ण नहीं होता है।


चाहे आप डेटाबेस का उपयोग करना चाहें या नहीं, आप एक ऐसा सिस्टम बनाना चाहेंगे जो आपके कोष में वह आइटम ढूंढ सके जो प्रश्न के लिए सबसे उपयुक्त हो। हमारे उदाहरण में, हम उस एकालाप को ढूंढने की क्षमता चाहते हैं जो उपयोगकर्ता के प्रश्न के लिए सबसे अधिक प्रासंगिक है। आप शायद कुछ ऐसा करना चाहेंगे:



 monologues_embeddings = [ ['Tomorrow, and tomorrow, and tomorrow...', [...]], # text in the left position, embedding in the right position ['Full of vexation come I...', [...]], … # More monologues and their embeddings as you see fit. ] def lookup_most_relevant(question): embed = openai.Embedding.create(model=EMBEDDING_MODEL, input=[question])['data'][0]['embedding'] top_monologue = sorted(monologues_embeddings, key=lambda x: cosine_similarity(embed, x[1]), reverse=True)[0] return top_monologue lookup_most_relevant(“How does Macbeth evaluate his life when he is confronted with his mortality?“)


यदि आप यह उदाहरण चलाते हैं, तो आपको मैकबेथ मोनोलॉग का चयन होते हुए देखना चाहिए, जिसमें प्रश्न से लगभग 82% समानता है।


शीघ्र इंजीनियरिंग

RAG मॉडल का अंतिम चरण प्रॉम्प्ट इंजीनियरिंग है। हमारे मामले में, यह बहुत मुश्किल नहीं है. अब जब हमारे पास एकालाप है, तो हम केवल अपनी क्वेरी में एकालाप को शामिल करके एक संकेत तैयार कर सकते हैं, फिर प्रश्न पूछ सकते हैं:


 completion = openai.ChatCompletion.create( model="gpt-4", messages=[ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": """ Consider the following monologue: Tomorrow, and tomorrow, and tomorrow, Creeps in this petty pace from day to day, To the last syllable of recorded time; And all our yesterdays have lighted fools The way to dusty death. Out, out, brief candle! Life's but a walking shadow, a poor player, That struts and frets his hour upon the stage, And then is heard no more. It is a tale Told by an idiot, full of sound and fury, Signifying nothing. How does Macbeth evaluate his life when he is confronted with his mortality? """}, ] )


आपको ऐसा उत्तर देखना चाहिए:


 In the well-known "Tomorrow and tomorrow and tomorrow" monologue from Shakespeare's Macbeth, the titular character plunges into existential despair when confronted with his impending death. Macbeth evaluates his life as hollow, futile, and meaningless when facing his mortality. He sees it as a "walking shadow" and himself as a "poor player," highlighting his view of life as a fleeting, contrived performance with no lasting substance or impact. The "brief candle" is a metaphor for his own mortality, suggesting that life's flame can be extinguished suddenly and unceremoniously. By stating "It is a tale told by an idiot, full of sound and fury, signifying nothing," Macbeth is expressing his belief that life, despite all its noise and action, is ultimately empty, absurd, and void of meaning. Overall, Macbeth's examination of his life is profoundly pessimistic, revealing his deep despair and cynicism.


बेशक, यह विशेष उदाहरण आरएजी वास्तुकला का सबसे शक्तिशाली प्रदर्शन नहीं है, क्योंकि अधिकांश जीपीटी मॉडल पहले से ही शेक्सपियर के मोनोलॉग से अवगत हैं और उन्हें इंटरनेट पर सार्वजनिक रूप से शेक्सपियर के विश्लेषण के बड़े निकाय पर प्रशिक्षित किया गया है। वास्तव में, यदि आप जीपीटी-4 से बिना किसी एकालाप के यह सटीक प्रश्न पूछते हैं, तो आपको संभवतः एक बहुत अच्छा उत्तर मिलेगा, हालांकि यह संभवतः एकालाप के उतने अधिक उद्धरण संदर्भ नहीं देगा। हालाँकि, यह स्पष्ट होना चाहिए कि, व्यावसायिक सेटिंग में, इस तकनीक को मालिकाना या गूढ़ डेटासेट पर क्रॉस-लागू किया जा सकता है जो मौजूदा जीपीटी कार्यान्वयन के लिए पहुंच योग्य नहीं हैं।


वास्तव में, जो पाठक मेरे पिछले लेख, चैटजीपीटी, गूगल क्लाउड और पायथन के साथ एक दस्तावेज़ विश्लेषक का निर्माण से परिचित हैं, वे पहचान सकते हैं कि तकनीक का अंतिम भाग उस त्वरित इंजीनियरिंग के समान है जो मैंने उस लेख में किया था। उस विचार को आगे बढ़ाते हुए, हम बहुत आसानी से जापानी सरकार के प्रकाशनों (उस लेख से नमूना डेटा) के शीर्ष पर निर्मित एक आरएजी प्रणाली की कल्पना कर सकते हैं, जो उपयोगकर्ताओं को जापानी आर्थिक नीति के बारे में खोजने और प्रश्न पूछने की अनुमति देगा। सिस्टम सबसे अधिक प्रासंगिक दस्तावेज़ों को शीघ्रता से पुनर्प्राप्त करेगा, उन्हें सारांशित करेगा, और आधार GPT मॉडल के लिए उपलब्ध नहीं होने वाले गहन डोमेन-विशिष्ट ज्ञान के आधार पर उत्तर तैयार करेगा। यह शक्ति और सरलता ही वह कारण है जिसके कारण आरएजी आर्किटेक्चर को एलएलएम डेवलपर्स के बीच बहुत अधिक आकर्षण मिल रहा है।


अब जब हम RAG आर्किटेक्चर के बारे में जान चुके हैं, तो आइए इस आर्किटेक्चर की कुछ कमियों का पता लगाएं।


आरएजी आर्किटेक्चर की सीमाएँ

एम्बेडिंग डिबगबिलिटी

चूँकि कई RAG प्रणालियाँ प्रश्न और संबंधित दस्तावेज़ों को जोड़ने के लिए दस्तावेज़ एम्बेडिंग और वेक्टर खोज पर निर्भर करती हैं, इसलिए पूरा सिस्टम अक्सर उपयोग किए गए एम्बेडिंग मॉडल जितना ही अच्छा होता है। OpenAI एम्बेडिंग मॉडल अविश्वसनीय रूप से लचीला है, और एम्बेडिंग को ट्यून करने के लिए कई तकनीकें हैं। LLaMa, मेटा का GPT का ओपन-सोर्स प्रतियोगी, फाइन-ट्यून करने योग्य एम्बेडिंग मॉडल पेश करता है। हालाँकि, एंबेडिंग मॉडल में एक अपरिहार्य ब्लैक-बॉक्स पहलू है। जब छोटे टेक्स्ट स्ट्रिंग्स की तुलना अधिक लंबे दस्तावेज़ों से करने की बात आती है तो यह कुछ हद तक प्रबंधनीय होता है। हमारे पिछले उदाहरण में, हमें विश्वास की एक छोटी सी छलांग लगानी होगी कि एम्बेडिंग लुकअप "मृत्यु दर" को "कल, और कल, और कल" एकालाप से जोड़ने में सक्षम है। यह उन कार्यभारों के लिए काफी असुविधाजनक हो सकता है जहां पारदर्शिता और डिबगबिलिटी महत्वपूर्ण हैं।

प्रसंग अधिभार

आरएजी मॉडल की एक और सीमा संदर्भ की अपेक्षाकृत सीमित मात्रा है जिसे इसे पारित किया जा सकता है। क्योंकि एम्बेडिंग मॉडल को अच्छी तरह से काम करने के लिए दस्तावेज़-स्तरीय संदर्भ की आवश्यकता होती है, हमें एम्बेडिंग के लिए कॉर्पस को काटते समय सावधान रहने की आवश्यकता होती है। मैकबेथ एकालाप में मृत्यु दर के बारे में प्रश्न के साथ 82% समानता हो सकती है, लेकिन जब आप प्रश्न की तुलना उस एकालाप की पहली दो पंक्तियों के एम्बेडिंग से करते हैं, यानी, "कल, और कल, और" तो यह संख्या घटकर 78% हो जाती है। कल। इस क्षुद्र गति में दिन-ब-दिन रेंगता रहता है, रिकॉर्ड किए गए समय के अंतिम अक्षर तक।''


परिणामस्वरूप, आरएजी प्रॉम्प्ट को पारित किया जाने वाला संदर्भ काफी बड़ा होना चाहिए। वर्तमान में, सबसे उच्च-संदर्भ जीपीटी मॉडल अभी भी 16,000 टोकन तक सीमित हैं, जो कि काफी पाठ है, लेकिन जब आप लंबे साक्षात्कार प्रतिलेखों या संदर्भ-समृद्ध लेखों के साथ काम कर रहे हैं, तो आप सीमित होंगे कि आप कितना संदर्भ दे सकते हैं अंतिम पीढ़ी के प्रॉम्प्ट में।

उपन्यास शब्दावली

RAG मॉडल की अंतिम सीमा नवीन शब्दावली के साथ काम करने में इसकी असमर्थता है। विशिष्ट क्षेत्रों में काम करने वाले लोग ऐसी शब्दावली और बोलने के तरीके विकसित करते हैं जो उस क्षेत्र के लिए अद्वितीय होते हैं। जब ये शब्दावली एम्बेडिंग मॉडल के प्रशिक्षण डेटा में मौजूद नहीं होंगी, तो लुकअप प्रक्रिया प्रभावित होगी।


उदाहरण के लिए, ada-002 एम्बेडिंग मॉडल को यह नहीं पता होगा कि "रस्ट प्रोग्रामिंग लैंग्वेज" "LLVM" से संबंधित है। वास्तव में, यह 78% की अपेक्षाकृत कम कोसाइन समानता देता है। इसका मतलब यह है कि एलएलवीएम के बारे में बात करने वाले दस्तावेज़ रस्ट के बारे में एक प्रश्न में मजबूत समानता नहीं दिखा सकते हैं, भले ही दोनों विचार वास्तविक जीवन में निकटता से संबंधित हों।


आमतौर पर, नवीन शब्दावली की समस्या को कुछ त्वरित इंजीनियरिंग से दूर किया जा सकता है, लेकिन एम्बेडिंग खोज के संदर्भ में, ऐसा करना अपेक्षाकृत कठिन है। जैसा कि पहले उल्लेख किया गया है, एम्बेडिंग मॉडल को फाइन-ट्यूनिंग करना संभव है, लेकिन एम्बेडिंग मॉडल को सभी संदर्भों में नई शब्दावली सिखाना त्रुटि-प्रवण और समय लेने वाला हो सकता है।

QE-RAG, या प्रश्न-संवर्धित RAG का प्रस्ताव

इन सीमाओं को देखते हुए, मैं एक संशोधित वास्तुकला का प्रस्ताव करना चाहूंगा जो आरएजी सिस्टम के एक नए वर्ग के कार्यान्वयन की अनुमति देगा जो ऊपर वर्णित कई सीमाओं को दरकिनार कर देगा। यह विचार कॉर्पस के अलावा अक्सर पूछे जाने वाले प्रश्नों पर वेक्टर खोज करने और प्रश्नों के संदर्भ में कॉर्पस को प्रीप्रोसेस करने के लिए एलएलएम का उपयोग करने पर आधारित है। यदि वह प्रक्रिया जटिल लगती है, तो चिंता न करें, हम इस अनुभाग में कार्यान्वयन विवरण के साथ-साथ कोड उदाहरण भी देंगे जिनका उपयोग आप अनुसरण करने के लिए कर सकते हैं।


ध्यान देने वाली एक बात यह है कि QE-RAG को वेनिला RAG कार्यान्वयन के साथ चलाया जाना चाहिए ताकि जरूरत पड़ने पर यह दूसरे कार्यान्वयन पर वापस आ सके। जैसे-जैसे कार्यान्वयन परिपक्व होता है, इसे कम से कम फ़ॉलबैक की आवश्यकता होनी चाहिए, लेकिन क्यूई-आरएजी का उद्देश्य अभी भी वेनिला आरएजी आर्किटेक्चर के प्रतिस्थापन के बजाय एक वृद्धि करना है।


वास्तुकला

QE-RAG आर्किटेक्चर के व्यापक स्ट्रोक इस प्रकार हैं:

  1. प्रश्नों का एक वेक्टर डेटाबेस बनाएं जो कॉर्पस के बारे में पूछे जा सकते हैं या पूछे जाने की संभावना है।
  2. वेक्टर डेटाबेस में प्रश्नों के विरुद्ध कॉर्पस को प्रीप्रोसेस और सारांशित करें।
  3. जब कोई उपयोगकर्ता क्वेरी आती है, तो उपयोगकर्ता क्वेरी की तुलना वेक्टर डेटाबेस में प्रश्नों से करें।
  4. यदि डेटाबेस में कोई प्रश्न उपयोगकर्ता क्वेरी के समान है, तो प्रश्न का उत्तर देने के लिए सारांशित किए गए कॉर्पस के संस्करण को पुनः प्राप्त करें।
  5. उपयोगकर्ता के प्रश्न का उत्तर देने के लिए सारांशित कोष का उपयोग करें।
  6. यदि डीबी में कोई भी प्रश्न उपयोगकर्ता क्वेरी के समान नहीं है, तो वेनिला आरएजी कार्यान्वयन पर वापस आएं।


आइए प्रत्येक भाग को बारी-बारी से देखें।


प्रश्न एंबेडिंग

आर्किटेक्चर, वेनिला आरएजी की तरह, एक एम्बेडिंग और एक वेक्टर डेटाबेस के साथ शुरू होता है। हालाँकि, दस्तावेज़ों को एम्बेड करने के बजाय, हम प्रश्नों की एक श्रृंखला एम्बेड करेंगे।

इसे स्पष्ट करने के लिए, मान लीजिए कि हम एक एलएलएम बनाने की कोशिश कर रहे हैं जो शेक्सपियर पर विशेषज्ञ है। हम शायद चाहेंगे कि यह इन सवालों के जवाब दे:


 questions = [ "How does political power shape the way characters interact in Shakespeare's plays?", "How does Shakespeare use supernatural elements in his plays?", "How does Shakespeare explore the ideas of death and mortality in his plays?", "How does Shakespeare explore the idea of free will in his plays?" ]


हम उनके लिए इस तरह एक एम्बेडिंग बनाना चाहेंगे, और उन्हें सहेजेंगे या बाद में उपयोग करेंगे:


 questions_embed = openai.Embedding.create(model=EMBEDDING_MODEL, input=questions)


प्रीप्रोसेसिंग और सारांशीकरण

अब जब हमारे पास प्रश्न हैं, तो हम कॉर्पस को डाउनलोड करना और सारांशित करना चाहेंगे। इस उदाहरण के लिए, हम मैकबेथ और हैमलेट के HTML संस्करण डाउनलोड करेंगे:


 import openai import os import requests from bs4 import BeautifulSoup plays = { 'shakespeare_macbeth': 'https://www.gutenberg.org/cache/epub/1533/pg1533-images.html', 'shakespeare_hamlet': 'https://www.gutenberg.org/cache/epub/1524/pg1524-images.html', } if not os.path.exists('training_plays'): os.mkdir('training_plays') for name, url in plays.items(): print(name) file_path = os.path.join('training_plays', '%s.txt' % name) if not os.path.exists(file_path): res = requests.get(url) with open(file_path, 'w') as fp_write: fp_write.write(res.text)


फिर हम गाइड के रूप में HTML टैग्स का उपयोग करके नाटकों को दृश्यों में संसाधित करते हैं:


 with open(os.path.join('training_plays', 'shakespeare_hamlet.txt')) as fp_file: soup = BeautifulSoup(''.join(fp_file.readlines())) headers = soup.find_all('div', {'class': 'chapter'})[1:] scenes = [] for header in headers: cur_act = None cur_scene = None lines = [] for i in header.find_all('h2')[0].parent.find_all(): if i.name == 'h2': print(i.text) cur_act = i.text elif i.name == 'h3': print('\t', i.text.replace('\n', ' ')) if cur_scene is not None: scenes.append({ 'act': cur_act, 'scene': cur_scene, 'lines': lines }) lines = [] cur_scene = i.text elif (i.text != '' and not i.text.strip('\n').startswith('ACT') and not i.text.strip('\n').startswith('SCENE') ): lines.append(i.text)


और यहां वह हिस्सा है जो QE-RAG को विशिष्ट बनाता है, विशिष्ट दृश्यों के लिए एम्बेडिंग बनाने के बजाय, हम उनके लिए सारांश बनाते हैं, प्रत्येक प्रश्न के लिए लक्षित:


 def summarize_for_question(text, question, location): completion = openai.ChatCompletion.create( model="gpt-3.5-turbo-16k", messages=[ {"role": "system", "content": "You are a literature assistant that provides helpful summaries."}, {"role": "user", "content": """Is the following excerpt from %s relevant to the following question? %s === %s === If so, summarize the sections that are relevant. Include references to specific passages that would be useful. If not, simply say: \"nothing is relevant\" without additional explanation""" % ( location, question, text )}, ] ) return completion


यह फ़ंक्शन ChatGPT को 2 काम करने के लिए कहता है: 1) पहचानें कि क्या अनुच्छेद वास्तव में प्रश्न का उत्तर देने के लिए उपयोगी है, और 2) दृश्य के उन हिस्सों को संक्षेप में प्रस्तुत करें जो प्रश्न का उत्तर देने के लिए उपयोगी हैं।


यदि आप इस फ़ंक्शन को मैकबेथ या हेमलेट के कुछ महत्वपूर्ण दृश्यों के साथ आज़माते हैं, तो आप देखेंगे कि GPT3.5 यह पहचानने में काफी अच्छा है कि कोई दृश्य प्रश्न के लिए प्रासंगिक है या नहीं, और सारांश दृश्य की तुलना में काफी छोटा होगा। इससे बाद में त्वरित इंजीनियरिंग चरण में एम्बेड करना बहुत आसान हो जाता है।


अब हम सभी दृश्यों के लिए ऐसा कर सकते हैं।


 for scene in scenes: scene_text = ''.join(scene['lines']) question_summaries = {} for question in questions: completion = summarize_for_question(''.join(scene['lines']), question, "Shakespeare's Hamlet") question_summaries[question] = completion.choices[0].message['content'] scene['question_summaries'] = question_summaries


उत्पादन कार्यभार में, हम सारांश को एक डेटाबेस में डालेंगे, लेकिन हमारे मामले में, हम इसे डिस्क पर JSON फ़ाइल के रूप में लिखेंगे।


दो-चरणीय वेक्टर खोज

अब मान लीजिए कि हमें नीचे जैसा एक उपयोगकर्ता प्रश्न मिलता है:


 user_question = "How do Shakespearean characters deal with the concept of death?"


वेनिला आरएजी की तरह, हम प्रश्न के लिए एक एम्बेडिंग बनाना चाहेंगे:


 uq_embed = openai.Embedding.create(model=EMBEDDING_MODEL, input=[user_question])['data'][0]['embedding']


वेनिला आरएजी में, हम शेक्सपियर के दृश्यों के लिए एम्बेडिंग के साथ उपयोगकर्ता प्रश्न एम्बेडिंग की तुलना करेंगे, लेकिन क्यूई-आरएजी में, हम प्रश्नों के साथ एम्बेडिंग की तुलना करेंगे:


 print([cosine_similarity(uq_embed, q) for q in question_embed])


हम देखते हैं कि वेक्टर खोज ने प्रश्न 3 को सबसे अधिक प्रासंगिक प्रश्न के रूप में (सही ढंग से) पहचाना है। अब, हम प्रश्न 3 के लिए सारांश डेटा पुनः प्राप्त करते हैं:


 relevant_texts = [] for scene in hamlet + macbeth: # hamlet and macbeth are the scene lists from the above code if "NOTHING IS RELEVANT" not in scene['question_summaries'][questions[2]].upper() and \ "NOTHING IN THIS EXCERPT" not in scene['question_summaries'][questions[2]].upper() and \ 'NOTHING FROM THIS EXCERPT' not in scene['question_summaries'][questions[2]].upper() and \ "NOT DIRECTLY ADDRESSED" not in scene['question_summaries'][questions[2]].upper(): relevant_texts.append(scene['question_summaries'][questions[2]])


कृपया ध्यान दें, क्योंकि जीपीटी सारांश नियतात्मक नहीं है, आपको यह इंगित करने के लिए कई अलग-अलग तार मिल सकते हैं कि एक दृश्य मौजूदा प्रश्न के लिए प्रासंगिक नहीं है। मुख्य बात केवल प्रासंगिक अंशों को प्रासंगिक सारांशों की सूची में धकेलना है।


इस स्तर पर, हम अपने प्रॉम्प्ट में केवल सबसे अधिक प्रासंगिक सारांश शामिल करने के लिए दूसरे स्तर की वेक्टर खोज कर सकते हैं, लेकिन हमारे कोष के आकार को देखते हुए, हम अपने प्रॉम्प्ट में संपूर्ण relevant_texts सूची का उपयोग कर सकते हैं।


शीघ्र इंजीनियरिंग

अब हमारे पास सभी अंश हैं, हम संकेत इस प्रकार बना सकते हैं:

 completion = openai.ChatCompletion.create( model="gpt-3.5-turbo-16k", messages=[ {"role": "system", "content": "You are a literature assistant that answers questions based on excerpts."}, {"role": "user", "content": """Consider the following passages: %s ==== Answer this question: %s Be detailed and complete in your analysis. Make references to specific passages where helpful. Answer only based on passages provided. """ % ( '\n===\n'.join(relevant_texts), user_question )}, ] )


एपीआई कॉल को चलने दें, और आपको नीचे जैसा कुछ देखना चाहिए:


 Based on the passages provided, Shakespearean characters deal with the concept of death in various ways. In Hamlet, for example, the characters contemplate the nature of death and its implications. Hamlet himself reflects on the brevity of life and the corrupting influence of vices. He questions the purpose of existence and contemplates suicide as a release from the burdens of life. In the passage, Hamlet says, "To die, to sleep— / To sleep, perchance to dream. Ay, there's the rub, / For in that sleep of death what dreams may come" (Lines 65-67). This shows his contemplation of the afterlife and the uncertainty surrounding it. In Macbeth, characters are confronted with the consequences of their actions and the fragility of life. Lady Macbeth, for instance, experiences guilt and remorse for her involvement in the murder of King Duncan. She is haunted by visions of blood on her hands and expresses the desire to escape the consequences of her actions. In the passage, Lady Macbeth says, "Out, damned spot! Out, I say!" (Line 30). This demonstrates her struggle to cope with the guilt and the psychological toll it takes on her. Furthermore, both Macbeth and Lady Macbeth reflect on the inevitability and the consequences of their actions. In the passage, Macbeth laments the decay of life and the loss of purpose and meaning. He reflects on the transitory nature of existence and the insignificance of worldly achievements. Macbeth states, "Life's but a walking shadow, a poor player / That struts and frets his hour upon the stage" (Lines 217-218). This shows his acceptance of mortality and his realization that material possessions and power do not bring true fulfillment. In summary, Shakespearean characters deal with the concept of death in various ways. They contemplate the nature of life and the afterlife, struggle with guilt and remorse, and question the meaning and purpose of their existence. Shakespeare's exploration of death and mortality through his characters provides insight into the complexities of human nature and the universal human experience of confronting one's mortality.


जो एक बहुत अच्छा सारांश है जो हेमलेट और मैकबेथ के कई अलग-अलग हिस्सों से लिया गया है।

तुलना के लिए, मैंने पूरे दृश्यों के लिए एम्बेडिंग बनाई और उसी प्रॉम्प्ट का उपयोग करके एक वेनिला आरएजी लुकअप चलाया, जब तक कि मैं 10,000 टोकन तक नहीं पहुंच गया, शीर्ष एन सबसे प्रासंगिक दृश्यों को ढूंढ लिया।


 relevant_texts = [] for i in range(10): if len(encoding.encode('\n===\n'.join(relevant_texts))) > 10000: break relevant_texts.append(''.join(macbeth[sorted( [(idx, cosine_similarity(uq_embed, q)) for idx, q in enumerate(macbeth_embed)], key=lambda x: x[1], reverse=True )[i][0]]['lines'])) relevant_texts.append(''.join(hamlet[sorted( [(idx, cosine_similarity(uq_embed, q)) for idx, q in enumerate(hamlet_embed)], key=lambda x: x[1], reverse=True )[i][0]]['lines']))


यदि आप इसे प्रॉम्प्ट पर फ़ीड करते हैं, तो आपको नीचे जैसा कुछ देखना चाहिए:


 Based on the provided passages, Shakespearean characters deal with the concept of death in various ways. In Hamlet, the characters reflect on death and mortality extensively. Hamlet himself contemplates suicide, expressing his desire to end his suffering and questioning the purpose of life. He says, "To be, or not to be: that is the question" (Hamlet, Act III, Scene I, Lines 56). This soliloquy reveals his struggle with the concept of death and his contemplation of the consequences of choosing either life or death. Additionally, in the same play, the appearance of the Ghost prompts discussions about death. The characters question the meaning and significance of encountering the dead, and Hamlet grapples with the idea of mortality in relation to his father's death. He reflects, "Oh God! a beast that wants discourse of reason / Would have mourn'd longer" (Hamlet, Act I, Scene II, Lines 152-153). This passage highlights Hamlet's grief and his pondering of the brevity of life and the transitory nature of existence. In Macbeth, the characters also confront death and its consequences. Macbeth, after killing King Duncan, reflects on the significance of the act and its implications. He says, "Will all great Neptune's ocean wash this blood Clean from my hand? No, this my hand will rather The multitudinous seas incarnadine" (Macbeth, Act II, Scene II, Lines 77-79). This passage showcases Macbeth's awareness of the guilt associated with murder and his realization that the blood on his hands cannot be cleansed. Lady Macbeth, on the other hand, shows a different perspective on death. She suppresses her guilt and tries to detach herself from the consequences of their actions. She states, "A little water clears us of this deed" (Macbeth, Act II, Scene II, Line 69). This passage reveals her denial and determination to move forward without remorse. In conclusion, Shakespearean characters deal with the concept of death in various ways. Some contemplate the meaning of life and question the purpose of existence, while others grapple with the guilt and consequences that come with taking a life. Shakespeare explores the complexities of death and mortality through his characters' introspection and their different responses to the inevitability of death.


यह बहुत ठोस विश्लेषण है, लेकिन हेमलेट और मैकबेथ के कई सबसे महत्वपूर्ण अंशों के साथ संलग्न नहीं है। जैसा कि आप देख सकते हैं, मानक RAG सिस्टम की तुलना में अधिक प्रासंगिक संदर्भ को एम्बेड करने में सक्षम होने में QE-RAG का एक विशिष्ट लाभ है।


हालाँकि, उपरोक्त उदाहरण QE-RAG का एक अन्य लाभ प्रदर्शित नहीं करता है, जो डेवलपर को एम्बेडिंग प्रक्रिया पर बेहतर नियंत्रण देने की क्षमता है। यह देखने के लिए कि क्यूई-आरएजी इसे कैसे हासिल करता है, आइए इस समस्या के विस्तार पर नजर डालें - नई शब्दावली से निपटना।


QE-RAG को नई शब्दावली तक विस्तारित करना

QE-RAG वास्तव में तब चमकता है जब आप एक नई शब्दावली पेश कर रहे होते हैं। उदाहरण के लिए, मान लीजिए कि आप एक नई अवधारणा पेश कर रहे हैं, जैसे जापानी शब्द "ज़ेत्सुबौ", जो एक ऐसा शब्द है जो निराशा और निराशा के बीच बैठता है, विशेष रूप से किसी की परिस्थितियों के प्रति समर्पण का संदेश देता है। यह निराशा की अंग्रेजी अवधारणा के समान तुरंत विनाशकारी नहीं है, लेकिन जो अप्रिय चीजें घटित हो रही हैं, उनके प्रति सहमति के बारे में बहुत कुछ है।


मान लीजिए कि हम एक प्रश्न का उत्तर देना चाहते हैं जैसे:


user_question = "How do Shakespearean characters cope with Zetsubou?"


वेनिला आरएजी के साथ हम एक एम्बेडिंग खोज करेंगे, फिर अंतिम प्रॉम्प्ट इंजीनियरिंग चरण में एक व्याख्याता जोड़ेंगे:


 relevant_texts = [] for i in range(10): if len(encoding.encode('\n===\n'.join(relevant_texts))) > 10000: break relevant_texts.append(''.join(macbeth[sorted( [(idx, cosine_similarity(uq_embed, q)) for idx, q in enumerate(macbeth_embed)], key=lambda x: x[1], reverse=True )[i][0]]['lines'])) relevant_texts.append(''.join(hamlet[sorted( [(idx, cosine_similarity(uq_embed, q)) for idx, q in enumerate(hamlet_embed)], key=lambda x: x[1], reverse=True )[i][0]]['lines'])) completion = openai.ChatCompletion.create( model="gpt-3.5-turbo-16k", messages=[ {"role": "system", "content": "You are a literature assistant that answers questions based on excerpts."}, {"role": "user", "content": """Zetsubou is the concept of hopelessness and despair, combined with a surrender to whim of one's circumstances. Consider the following passages: %s ==== Answer this question: %s Be detailed and complete in your analysis. Make references to specific passages where helpful. Answer only based on passages provided. """ % ( '\n===\n'.join(relevant_texts), user_question )}, ] )


परिणाम एक बहुत अच्छी तरह से लिखा गया और ठोस लेकिन हेमलेट के कुछ दृश्यों पर केंद्रित थोड़ा बढ़ा-चढ़ाकर दिया गया उत्तर है। इस उत्तर में मैकबेथ का बिल्कुल भी उल्लेख नहीं किया गया है, क्योंकि कोई भी दृश्य एम्बेडिंग खोज में पास नहीं हुआ। एम्बेडिंग को देखने पर, यह बहुत स्पष्ट है कि "ज़ेत्सुबौ" का अर्थ ठीक से नहीं पकड़ा गया था और इसलिए प्रासंगिक पाठ इससे पुनर्प्राप्त नहीं किए जा सके।


क्यूई-आरएजी में, हम संक्षेपण चरण में नए शब्द की परिभाषा को शामिल कर सकते हैं, जिससे सिस्टम द्वारा सुलभ पाठ की गुणवत्ता में नाटकीय रूप से सुधार हो सकता है:


 def summarize_for_question(text, question, location, context=''): completion = openai.ChatCompletion.create( model="gpt-3.5-turbo-16k", messages=[ {"role": "system", "content": "You are a literature assistant that provides helpful summaries."}, {"role": "user", "content": """%s Is the following excerpt from %s relevant to the following question? %s === %s === If so, summarize the sections that are relevant. Include references to specific passages that would be useful. If not, simply say: \"nothing is relevant\" without additional explanation""" % ( context, location, question, text )}, ] ) return completion questions = [ "How do characters deal with Zetsubou in Shakespearean plays?" ] summarize_for_question(''.join(scene['lines']), questions[0], "Shakespeare's Macbeth", "Zetsubou is the concept of hopelessness and despair, combined with a surrender to whim of one's circumstances." )


अनुच्छेदों के साथ इस सारांशीकरण संकेत का उपयोग करें, और आप ऐसे सारांश देखेंगे जो बेहद सटीक और प्रासंगिक हैं। इन सारांशों का उपयोग बाद के QE-RAG में किया जा सकता है।


इसके अतिरिक्त, प्रश्न एम्बेडिंग बेहद समान होगी, क्योंकि भले ही ada-002 को "ज़ेत्सुबौ" का सटीक अर्थ नहीं पता है, दोनों प्रश्नों में इस शब्द की उपस्थिति प्रश्न एम्बेडिंग को बेहद समान बनाती है।


इसलिए, ज़ेत्सुबौ के बारे में मूल प्रश्न का उत्तर देने के लिए QE-RAG का उपयोग करने पर, हमें निम्नलिखित उत्तर मिलता है:


 Based on the passages provided, Shakespearean characters cope with Zetsubou, or hopelessness and despair, in different ways. In "Macbeth," Lady Macbeth copes with Zetsubou through guilt and anguish. She is consumed by the guilt of her and her husband's actions, and this guilt manifests in her sleepwalking and attempts to wash her hands of imagined blood stains. This can be seen in her utterances of "Out, damned spot!" and her preoccupation with the blood on her hands. Lady Macbeth's coping mechanism is to face the consequences of her actions head-on, even if it means descending into madness. The Doctor and Gentlewoman observe her behavior and acknowledge that her condition requires divine intervention. In "Hamlet," the excerpt does not provide specific passages or examples of characters coping with Zetsubou. However, it does address Hamlet's inner turmoil and struggle to cope with his circumstances. Hamlet's state of mind, confusion, and madness are a reflection of despair. The characters in this scene are attempting to understand Hamlet's condition and find ways to deal with it, but the excerpt does not provide details on how they cope with Zetsubou. In "Macbeth," Macbeth himself copes with Zetsubou by surrendering to his dire circumstances. He becomes desensitized to fear and horror, indicating a kind of resignation to his grim circumstances. He acknowledges that there is no escape from his fate and chooses to face it head-on, even though he knows it will lead to his downfall. Macbeth's reaction to the news of his wife's death and his subsequent soliloquy reflect a deep despair and hopelessness. He sees life as meaningless, a "tale Told by an idiot, full of sound and fury, Signifying nothing." Macbeth's surrender to his circumstances and his belief in the futility of life demonstrate his coping mechanism for Zetsubou. In "Macbeth," Lady Macduff copes with Zetsubou by expressing her feelings of despair and hopelessness. She feels betrayed and abandoned by her husband, who has fled and left their family behind. She questions his actions and believes that they show a lack of love and wisdom. Lady Macduff experiences a sense of abandonment, which aligns with the concept of Zetsubou. She tries to make her son understand the severity of their circumstances, but he questions the definition of a traitor. Lady Macduff ultimately meets a tragic end, indicating that her coping mechanism for Zetsubou is not successful. In summary, Shakespearean characters cope with Zetsubou in different ways. Lady Macbeth copes through guilt and faces the consequences of her actions, even if it means descending into madness. Macbeth copes through surrendering to his dire circumstances and embracing his fate. Lady Macduff copes through expressing her feelings of despair and hopelessness but ultimately meets a tragic end. These characters' coping mechanisms reflect different responses to Zetsubou in Shakespearean plays


आउटपुट अभी भी इस अवधारणा के साथ थोड़ा संघर्ष कर रहा है, लेकिन यह स्पष्ट होना चाहिए कि क्यूई-आरएजी प्रश्न के सार से जुड़ने और विभिन्न स्रोतों से आकर्षित करने में अधिक सक्षम है।

और इसके साथ, हमने QE-RAG लागू किया है, और इसके उपयोग-मामले का प्रदर्शन किया है!


निष्कर्ष

आज के लेख में, हमने तेजी से लोकप्रिय हो रहे आरएजी आर्किटेक्चर और इसकी सीमाओं की जांच की। फिर हमने RAG आर्किटेक्चर को QE-RAG नामक एक नए आर्किटेक्चर के साथ विस्तारित किया, जो बड़े भाषा मॉडल की क्षमताओं का पूरी तरह से उपयोग करता है। बेहतर सटीकता और प्रासंगिक पहुंच के अलावा, क्यूई-आरएजी पूरे सिस्टम को विकसित करने की अनुमति देता है क्योंकि यह उपयोगकर्ताओं के साथ बातचीत करता है और पूछे जाने वाले प्रश्नों के प्रकारों से अधिक परिचित हो जाता है, जिससे फर्मों को ओपन-सोर्स के शीर्ष पर अद्वितीय बौद्धिक संपदा विकसित करने की अनुमति मिलती है। या व्यावसायिक रूप से उपलब्ध एलएलएम

बेशक, एक प्रायोगिक विचार के रूप में, QE-RAG सही नहीं है। यदि आपके पास इस बारे में कोई विचार है कि इस आर्किटेक्चर को कैसे बेहतर बनाया जा सकता है, या बस एलएलएम प्रौद्योगिकियों के बारे में चर्चा करना चाहते हैं, तो कृपया मेरे जीथब या लिंक्डइन के माध्यम से मुझे एक पंक्ति भेजने में संकोच न करें।