Chrome एक्सटेंशन में Prompt API

पब्लिश करने की तारीख: 11 नवंबर, 2024

एक्सटेंशन के लिए Prompt API, अब ऑरिजिन ट्रायल में उपलब्ध है. इससे, ब्राउज़र में Gemini Nano का इस्तेमाल करने वाले Chrome एक्सटेंशन बनाए जा सकते हैं. यह हमारी सबसे बेहतर भाषा मॉडल है.

Chrome एक्सटेंशन के साथ Prompt API का इस्तेमाल कई तरीकों से किया जा सकता है. यहां कुछ उदाहरण दिए गए हैं:

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

ये सिर्फ़ कुछ उदाहरण हैं. हमें यह देखने में खुशी होगी कि आपने क्या बनाया है.

उपलब्धता

  • इस एपीआई की मदद से एक्सटेंशन बनाने के लिए, Prompt API के ऑरिजिन ट्रायल में शामिल हों. यह ट्रायल, Chrome 131 से 136 में चल रहा है. अगर आपने ओरिजिन ट्रायल के बारे में पहले कभी नहीं सुना है, तो आपको बता दें कि ये सीमित समय के लिए उपलब्ध प्रोग्राम हैं. इनमें सभी डेवलपर हिस्सा ले सकते हैं. साथ ही, इनसे प्लैटफ़ॉर्म की प्रयोग के तौर पर उपलब्ध सुविधाओं को रिलीज़ से पहले इस्तेमाल करने का ऐक्सेस मिलता है. डेवलपर, ऐप्लिकेशन को टेस्ट कर सकते हैं, उपयोगकर्ताओं की राय और सुझाव पा सकते हैं, और आने वाले समय में ऐप्लिकेशन को लॉन्च कर सकते हैं.
    • इस्तेमाल करने की सीमाएं हो सकती हैं, लेकिन इन सुविधाओं को लाइव टेस्ट करने और उपयोगकर्ताओं से सुझाव, शिकायत या राय इकट्ठा करने के लिए शामिल किया जा सकता है. हमारा मकसद, इस एपीआई के आने वाले वर्शन के बारे में बताना है, ताकि हम इसे ज़्यादा से ज़्यादा लोगों के लिए उपलब्ध करा सकें.
  • शुरुआती झलक कार्यक्रम में शामिल हों नए बिल्ट-इन एआई एपीआई के शुरुआती वर्शन और हमारी ईमेल सूची पर चर्चा का ऐक्सेस पाने के लिए.

ऑरिजिन ट्रायल में हिस्सा लें

Chrome एक्सटेंशन में Prompt API का इस्तेमाल करने के लिए, नीचे दिए गए उदाहरण के मुताबिक, अपनी manifest.json फ़ाइल में "aiLanguageModelOriginTrial" अनुमति जोड़ें. साथ ही, अपने एक्सटेंशन के लिए ज़रूरी अन्य अनुमतियां भी जोड़ें.

अपने एक्सटेंशन को ऑरिजिन ट्रायल के लिए साइन अप करने के लिए, वेब ऑरिजिन के तौर पर chrome-extension://YOUR_EXTENSION_ID यूआरएल का इस्तेमाल करें. उदाहरण के लिए, chrome-extension://ljjhjaakmncibonnjpaoglbhcjeolhkk.

Chrome Origin Trial के लिए साइन अप करना

एक्सटेंशन आईडी डाइनैमिक तौर पर बनाया जाता है. हालांकि, आईडी असाइन करने के बाद, मेनिफ़ेस्ट में key प्रॉपर्टी जोड़कर, आईडी को स्थिर रखा जा सकता है.

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

{
  "permissions": ["aiLanguageModelOriginTrial"],
  "trial_tokens": ["GENERATED_TOKEN"],
}

Prompt API का इस्तेमाल करना

Prompt API का इस्तेमाल करने की अनुमति का अनुरोध करने के बाद, अपना एक्सटेंशन बनाया जा सकता है. chrome.aiOriginTrial.languageModel नेमस्पेस में, आपके लिए दो नए एक्सटेंशन फ़ंक्शन उपलब्ध हैं:

  • capabilities() पर क्लिक करके देखें कि मॉडल में कौनसे काम किए जा सकते हैं और वह उपलब्ध है या नहीं.
  • create() का इस्तेमाल करके लैंग्वेज मॉडल सेशन शुरू करें.

मॉडल डाउनलोड करना

Prompt API, Chrome में Gemini Nano मॉडल का इस्तेमाल करता है. एपीआई, Chrome में पहले से मौजूद होता है. हालांकि, जब कोई एक्सटेंशन पहली बार एपीआई का इस्तेमाल करता है, तो मॉडल को अलग से डाउनलोड किया जाता है.

यह तय करने के लिए कि मॉडल इस्तेमाल के लिए तैयार है या नहीं, एसिंक्रोनस chrome.aiOriginTrial.languageModel.capabilities() फ़ंक्शन को कॉल करें. यह available फ़ील्ड के साथ AILanguageModelCapabilities ऑब्जेक्ट दिखाता है, जिसमें ये तीन वैल्यू हो सकती हैं:

  • 'no': मौजूदा ब्राउज़र, Prompt API के साथ काम करता है. हालांकि, फ़िलहाल इसका इस्तेमाल नहीं किया जा सकता. इसकी कई वजहें हो सकती हैं. जैसे, मॉडल डाउनलोड करने के लिए डिस्क में जगह कम होना.
  • 'readily': मौजूदा ब्राउज़र, Prompt API के साथ काम करता है और इसका इस्तेमाल तुरंत किया जा सकता है.
  • 'after-download': मौजूदा ब्राउज़र, Prompt API के साथ काम करता है. हालांकि, इसके लिए उसे पहले मॉडल डाउनलोड करना होगा.

मॉडल डाउनलोड करने और भाषा मॉडल सेशन बनाने के लिए, एक साथ काम न करने वाले chrome.aiOriginTrial.languageModel.create() फ़ंक्शन को कॉल करें. अगर capabilities() का जवाब 'after-download' था, तो डाउनलोड की प्रोग्रेस सुनना सबसे सही तरीका है. इस तरह, अगर डाउनलोड में समय लगता है, तो उपयोगकर्ता को इसकी सूचना दी जा सकती है.

const session = await chrome.aiOriginTrial.languageModel.create({
  monitor(m) {
    m.addEventListener("downloadprogress", (e) => {
      console.log(`Downloaded ${e.loaded} of ${e.total} bytes.`);
    });
  },
});

मॉडल की सुविधाएं

capabilities() फ़ंक्शन से, आपको भाषा मॉडल की खूबियों के बारे में भी जानकारी मिलती है. available के अलावा, नतीजे में मिले AILanguageModelCapabilities ऑब्जेक्ट में ये फ़ील्ड भी होते हैं:

await chrome.aiOriginTrial.languageModel.capabilities();
// {available: 'readily', defaultTopK: 3, maxTopK: 8, defaultTemperature: 1}

सेशन बनाना

यह पक्का करने के बाद कि Prompt API काम कर सकता है, create() फ़ंक्शन की मदद से सेशन बनाया जाता है. इसके बाद, prompt() या promptStreaming() फ़ंक्शन की मदद से मॉडल को प्रॉम्प्ट किया जा सकता है.

सेशन के विकल्प

हर सेशन को topK और temperature के साथ पसंद के मुताबिक बनाया जा सकता है. इसके लिए, वैकल्पिक ऑप्टेशन ऑब्जेक्ट का इस्तेमाल करें. इन पैरामीटर की डिफ़ॉल्ट वैल्यू, chrome.aiOriginTrial.languageModel.capabilities() से रिटर्न की जाती हैं.

const capabilities = await chrome.aiOriginTrial.languageModel.capabilities();
// Initializing a new session must either specify both `topK` and
// `temperature` or neither of them.
const slightlyHighTemperatureSession = await chrome.aiOriginTrial.languageModel.create({
  temperature: Math.max(capabilities.defaultTemperature * 1.2, 2.0),
  topK: capabilities.defaultTopK,
});

create() फ़ंक्शन के वैकल्पिक विकल्प ऑब्जेक्ट में signal फ़ील्ड भी होता है. इससे, सेशन को खत्म करने के लिए AbortSignal पास किया जा सकता है.

const controller = new AbortController();
stopButton.onclick = () => controller.abort();

const session = await chrome.aiOriginTrial.languageModel.create({
  signal: controller.signal,
})
सिस्टम के अनुरोध

सिस्टम प्रॉम्प्ट की मदद से, लैंग्वेज मॉडल को कुछ संदर्भ दिया जा सकता है.

const session = await chrome.aiOriginTrial.languageModel.create({
  systemPrompt: 'You are a helpful and friendly assistant.',
});
await session.prompt('What is the capital of Italy?');
// 'The capital of Italy is Rome.'

शुरुआती प्रॉम्प्ट

शुरुआती प्रॉम्प्ट की मदद से, भाषा मॉडल को पिछले इंटरैक्शन के बारे में जानकारी दी जा सकती है. उदाहरण के लिए, ब्राउज़र को रीस्टार्ट करने के बाद, उपयोगकर्ता को सेव किए गए सेशन को फिर से शुरू करने की अनुमति देने के लिए.

const session = await chrome.aiOriginTrial.languageModel.create({
  initialPrompts: [
    { role: 'system', content: 'You are a helpful and friendly assistant.' },
    { role: 'user', content: 'What is the capital of Italy?' },
    { role: 'assistant', content: 'The capital of Italy is Rome.'},
    { role: 'user', content: 'What language is spoken there?' },
    { role: 'assistant', content: 'The official language of Italy is Italian. [...]' }
  ]
});

सेशन की जानकारी

किसी भाषा मॉडल के सेशन में, ज़्यादा से ज़्यादा उतने ही टोकन प्रोसेस किए जा सकते हैं जितने उसमें सेट किए गए हैं. सेशन ऑब्जेक्ट पर इन प्रॉपर्टी का इस्तेमाल करके, अपने इस्तेमाल और उस सीमा के बढ़ने की स्थिति देखी जा सकती है.

console.log(`${session.tokensSoFar}/${session.maxTokens}
(${session.tokensLeft} left)`);

सेशन का जारी रहना

हर सेशन, बातचीत के संदर्भ को ट्रैक करता है. पिछले इंटरैक्शन पर, आने वाले समय में होने वाले इंटरैक्शन को तब तक गिना जाता है, जब तक सेशन की कॉन्टेक्स्ट विंडो पूरी नहीं हो जाती.

const session = await chrome.aiOriginTrial.languageModel.create({
  systemPrompt: 'You are a friendly, helpful assistant specialized in clothing choices.'
});

const result1 = await session.prompt(
  'What should I wear today? It is sunny and I am unsure between a t-shirt and a polo.'
);
console.log(result1);

const result2 = await session.prompt(
  'That sounds great, but oh no, it is actually going to rain! New advice?'
);
console.log(result2);

किसी सेशन का क्लोन बनाना

संसाधनों को सुरक्षित रखने के लिए, clone() फ़ंक्शन की मदद से किसी मौजूदा सेशन का क्लोन बनाया जा सकता है. बातचीत का कॉन्टेक्स्ट रीसेट हो जाता है, लेकिन शुरुआती प्रॉम्प्ट या सिस्टम प्रॉम्प्ट में कोई बदलाव नहीं होता. clone() फ़ंक्शन, signal फ़ील्ड के साथ वैकल्पिक ऑप्शन ऑब्जेक्ट लेता है. इससे, क्लोन किए गए सेशन को मिटाने के लिए AbortSignal को पास किया जा सकता है.

const controller = new AbortController();
stopButton.onclick = () => controller.abort();

const clonedSession = await session.clone({
  signal: controller.signal,
});

मॉडल को प्रॉम्प्ट करना

prompt() या promptStreaming() फ़ंक्शन में से किसी एक का इस्तेमाल करके, मॉडल को प्रॉम्प्ट किया जा सकता है.

नॉन-स्ट्रीमिंग आउटपुट

अगर आपको छोटा जवाब चाहिए, तो prompt() फ़ंक्शन का इस्तेमाल करें. यह फ़ंक्शन, जवाब उपलब्ध होने पर उसे दिखाता है.

// Start by checking if it's possible to create a session based on the
// availability of the model, and the characteristics of the device.
const {available, defaultTemperature, defaultTopK, maxTopK } =
  await chrome.aiOriginTrial.languageModel.capabilities();

if (available !== 'no') {
  const session = await chrome.aiOriginTrial.languageModel.create();

  // Prompt the model and wait for the whole result to come back.
  const result = await session.prompt('Write me a poem!');
  console.log(result);
}

स्ट्रीमिंग आउटपुट

अगर आपको लंबे जवाब की उम्मीद है, तो आपको promptStreaming() फ़ंक्शन का इस्तेमाल करना चाहिए. इसकी मदद से, मॉडल से मिलने वाले कुछ नतीजे ही दिखाए जा सकते हैं.

const {available, defaultTemperature, defaultTopK, maxTopK } =
  await chrome.aiOriginTrial.languageModel.capabilities();

if (available !== 'no') {
  const session = await chrome.aiOriginTrial.languageModel.create();

  // Prompt the model and stream the result:
  const stream = session.promptStreaming('Write me an extra-long poem!');
  for await (const chunk of stream) {
    console.log(chunk);
  }
}

promptStreaming() ऐसा ReadableStream लौटाता है जिसके कई हिस्से एक-दूसरे पर लगातार बनते हैं. उदाहरण के लिए, "Hello,", "Hello world,", "Hello world I am,", "Hello world I am an AI.". ऐसा, तय किए गए व्यवहार के मुताबिक नहीं होना चाहिए. हमारा मकसद, प्लैटफ़ॉर्म पर मौजूद अन्य स्ट्रीमिंग एपीआई के साथ अलाइन करना है. इनमें एक लंबी स्ट्रीम के अलग-अलग हिस्से होते हैं. इसका मतलब है कि आउटपुट "Hello", " world", " I am", " an AI" जैसा क्रम होगा.

फ़िलहाल, अपनी ज़रूरत के हिसाब से काम करने के लिए, ये कार्रवाइयां की जा सकती हैं. यह स्टैंडर्ड और नॉन-स्टैंडर्ड, दोनों तरह के व्यवहार के साथ काम करता है.

let result = '';
let previousChunk = '';

for await (const chunk of stream) {
  const newChunk = chunk.startsWith(previousChunk)
      ? chunk.slice(previousChunk.length) : chunk;
  console.log(newChunk);
  result += newChunk;
  previousChunk = chunk;
}
console.log(result);

प्रॉम्प्ट को चलाना बंद करना

prompt() और promptStreaming(), दोनों में signal फ़ील्ड के साथ एक वैकल्पिक दूसरा पैरामीटर स्वीकार किया जाता है. इससे प्रॉम्प्ट चलाने की सुविधा बंद की जा सकती है.

const controller = new AbortController();
stopButton.onclick = () => controller.abort();

const result = await session.prompt(
  'Write me a poem!',
  { signal: controller.signal }
);

सेशन खत्म करना

अगर आपको अब सेशन नहीं चाहिए, तो destroy() को कॉल करके मुफ़्त संसाधनों का ऐक्सेस पाएं. जब किसी सेशन को मिटा दिया जाता है, तो उसका इस्तेमाल नहीं किया जा सकता. साथ ही, चल रहे किसी भी प्रोसेस को बंद कर दिया जाता है. अगर आपको मॉडल को अक्सर प्रॉम्प्ट करना है, तो सेशन को चालू रखें. ऐसा इसलिए, क्योंकि सेशन बनाने में कुछ समय लग सकता है.

await session.prompt(
  'You are a friendly, helpful assistant specialized in clothing choices.'
);

session.destroy();

// The promise is rejected with an error explaining that
// the session is destroyed.
await session.prompt(
  'What should I wear today? It is sunny and I am unsure
  between a t-shirt and a polo.'
);

डेमो

Chrome एक्सटेंशन में Prompt API की जांच करने के लिए, डेमो एक्सटेंशन इंस्टॉल करें. GitHub पर एक्सटेंशन सोर्स कोड उपलब्ध है.

Prompt API के लिए डेमो इंटरफ़ेस

प्रोग्राम में शामिल हों और सुझाव/राय दें या शिकायत करें

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