पब्लिश करने की तारीख: 11 नवंबर, 2024, पिछले अपडेट की तारीख: 20 मई, 2025
ज़्यादा जानकारी देने वाला वीडियो | वेब | एक्सटेंशन | Chrome स्टेटस | मकसद |
---|---|---|---|---|
GitHub | देखें | Intent to Experiment |
Prompt API की मदद से, ब्राउज़र में Gemini Nano को आम बोलचाल वाली भाषा में अनुरोध भेजे जा सकते हैं.
Chrome एक्सटेंशन में Prompt API का इस्तेमाल कई तरीकों से किया जा सकता है. उदाहरण के लिए:
- कैलेंडर इवेंट तुरंत बनाना. एक ऐसा Chrome एक्सटेंशन बनाएं जो वेब पेजों से इवेंट की जानकारी अपने-आप निकाल ले, ताकि लोग कुछ ही चरणों में कैलेंडर में इवेंट बना सकें.
- संपर्कों को आसानी से एक्सट्रैक्ट करना. ऐसा एक्सटेंशन बनाएं जो वेबसाइटों से संपर्क जानकारी निकालता हो. इससे लोगों को किसी कारोबार से संपर्क करने या अपनी संपर्क सूची में जानकारी जोड़ने में आसानी होगी.
- डाइनैमिक कॉन्टेंट फ़िल्टरिंग. एक ऐसा Chrome एक्सटेंशन बनाएं जो खबरों के लेखों का विश्लेषण करे. साथ ही, उपयोगकर्ता की ओर से तय किए गए विषयों के आधार पर, कॉन्टेंट को अपने-आप धुंधला कर दे या छिपा दे.
ये कुछ उदाहरण हैं. हमें यह देखने में खुशी होगी कि आपने क्या बनाया है.
हार्डवेयर से जुड़ी ज़रूरी शर्तें देखें
Chrome में इन एपीआई का इस्तेमाल करके सुविधाएं चलाने वाले डेवलपर और उपयोगकर्ताओं के लिए, ये ज़रूरी शर्तें लागू होती हैं. अन्य ब्राउज़र के लिए, ऑपरेटिंग सिस्टम की अलग-अलग ज़रूरी शर्तें हो सकती हैं.
Language Detector और Translator API, डेस्कटॉप पर Chrome में काम करते हैं. ये एपीआई, फ़ोन या टैबलेट पर काम नहीं करते. Prompt API, Summarizer API, Writer API, और Rewriter API, Chrome में तब काम करते हैं, जब ये शर्तें पूरी होती हैं:
- ऑपरेटिंग सिस्टम: Windows 10 या 11; macOS 13+ (Ventura और उसके बाद के वर्शन); या Linux. Android, iOS, और ChromeOS के लिए Chrome में, Gemini Nano का इस्तेमाल करने वाले एपीआई अभी काम नहीं करते.
- स्टोरेज: जिस वॉल्यूम में आपकी Chrome प्रोफ़ाइल है उसमें कम से कम 22 जीबी खाली जगह होनी चाहिए.
- जीपीयू: इसमें कम से कम 4 जीबी वीआरएएम होना चाहिए.
- नेटवर्क: अनलिमिटेड डेटा या बिना पाबंदी वाला कनेक्शन.
Gemini Nano का सटीक साइज़ अलग-अलग हो सकता है, क्योंकि ब्राउज़र मॉडल को अपडेट करता है. मौजूदा साइज़ जानने के लिए, chrome://on-device-internals
पर जाएं और मॉडल की स्थिति पर जाएं. मॉडल का साइज़ पता करने के लिए, सूची में दिया गया फ़ाइल पाथ खोलें.
एक्सटेंशन में Prompt API का इस्तेमाल करना
इस एपीआई का इस्तेमाल करने से पहले, जनरेटिव एआई के इस्तेमाल से जुड़ी पाबंदी की Google की नीति को स्वीकार करें.
LanguageModel
नेमस्पेस में, आपके लिए दो एक्सटेंशन फ़ंक्शन उपलब्ध हैं:
availability()
पर जाकर देखें कि मॉडल क्या-क्या कर सकता है और यह सुविधा उपलब्ध है या नहीं.create()
पर क्लिक करके, भाषा मॉडल सेशन शुरू करें.
मॉडल डाउनलोड
Prompt API, Chrome में Gemini Nano मॉडल का इस्तेमाल करता है. एपीआई को Chrome में बनाया गया है. हालांकि, जब कोई एक्सटेंशन पहली बार एपीआई का इस्तेमाल करता है, तब मॉडल को अलग से डाउनलोड किया जाता है.
यह पता लगाने के लिए कि मॉडल इस्तेमाल करने के लिए तैयार है या नहीं, एसिंक्रोनस LanguageModel.availability()
फ़ंक्शन को कॉल करें. इससे इनमें से कोई एक जवाब मिलना चाहिए:
"unavailable"
का मतलब है कि लागू करने के लिए अनुरोध किए गए विकल्प काम नहीं करते या भाषा मॉडल को प्रॉम्प्ट करने की सुविधा काम नहीं करती."downloadable"
का मतलब है कि लागू करने की प्रोसेस में, अनुरोध किए गए विकल्पों के साथ काम किया जा सकता है. हालांकि, उन विकल्पों का इस्तेमाल करके सेशन बनाने से पहले, इसे कुछ डाउनलोड करना होगा. उदाहरण के लिए, भाषा मॉडल या फ़ाइन-ट्यूनिंग."downloading"
का मतलब है कि लागू करने की प्रोसेस में, अनुरोध किए गए विकल्पों के साथ काम किया जा सकता है. हालांकि, इन विकल्पों का इस्तेमाल करके सेशन बनाने से पहले, इसे डाउनलोड करने की मौजूदा प्रोसेस पूरी करनी होगी."available"
का मतलब है कि लागू करने की प्रोसेस में, अनुरोध किए गए विकल्पों का इस्तेमाल किया जा सकता है. इसके लिए, कोई नया ऐप्लिकेशन डाउनलोड करने की ज़रूरत नहीं होती.
मॉडल डाउनलोड करने की प्रोसेस शुरू करने और भाषा के मॉडल का सेशन बनाने के लिए, एसिंक्रोनस LanguageModel.availability()
फ़ंक्शन को कॉल करें. अगर availability()
का जवाब 'downloadable'
था, तो डाउनलोड की प्रोग्रेस को सुनने का सबसे सही तरीका है. इस तरह, डाउनलोड में समय लगने पर उपयोगकर्ता को इसकी सूचना दी जा सकती है.
const session = await LanguageModel.create({
monitor(m) {
m.addEventListener("downloadprogress", (e) => {
console.log(`Downloaded ${e.loaded * 100}%`);
});
},
});
मॉडल की सुविधाएं
params()
फ़ंक्शन, आपको भाषा मॉडल के पैरामीटर के बारे में बताता है. इस ऑब्जेक्ट में ये फ़ील्ड शामिल होते हैं:
defaultTopK
: डिफ़ॉल्ट टॉप-के वैल्यू (डिफ़ॉल्ट:3
).maxTopK
: टॉप-के की ज़्यादा से ज़्यादा वैल्यू (8
).defaultTemperature
: डिफ़ॉल्ट तापमान (1.0
). तापमान की वैल्यू,0.0
और2.0
के बीच होनी चाहिए.maxTemperature
: ज़्यादा से ज़्यादा तापमान.
await LanguageModel.params();
// {defaultTopK: 3, maxTopK: 8, defaultTemperature: 1, maxTemperature: 2}
सेशन बनाना
Prompt API के चालू होने के बाद, create()
फ़ंक्शन का इस्तेमाल करके एक सेशन बनाया जाता है.
मॉडल को प्रॉम्प्ट देने के लिए, prompt()
या promptStreaming()
फ़ंक्शन का इस्तेमाल किया जा सकता है.
अपने सेशन को पसंद के मुताबिक बनाना
हर सेशन को topK
और temperature
के साथ पसंद के मुताबिक बनाया जा सकता है. इसके लिए, विकल्प ऑब्जेक्ट का इस्तेमाल किया जा सकता है. इन पैरामीटर की डिफ़ॉल्ट वैल्यू, LanguageModel.params()
से मिलती हैं.
const params = await LanguageModel.params();
// Initializing a new session must either specify both `topK` and
// `temperature` or neither of them.
const slightlyHighTemperatureSession = await LanguageModel.create({
temperature: Math.max(params.defaultTemperature * 1.2, 2.0),
topK: params.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.inputUsage}/${session.inputQuota}`);
सेशन के बने रहने की अवधि
हर सेशन में, बातचीत के संदर्भ को ट्रैक किया जाता है. पिछले इंटरैक्शन को आने वाले इंटरैक्शन के लिए ध्यान में रखा जाता है. ऐसा तब तक होता है, जब तक सेशन की कॉन्टेक्स्ट विंडो पूरी नहीं हो जाती.
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 {defaultTemperature, maxTemperature, defaultTopK, maxTopK } =
await LanguageModel.params();
const available = await LanguageModel.availability();
if (available !== 'unavailable') {
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()
फ़ंक्शन का इस्तेमाल करना चाहिए. इससे, मॉडल से मिलने वाले जवाबों को आंशिक तौर पर दिखाया जा सकता है. promptStreaming()
फ़ंक्शन, ReadableStream
दिखाता है.
const {defaultTemperature, maxTemperature, defaultTopK, maxTopK } =
await LanguageModel.params();
const available = await LanguageModel.availability();
if (available !== 'unavailable') {
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);
}
}
किसी प्रॉम्प्ट को जनरेट करना बंद करना
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 का सैंपल एक्सटेंशन डाउनलोड करें.
- मानकों को बेहतर बनाने में अपना योगदान दें. इसके लिए, Web Incubator Community Group में शामिल हों.