पब्लिश करने की तारीख: 11 नवंबर, 2024, पिछली बार अपडेट करने की तारीख: 20 मई, 2025
ज़्यादा जानकारी देने वाला वीडियो | वेब | एक्सटेंशन | Chrome का स्टेटस | प्रयोजन |
---|---|---|---|---|
GitHub | देखें | एक्सपेरिमेंट करने का इंटेंट |
Prompt API की मदद से, ब्राउज़र में Gemini Nano को आम भाषा में अनुरोध भेजे जा सकते हैं.
Chrome एक्सटेंशन में Prompt API का इस्तेमाल कई तरीकों से किया जा सकता है. उदाहरण के लिए:
- इंस्टैंट कैलेंडर इवेंट. ऐसा Chrome एक्सटेंशन बनाएं जो वेब पेजों से इवेंट की जानकारी अपने-आप हासिल करता हो. इससे उपयोगकर्ता, कुछ ही चरणों में कैलेंडर एंट्री बना सकते हैं.
- संपर्क की जानकारी आसानी से निकालना. ऐसा एक्सटेंशन बनाएं जो वेबसाइटों से संपर्क जानकारी हासिल करता हो. इससे, उपयोगकर्ताओं को किसी कारोबार से संपर्क करने या अपनी संपर्क सूची में जानकारी जोड़ने में आसानी होती है.
- डाइनैमिक कॉन्टेंट फ़िल्टरिंग. ऐसा Chrome एक्सटेंशन बनाएं जो खबरों के लेखों का विश्लेषण करता हो और उपयोगकर्ता के तय किए गए विषयों के आधार पर, कॉन्टेंट को अपने-आप धुंधला या छिपा देता हो.
ये सिर्फ़ कुछ उदाहरण हैं. हमें यह देखने में खुशी होगी कि आपने क्या बनाया है.
एक्सटेंशन में Prompt API का इस्तेमाल करना
LanguageModel
नेमस्पेस में, आपके पास दो एक्सटेंशन फ़ंक्शन उपलब्ध हैं:
availability()
पर जाएं.create()
का इस्तेमाल करके, भाषा मॉडल सेशन शुरू करें.
मॉडल डाउनलोड
Prompt API, Chrome में Gemini Nano मॉडल का इस्तेमाल करता है. एपीआई, Chrome में पहले से मौजूद होता है. हालांकि, जब कोई एक्सटेंशन पहली बार एपीआई का इस्तेमाल करता है, तो मॉडल को अलग से डाउनलोड किया जाता है.
यह पता लगाने के लिए कि मॉडल इस्तेमाल के लिए तैयार है या नहीं, असाइनोक्रोनस
LanguageModel.availability()
फ़ंक्शन को कॉल करें. इससे इनमें से कोई एक जवाब मिलना चाहिए:
'no'
: ब्राउज़र में Prompt API काम करता है, लेकिन फ़िलहाल इसका इस्तेमाल नहीं किया जा सकता. इसकी कई वजहें हो सकती हैं. जैसे, मॉडल डाउनलोड करने के लिए डिस्क में जगह न होना.'readily'
: ब्राउज़र, Prompt API के साथ काम करता है और इसका इस्तेमाल तुरंत किया जा सकता है.'after-download'
: ब्राउज़र, Prompt API के साथ काम करता है, लेकिन उसे पहले मॉडल डाउनलोड करना होगा.
मॉडल डाउनलोड करने और भाषा मॉडल सेशन बनाने के लिए, एक साथ काम न करने वाले LanguageModel.availability()
फ़ंक्शन को कॉल करें. अगर availability()
का जवाब 'after-download'
था, तो डाउनलोड की प्रोग्रेस को सुनना सबसे सही तरीका है. इस तरह, अगर वीडियो डाउनलोड होने में समय लगता है, तो उपयोगकर्ता को इसकी सूचना दी जा सकती है.
const session = await LanguageModel.create({
monitor(m) {
m.addEventListener("downloadprogress", (e) => {
console.log(`Downloaded ${e.loaded} of ${e.total} bytes.`);
});
},
});
मॉडल की सुविधाएं
availability()
फ़ंक्शन से आपको भाषा मॉडल की क्षमताओं के बारे में भी जानकारी मिलती है. available
के अलावा, ऑब्जेक्ट में ये फ़ील्ड भी होते हैं:
defaultTopK
: डिफ़ॉल्ट top-K वैल्यू (डिफ़ॉल्ट:3
).maxTopK
: सबसे ज़्यादा टॉप-K वैल्यू (8
).defaultTemperature
: डिफ़ॉल्ट तापमान (1.0
). तापमान की वैल्यू,0.0
से2.0
के बीच होनी चाहिए.
await LanguageModel.availability();
// {available: 'readily', defaultTopK: 3, maxTopK: 8, defaultTemperature: 1}
सेशन बनाना
Prompt API के चलने के बाद, create()
फ़ंक्शन की मदद से सेशन बनाया जाता है.
मॉडल को prompt()
या promptStreaming()
फ़ंक्शन के साथ प्रॉम्प्ट किया जा सकता है.
अपने सेशन को पसंद के मुताबिक बनाना
हर सेशन को topK
और temperature
के साथ पसंद के मुताबिक बनाया जा सकता है. इसके लिए, वैकल्पिक ऑप्शंस ऑब्जेक्ट का इस्तेमाल करें. इन पैरामीटर की डिफ़ॉल्ट वैल्यू, LanguageModel.availability()
से रिटर्न की जाती हैं.
const capabilities = await LanguageModel.availability();
// Initializing a new session must either specify both `topK` and
// `temperature` or neither of them.
const slightlyHighTemperatureSession = await LanguageModel.create({
temperature: Math.max(availability.defaultTemperature * 1.2, 2.0),
topK: capabilities.defaultTopK,
});
create()
फ़ंक्शन के वैकल्पिक विकल्प ऑब्जेक्ट में signal
फ़ील्ड भी होता है. इससे, सेशन को खत्म करने के लिए AbortSignal
पास किया जा सकता है.
const controller = new AbortController();
stopButton.onclick = () => controller.abort();
const session = await LanguageModel.create({
signal: controller.signal,
})
शुरुआती प्रॉम्प्ट
शुरुआती प्रॉम्प्ट की मदद से, भाषा मॉडल को पिछले इंटरैक्शन के बारे में जानकारी दी जा सकती है. उदाहरण के लिए, ब्राउज़र को रीस्टार्ट करने के बाद, उपयोगकर्ता को सेव किए गए सेशन को फिर से शुरू करने की अनुमति देने के लिए.
const session = await 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 LanguageModel.create({
initialPrompts: [{
role: "system",
content: "You are a friendly, helpful assistant specialized in clothing choices."
}]
});
const result1 = await session.prompt(
"What should I wear today? It is sunny. 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 LanguageModel.availability();
if (available !== 'no') {
const session = await 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 LanguageModel.availability();
if (available !== 'no') {
const session = await 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 पर उपलब्ध है.
हिस्सा लेना और सुझाव, शिकायत या राय शेयर करना
आपके सुझाव, राय, और शिकायतों से, इस एपीआई और पहले से मौजूद सभी एआई एपीआई के आने वाले वर्शन को बनाने और लागू करने के तरीके पर सीधा असर पड़ सकता है.
- Chrome पर इस सुविधा को लागू करने के बारे में सुझाव/राय देने या शिकायत करने के लिए, गड़बड़ी की शिकायत या सुविधा का अनुरोध करें.
- एपीआई के शेप के बारे में अपना सुझाव, राय या शिकायत शेयर करने के लिए, किसी मौजूदा समस्या पर टिप्पणी करें या Prompt API के GitHub डेटाबेस में जाकर कोई नई समस्या दर्ज करें.
- GitHub पर Prompt API का सैंपल एक्सटेंशन डाउनलोड करें.
- वेब इनक्यूबेटर कम्यूनिटी ग्रुप में शामिल होकर, स्टैंडर्ड बनाने की प्रोसेस में हिस्सा लें.