छोटी कॉन्टेक्स्ट विंडो में, क्लाइंट-साइड की खास जानकारी को स्केल करना

पब्लिश करने की तारीख: 12 मार्च, 2025

जानकारी देने वाला चिप वेब एक्सटेंशन Chrome का स्टेटस प्रयोजन
GitHub झंडे के पीछे ऑरिजिन ट्रायल झंडे के पीछे ऑरिजिन ट्रायल देखें प्रयोग करने का मकसद

Summarizer API की मदद से, अलग-अलग लंबाई और फ़ॉर्मैट में जानकारी की खास जानकारी जनरेट की जा सकती है. क्लाइंट-साइड इंफ़रेंस करने और मुश्किल या लंबे टेक्स्ट को कम शब्दों में समझाने के लिए, Chrome में Gemini Nano के साथ इसका इस्तेमाल करें.

क्लाइंट-साइड एन्क्रिप्शन का इस्तेमाल करने पर, डेटा को स्थानीय तौर पर एन्क्रिप्ट किया जा सकता है. इससे संवेदनशील डेटा को सुरक्षित रखा जा सकता है और बड़े पैमाने पर उपलब्ध कराया जा सकता है. हालांकि, सर्वर साइड मॉडल के मुकाबले कॉन्टेक्स्ट विंडो काफ़ी छोटी होती है. इसका मतलब है कि बहुत बड़े दस्तावेज़ों की खास जानकारी देना मुश्किल हो सकता है. इस समस्या को हल करने के लिए, खास जानकारी की खास जानकारी तकनीक का इस्तेमाल किया जा सकता है.

खास जानकारी की खास जानकारी क्या है?

खास जानकारी की खास जानकारी तकनीक का इस्तेमाल करने के लिए, इनपुट कॉन्टेंट को मुख्य बिंदुओं पर बांटें. इसके बाद, हर हिस्से की अलग-अलग खास जानकारी दें. हर हिस्से के आउटपुट को आपस में जोड़ा जा सकता है. इसके बाद, इस जोड़े गए टेक्स्ट को एक फ़ाइनल समरी में इकट्ठा किया जा सकता है.

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

अपने कॉन्टेंट को सोच-समझकर बांटना

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

मैन्युअल तरीके के बिना भी, ऐसा करने के कई तरीके हैं. नीचे दिए गए उदाहरण में, हमने LangChain.js से Recursive Text Splitter का इस्तेमाल किया है. इससे परफ़ॉर्मेंस और आउटपुट क्वालिटी में संतुलन बना रहता है. यह ज़्यादातर वर्कलोड के लिए काम करना चाहिए.

नया इंस्टेंस बनाते समय, दो मुख्य पैरामीटर होते हैं:

  • chunkSize, हर स्प्लिट में ज़्यादा से ज़्यादा वर्णों की संख्या है.
  • chunkOverlap, लगातार दो स्प्लिट के बीच ओवरलैप होने वाले वर्णों की संख्या है. इससे यह पक्का होता है कि हर चंक में पिछले चंक का कुछ कॉन्टेक्स्ट हो.

टेक्स्ट को splitText() से अलग करके, हर चंक के साथ स्ट्रिंग का कलेक्शन दिखाएं.

ज़्यादातर एलएलएम की कॉन्टेक्स्ट विंडो, वर्णों की संख्या के बजाय टोकन की संख्या के तौर पर दिखाई जाती है. औसतन, एक टोकन में चार वर्ण होते हैं. इसलिए, किसी इनपुट में इस्तेमाल किए गए टोकन की संख्या का अनुमान लगाने के लिए, वर्णों की संख्या को चार से भाग दें.

हमारे उदाहरण में, chunkSize में 3,000 वर्ण हैं और यह करीब 750 टोकन है.

हर स्प्लिट के लिए खास जानकारी जनरेट करना

कॉन्टेंट को बांटने का तरीका सेट अप करने के बाद, Summarizer API की मदद से हर हिस्से की खास जानकारी जनरेट की जा सकती है.

create() फ़ंक्शन की मदद से, खास जानकारी देने वाले फ़ंक्शन का इंस्टेंस बनाएं. ज़्यादा से ज़्यादा जानकारी देने के लिए, हमने format पैरामीटर को plain-text, type को tl;dr, और length को long पर सेट किया है.

इसके बाद, RecursiveCharacterTextSplitter से बनाए गए हर स्प्लिट के लिए खास जानकारी जनरेट करें और नतीजों को एक नई स्ट्रिंग में जोड़ें. हमने हर खास जानकारी को नई लाइन से अलग किया है, ताकि हर हिस्से की खास जानकारी को साफ़ तौर पर पहचाना जा सके.

इस लूप को सिर्फ़ एक बार चलाने पर, इस नई लाइन का कोई मतलब नहीं है. हालांकि, यह यह तय करने के लिए काम की है कि आखिरी खास जानकारी के लिए, हर खास जानकारी टोकन की वैल्यू में कैसे जोड़ती है. ज़्यादातर मामलों में, यह तरीका मीडियम और लंबी अवधि के वीडियो के लिए काम करेगा.

खास जानकारी की बार-बार दिखने वाली खास जानकारी

अगर आपके पास बहुत ज़्यादा टेक्स्ट है, तो एक साथ जोड़े गए टेक्स्ट की खास जानकारी, कॉन्टेक्स्ट विंडो से ज़्यादा लंबी हो सकती है. इस वजह से, खास जानकारी नहीं बन पाती. इसे ठीक करने के लिए, बार-बार खास जानकारी को छोटा किया जा सकता है.

अगर खास जानकारी की खास जानकारी अब भी बहुत लंबी है, तो इस प्रोसेस को दोहराएं. सिद्धांत रूप से, इस प्रोसेस को तब तक दोहराया जा सकता है, जब तक आपको सही अवधि न मिल जाए.

हम अब भी RecursiveCharacterTextSplitter से जनरेट होने वाले शुरुआती स्प्लिट इकट्ठा करते हैं. इसके बाद, recursiveSummarizer() फ़ंक्शन में, हम कनेक्ट किए गए स्प्लिट के वर्ण की लंबाई के आधार पर, खास जानकारी देने की प्रोसेस को लूप करते हैं. अगर खास जानकारी में वर्णों की संख्या 3000 से ज़्यादा है, तो हम उन्हें fullSummaries में जोड़ देते हैं. अगर सीमा पूरी नहीं होती है, तो partialSummaries के तौर पर खास जानकारी सेव की जाती है.

सभी खास जानकारी जनरेट होने के बाद, पूरी खास जानकारी में कुछ हिस्सों की खास जानकारी जोड़ी जाती है. अगर fullSummaries में सिर्फ़ एक खास जानकारी है, तो फिर से शुरू करने की ज़रूरत नहीं है. फ़ंक्शन, आखिरी खास जानकारी दिखाता है. अगर एक से ज़्यादा खास जानकारी मौजूद है, तो फ़ंक्शन दोहराएगा और आंशिक खास जानकारी को जारी रखेगा.

हमने इस समाधान की जांच, इंटरनेट रिले चैट (आईआरसी) आरएफ़सी के साथ की है. इसमें 110,030 वर्ण हैं, जिनमें 17,560 शब्द शामिल हैं. Summarizer API ने यह खास जानकारी दी:

इंटरनेट रिले चैट (आईआरसी), टेक्स्ट मैसेज का इस्तेमाल करके रीयल-टाइम में ऑनलाइन बातचीत करने का एक तरीका है. चैनलों में चैट की जा सकती है या निजी मैसेज भेजे जा सकते हैं. साथ ही, चैट को कंट्रोल करने और सर्वर से इंटरैक्ट करने के लिए, कमांड का इस्तेमाल किया जा सकता है. यह इंटरनेट पर मौजूद चैट रूम की तरह है. यहां आपके पास, दूसरों के मैसेज तुरंत देखने और उन्हें टाइप करने का विकल्प होता है.

यह बहुत असरदार है! साथ ही, इसमें सिर्फ़ 309 वर्ण होने चाहिए.

सीमाएं

खास जानकारी की खास जानकारी देने वाली तकनीक से, आपको क्लाइंट साइज़ वाले मॉडल की कॉन्टेक्स्ट विंडो में काम करने में मदद मिलती है. क्लाइंट-साइड एआई के कई फ़ायदे हैं. हालांकि, आपको ये समस्याएं आ सकती हैं:

  • कम सटीक खास जानकारी: बार-बार दोहराए जाने वाले टेक्स्ट की मदद से, खास जानकारी की प्रोसेस को अनगिनत बार दोहराया जा सकता है. साथ ही, हर खास जानकारी, मूल टेक्स्ट से अलग होती है. इसका मतलब है कि मॉडल ऐसी खास जानकारी जनरेट कर सकता है जो काम की न हो.
  • धीमी परफ़ॉर्मेंस: हर खास जानकारी जनरेट होने में समय लगता है. फिर से, बड़े टेक्स्ट में, खास जानकारी की अनगिनत संभावनाएं होती हैं. इसलिए, इस तरीके को पूरा होने में कई मिनट लग सकते हैं.

हमारे पास खास जानकारी देने वाले टूल का डेमो उपलब्ध है. साथ ही, पूरा सोर्स कोड देखा जा सकता है.

सुझाव/राय दें या शिकायत करें

अलग-अलग लंबाई के इनपुट टेक्स्ट, अलग-अलग स्प्लिट साइज़, और अलग-अलग ओवरलैप की लंबाई के साथ, खास जानकारी की खास जानकारी देने की तकनीक का इस्तेमाल करके देखें कि आपके इस्तेमाल के उदाहरणों के लिए कौनसी तकनीक सबसे अच्छी है.

ओरिजिन ट्रायल में शामिल होकर, Summarizer API की जांच अभी शुरू करें और अपने सुझाव/राय/शिकायत शेयर करें. आपके सुझाव, राय, और शिकायत से, इस एपीआई के आने वाले वर्शन और पहले से मौजूद एआई एपीआई को बनाने और लागू करने के तरीके पर सीधा असर पड़ सकता है.