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"],
}

localhost के लिए सहायता जोड़ना

ऑरिजिन ट्रायल के दौरान localhost पर Prompt API को ऐक्सेस करने के लिए, आपको Chrome को सबसे नए वर्शन पर अपडेट करना होगा. फिर, इन स्तरो का पालन करें:

  1. Chrome को इनमें से किसी एक प्लैटफ़ॉर्म पर खोलें: Windows, Mac या Linux.
  2. chrome://flags/#optimization-guide-on-device-model पर जाएं.
  3. BypassPerfRequirement चालू है को चुनें.
    • इससे परफ़ॉर्मेंस की जांच नहीं की जाती. इस वजह से, हो सकता है कि आपके डिवाइस पर Gemini Nano डाउनलोड न हो पाए.
  4. फिर से लॉन्च करें पर क्लिक करें या Chrome को रीस्टार्ट करें.

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 को टेस्ट करना शुरू करें और अपने सुझाव/राय/शिकायत शेयर करें. आपके सुझाव, राय, और शिकायत से, इस एपीआई के आने वाले वर्शन और पहले से मौजूद सभी एआई एपीआई को बनाने और लागू करने के तरीके पर सीधा असर पड़ सकता है.