सारांश

वेब की सुविधाएं: Summarizer

Summarizer API की मदद से, वेब डेवलपर सीधे ब्राउज़र में एआई की मदद से टेक्स्ट को छोटा करने की सुविधा दे सकते हैं. इसके लिए, Chrome में Gemini Nano या Edge में Phi का इस्तेमाल किया जाता है. यह एपीआई, खास जानकारी, हेडलाइन, और बहुत ज़्यादा शब्द हैं, पढ़ा नहीं गया जैसे कई फ़ॉर्मैट के साथ काम करता है. साथ ही, यह उपयोगकर्ता की निजता को सुरक्षित रखने के लिए, पूरी तरह से उपयोगकर्ता के डिवाइस पर काम करता है.


शुरू करें

Summarizer API, Chrome और Edge 138 से उपलब्ध है. इसके लिए, Gemini Nano या Phi मॉडल को एक बार डाउनलोड करना ज़रूरी है.

हार्डवेयर और सॉफ़्टवेयर से जुड़ी ज़रूरी शर्तें

  • ओएस: Windows 10/11, macOS 13+, Linux या ChromeOS (Chromebook Plus).
  • स्टोरेज: प्रोफ़ाइल वॉल्यूम के लिए 22 जीबी खाली जगह.
  • रैम/सीपीयू: 16 जीबी से ज़्यादा रैम और चार से ज़्यादा सीपीयू कोर.
  • VRAM: 4 जीबी से ज़्यादा (अगर जीपीयू का इस्तेमाल किया जा रहा है).

मॉडल डाउनलोड करना और उसकी उपलब्धता

देखें कि मॉडल तैयार है, उसे डाउनलोड करना ज़रूरी है या वह उपलब्ध नहीं है.

ज़रूरी विकल्प पास करना: आपको Summarizer.availability(options) और Summarizer.create(options), दोनों को एक जैसा कॉन्फ़िगरेशन विकल्प ऑब्जेक्ट पास करना होगा. window.ai.summarizer एपीआई के उस वर्शन का इस्तेमाल न करें जो अब काम नहीं करता.

प्रोग्रेस मॉनिटर करना ज़रूरी है: आपको मॉडल डाउनलोड करने की प्रोग्रेस को मॉनिटर करने के लिए, Summarizer.create() को monitor(m) कॉलबैक देना होगा. साथ ही, downloadprogress इवेंट के लिए एक लिसनर जोड़ना होगा.

उपयोगकर्ता के जेस्चर की ज़रूरत: जब availability की वैल्यू 'downloadable' या 'downloading' हो, तब Summarizer.create() के ज़रिए असल डाउनलोड को ट्रिगर करने के लिए, उपयोगकर्ता के जेस्चर (जैसे, उपयोगकर्ता का क्लिक) की ज़रूरत होती है. NotAllowedError को रोकने के लिए, आपको क्रिएशन कॉल को पेज लोड होने पर बिना किसी शर्त के कॉल करने के बजाय, इवेंट लिसनर के अंदर रखना होगा.

const options = {
  type: 'key-points',
  format: 'plain-text',
  length: 'medium'
};

const availability = await Summarizer.availability(options);

if (availability === 'available') {
  const summarizer = await Summarizer.create(options);
  // Ready to use immediately
} else if (availability === 'downloadable') {
  // A user gesture is strictly required to start the download
  document.getElementById('start-download-btn').addEventListener('click', async () => {
    const summarizer = await Summarizer.create({
      ...options,
      monitor(m) {
        m.addEventListener('downloadprogress', (e) => {
          console.log(`Downloaded ${Math.round((e.loaded / e.total) * 100)}%`);
        });
      },
    });
  });
}

एपीआई के फ़ंक्शन और कॉन्फ़िगरेशन

Summarizer.create(options) की मदद से, खास जानकारी देने वाला मॉडल बनाते समय, आउटपुट को पसंद के मुताबिक बनाया जा सकता है:

पैरामीटर विकल्प ब्यौरा
type key-points, tldr, teaser, headline इससे खास जानकारी की रणनीति के बारे में पता चलता है.
format markdown, plain-text आउटपुट सिंटैक्स स्टाइल.
length short, medium, long जवाब की लंबाई (जैसे, एक वाक्य बनाम पांच वाक्य).
preference auto, speed, capability यह इंतज़ार के समय और क्वालिटी के बीच संतुलन बनाता है.

कॉन्फ़िगरेशन का उदाहरण

const options = {
  sharedContext: 'This is a scientific article',
  type: 'key-points',
  format: 'markdown',
  length: 'medium',
};

if (navigator.userActivation.isActive) {
  const summarizer = await Summarizer.create(options);
}

भाषा समर्थन

यह पक्का करने के लिए कि ब्राउज़र, खास समरी के अनुरोध को हैंडल कर सके, आपको उन भाषाओं के बारे में बताना होगा जिनमें आपको जवाब चाहिए.

const summarizer = await Summarizer.create({
  type: 'key-points',
  expectedInputLanguages: ['en', 'ja'],
  outputLanguage: 'es',
});

खास जानकारी देने के तरीके

1. एक साथ कई दस्तावेज़ों की खास जानकारी जनरेट करना

यह पूरे टेक्स्ट को एक बार में प्रोसेस करता है और नतीजा दिखाता है.

const longText = document.querySelector('article').innerText;
const summary = await summarizer.summarize(longText, {
  context: 'This article is intended for a tech-savvy audience.',
});
console.log(summary);

2. स्ट्रीम की खास जानकारी

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

const stream = summarizer.summarizeStreaming(longText);
for await (const chunk of stream) {
  console.log(chunk);
}

सुरक्षा और अनुमतियां

  • डेटा की निजता: Google को कोई डेटा नहीं भेजा जाता. डेटा को डिवाइस पर ही प्रोसेस किया जाता है.
  • क्रॉस-ऑरिजिन: अनुमति से जुड़ी नीति का इस्तेमाल करके, iframe को ऐक्सेस दिया जा सकता है.

    <iframe src="https://example.com/" allow="summarizer"></iframe>
    
  • वेब वर्कर: फ़िलहाल, यह सुविधा काम नहीं करती.

फ़ॉलबैक रणनीति

उपलब्धता को शुरू करने या क्वेरी करने से पहले, देखें कि ब्राउज़र में Summarizer एपीआई काम करता है या नहीं:

if ('Summarizer' in self) {
  // The Summarizer API is supported.
} else {
  // Execute fallback strategy
}

अगर Summarizer एपीआई काम नहीं करता है या उपलब्धता की जांच करने पर 'unavailable' दिखता है, तो आपको वापस जाना होगा.

सुझाए गए विकल्प:

  1. रिमोट एपीआई फ़ॉलबैक: डिस्टिलेशन के अनुरोध को किसी सर्वर एंडपॉइंट या रिमोट एपीआई (जैसे, Vertex AI Gemini API) पर भेजें, ताकि उपयोगकर्ताओं को खास जानकारी मिलती रहे.
  2. अनुकूल गिरावट: यूज़र इंटरफ़ेस (यूआई) में, खास जानकारी देने वाले कंट्रोल को विज़ुअल तौर पर बंद करें या बटन को छिपाएं. साथ ही, उपयोगकर्ता को समझने में आसान मैसेज दिखाएं (उदाहरण के लिए, "Local summarization is currently unsupported in this browser"). इंटरैक्शन को इस तरह से ट्रिगर न होने दें कि रनटाइम के दौरान सामान्य गड़बड़ियां हों और उन्हें मैनेज न किया जा सके.
  3. पॉलीफ़िल फ़ॉलबैक: कम्यूनिटी की ओर से मैनेज किए जाने वाले पॉलीफ़िल, जैसे कि built-in-ai-task-apis-polyfills या prompt-api-polyfill का इस्तेमाल करके, एपीआई सरफ़ेस को एम्युलेट किया जा सकता है. इसके लिए, क्लाउड में मौजूद मॉडल के साथ रिमोट सेवाओं का इस्तेमाल करें या लोकल मॉडल के साथ ऑन-डिवाइस अनुमान का इस्तेमाल करें.

निजता और लागत पर असर: ये पॉलीफ़िल, रिमोट सर्वर (जैसे, क्लाउड पर Gemini API) को प्रॉक्सी अनुरोध भेज सकते हैं. इससे, उपयोगकर्ता के डिवाइस पर मौजूद नेटिव बिल्ट-इन एआई एपीआई की निजता की गारंटी पूरी तरह से खत्म हो जाती है. साथ ही, सर्वर-साइड एपीआई के इस्तेमाल की लागत भी बढ़ जाती है.