Prompt API

पब्लिश होने की तारीख: 20 मई, 2025, पिछले अपडेट की तारीख: 21 सितंबर, 2025

ज़्यादा जानकारी देने वाला वीडियो वेब एक्सटेंशन Chrome स्टेटस मकसद
GitHub ऑरिजिन ट्रायल ऑरिजिन ट्रायल में है Chrome 138 देखें Intent to Experiment

Prompt API की मदद से, ब्राउज़र में Gemini Nano को नैचुरल लैंग्वेज में अनुरोध भेजे जा सकते हैं.

Prompt API का इस्तेमाल कई तरीकों से किया जा सकता है. उदाहरण के लिए, ये बनाए जा सकते हैं:

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

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

हार्डवेयर से जुड़ी ज़रूरी शर्तें देखें

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

Language Detector और Translator API, डेस्कटॉप पर Chrome में काम करते हैं. ये एपीआई, फ़ोन या टैबलेट पर काम नहीं करते. Prompt API, Summarizer API, Writer API, Rewriter API, और Proofreader API, Chrome में तब काम करते हैं, जब ये शर्तें पूरी होती हैं:

  • ऑपरेटिंग सिस्टम: Windows 10 या 11; macOS 13+ (Ventura और इसके बाद के वर्शन); Linux; या Chromebook Plus डिवाइसों पर ChromeOS (Platform 16389.0.0 और इसके बाद के वर्शन). Gemini Nano का इस्तेमाल करने वाले एपीआई, फ़िलहाल Android, iOS, और Chromebook Plus के अलावा अन्य डिवाइसों पर ChromeOS के साथ काम नहीं करते.
  • स्टोरेज: उस वॉल्यूम में कम से कम 22 जीबी खाली जगह होनी चाहिए जिसमें आपकी Chrome प्रोफ़ाइल मौजूद है.
  • जीपीयू: इसमें कम से कम 4 जीबी वीआरएएम होना चाहिए.
  • नेटवर्क: अनलिमिटेड डेटा या ऐसा कनेक्शन जिस पर डेटा से जुड़ी पाबंदी न हो.

Gemini Nano का सटीक साइज़ अलग-अलग हो सकता है, क्योंकि ब्राउज़र मॉडल को अपडेट करता है. मौजूदा साइज़ जानने के लिए, chrome://on-device-internals पर जाएं.

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

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

यह पता लगाने के लिए कि मॉडल इस्तेमाल के लिए तैयार है या नहीं, LanguageModel.availability() को कॉल करें.

const availability = await LanguageModel.availability();

मॉडल को डाउनलोड करने से पहले, उपयोगकर्ता का इंटरैक्शन होना चाहिए. जैसे, क्लिक करना, टैप करना या बटन दबाना.

अगर जवाब downloadable या downloading था, तो मॉडल और एपीआई उपलब्ध हैं. हालांकि, सुविधाओं का इस्तेमाल करने से पहले इन्हें डाउनलोड करना होगा. उपयोगकर्ता को पेज से इंटरैक्ट करना होगा. जैसे, डाउनलोड की अनुमति देने के लिए क्लिक करना, टैप करना या बटन दबाना.

मॉडल को डाउनलोड और इंस्टैंटिएट करने के लिए, create() फ़ंक्शन को कॉल करें.

const session = await LanguageModel.create({
  monitor(m) {
    m.addEventListener('downloadprogress', (e) => {
      console.log(`Downloaded ${e.loaded * 100}%`);
    });
  },
});

अगर availability() का जवाब downloading था, तो डाउनलोड होने की प्रोसेस के बारे में सुनो और उपयोगकर्ता को इसकी जानकारी दो. ऐसा इसलिए, क्योंकि डाउनलोड होने में समय लग सकता है.

मॉडल के पैरामीटर

params() फ़ंक्शन, आपको भाषा मॉडल के पैरामीटर के बारे में बताता है. इस ऑब्जेक्ट में ये फ़ील्ड शामिल होते हैं:

await LanguageModel.params();
// {defaultTopK: 3, maxTopK: 128, defaultTemperature: 1, maxTemperature: 2}

सेशन बनाना

Prompt API के चालू होने के बाद, create() फ़ंक्शन का इस्तेमाल करके एक सेशन बनाया जाता है.

हर सेशन को 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. [...]',
    },
  ],
});

प्रीफ़िक्स का इस्तेमाल करके जवाबों को सीमित करना

मॉडल के पिछले जवाबों के बारे में ज़्यादा जानकारी देने के लिए, पिछली भूमिकाओं के साथ-साथ "assistant" भूमिका जोड़ी जा सकती है. उदाहरण के लिए:

const followup = await session.prompt([
  {
    role: "user",
    content: "I'm nervous about my presentation tomorrow"
  },
  {
    role: "assistant",
    content: "Presentations are tough!"
  }
]);

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

const characterSheet = await session.prompt([
  {
    role: 'user',
    content: 'Create a TOML character sheet for a gnome barbarian',
  },
  {
    role: 'assistant',
    content: '```toml\n',
    prefix: true,
  },
]);

अनुमानित इनपुट और आउटपुट जोड़ना

Prompt API में मल्टीमॉडल की सुविधाएं हैं. साथ ही, यह कई भाषाओं में काम करता है. सेशन बनाते समय, expectedInputs और expectedOutputs मोड और भाषाएं सेट करें.

  • type: मोडैलिटी की ज़रूरत है.
    • expectedInputs के लिए, इसकी वैल्यू text, image या audio हो सकती है.
    • expectedOutputs के लिए, Prompt API सिर्फ़ text की अनुमति देता है.
  • languages: यह ऐरे, भाषा या भाषाओं को सेट करने के लिए होता है. Prompt API, "en", "ja", और "es" को स्वीकार करता है. अन्य भाषाओं के लिए यह सुविधा अभी डेवलपमेंट के चरण में है.
    • expectedInputs के लिए, सिस्टम प्रॉम्प्ट की भाषा और उपयोगकर्ता के प्रॉम्प्ट की एक या उससे ज़्यादा संभावित भाषाएं सेट करें.
    • एक या उससे ज़्यादा expectedOutputs भाषाएं सेट करें.
const session = await LanguageModel.create({
  expectedInputs: [
    { type: "text", languages: ["en" /* system prompt */, "ja" /* user prompt */] }
  ],
  expectedOutputs: [
    { type: "text", languages: ["ja"] }
  ]
});

अगर मॉडल को ऐसा इनपुट या आउटपुट मिलता है जो काम नहीं करता है, तो आपको "NotSupportedError" DOMException मिल सकता है.

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

इन सुविधाओं की मदद से, ये काम किए जा सकते हैं:

  • इस कुकी का इस्तेमाल, उपयोगकर्ताओं को चैट ऐप्लिकेशन में भेजे गए ऑडियो मैसेज को टेक्स्ट में बदलने की अनुमति देने के लिए किया जाता है.
  • अपनी वेबसाइट पर अपलोड की गई किसी इमेज के बारे में जानकारी दें, ताकि उसका इस्तेमाल कैप्शन या वैकल्पिक टेक्स्ट में किया जा सके.

ऑडियो इनपुट के साथ Prompt API का इस्तेमाल करने के लिए, Mediarecorder Audio Prompt डेमो देखें. साथ ही, इमेज इनपुट के साथ Prompt API का इस्तेमाल करने के लिए, Canvas Image Prompt डेमो देखें.

मैसेज जोड़ना

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

initialPrompts, सेशन बनाने के दौरान काम आते हैं. हालांकि, सेशन बनने के बाद, ज़्यादा कॉन्टेक्स्ट वाले प्रॉम्प्ट देने के लिए, prompt() या promptStreaming() तरीकों के साथ-साथ append() तरीके का भी इस्तेमाल किया जा सकता है.

उदाहरण के लिए:

const session = await LanguageModel.create({
  initialPrompts: [
    {
      role: 'system',
      content:
        'You are a skilled analyst who correlates patterns across multiple images.',
    },
  ],
  expectedInputs: [{ type: 'image' }],
});

fileUpload.onchange = async () => {
  await session.append([
    {
      role: 'user',
      content: [
        {
          type: 'text',
          value: `Here's one image. Notes: ${fileNotesInput.value}`,
        },
        { type: 'image', value: fileUpload.files[0] },
      ],
    },
  ]);
};

analyzeButton.onclick = async (e) => {
  analysisResult.textContent = await session.prompt(userQuestionInput.value);
};

append() से मिला प्रॉमिस तब पूरा होता है, जब प्रॉम्प्ट की पुष्टि हो जाती है, उसे प्रोसेस कर लिया जाता है, और सेशन में जोड़ दिया जाता है. अगर प्रॉम्प्ट को नहीं जोड़ा जा सकता, तो प्रॉमिस को अस्वीकार कर दिया जाता है.

JSON स्कीमा पास करना

वैल्यू के तौर पर JSON स्कीमा पास करने के लिए, responseConstraint फ़ील्ड को prompt() या promptStreaming() तरीके में जोड़ें. इसके बाद, Prompt API के साथ स्ट्रक्चर्ड आउटपुट का इस्तेमाल किया जा सकता है.

यहां दिए गए उदाहरण में, JSON स्कीमा यह पक्का करता है कि मॉडल, दिए गए मैसेज को पॉटरी से जुड़ा है या नहीं, यह बताने के लिए true या false के साथ जवाब दे.

const session = await LanguageModel.create();

const schema = {
  "type": "boolean"
};

const post = "Mugs and ramen bowls, both a bit smaller than intended, but that
happens with reclaim. Glaze crawled the first time around, but pretty happy
with it after refiring.";

const result = await session.prompt(
  `Is this post about pottery?\n\n${post}`,
  {
    responseConstraint: schema,
  }
);
console.log(JSON.parse(result));
// true

आपके पास, मॉडल को भेजे गए मैसेज में JSON स्कीमा या रेगुलर एक्सप्रेशन शामिल करने का विकल्प होता है. इससे इनपुट कोटा का कुछ हिस्सा इस्तेमाल होता है. responseConstraint को session.measureInputUsage() विकल्प पास करके, यह मेज़र किया जा सकता है कि यह इनपुट कोटा का कितना हिस्सा इस्तेमाल करेगा.

omitResponseConstraintInput विकल्प का इस्तेमाल करके, इस व्यवहार से बचा जा सकता है. अगर आपको ऐसा करना है, तो हमारा सुझाव है कि आप प्रॉम्प्ट में कुछ निर्देश शामिल करें:

const result = await session.prompt(`
  Summarize this feedback into a rating between 0-5. Only output a JSON
  object { rating }, with a single property whose value is a number:
  The food was delicious, service was excellent, will recommend.
`, { responseConstraint: schema, omitResponseConstraintInput: true });

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

मॉडल को प्रॉम्प्ट देने के लिए, 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,
});

सेशन मैनेजमेंट

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

हर सेशन में, प्रोसेस किए जा सकने वाले टोकन की संख्या तय होती है. इस सीमा तक पहुंचने की अपनी प्रोग्रेस देखने के लिए, यहां जाएं:

console.log(`${session.inputUsage}/${session.inputQuota}`);

सेशन मैनेजमेंट के बारे में ज़्यादा जानें.

किसी सेशन की कॉपी बनाना

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

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

const clonedSession = await session.clone({
  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 choosing between a t-shirt
  and a polo."
);

डेमो

हमने Prompt API के इस्तेमाल के कई उदाहरणों को एक्सप्लोर करने के लिए, कई डेमो बनाए हैं. ये डेमो, वेब ऐप्लिकेशन हैं:

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

परफ़ॉर्मेंस रणनीति

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

अनुमतियों की नीति, iframe, और वेब वर्कर

डिफ़ॉल्ट रूप से, Prompt API सिर्फ़ टॉप-लेवल की विंडो और उनके एक ही ऑरिजिन वाले iframe के लिए उपलब्ध होता है. एपीआई का ऐक्सेस, क्रॉस-ऑरिजिन iframe को सौंपा जा सकता है. इसके लिए, अनुमति से जुड़ी नीति allow="" एट्रिब्यूट का इस्तेमाल करें:

<!--
  The hosting site at https://main.example.com can grant a cross-origin iframe
  at https://cross-origin.example.com/ access to the Prompt API by
  setting the `allow="language-model"` attribute.
-->
<iframe src="https://cross-origin.example.com/" allow="language-model"></iframe>

फ़िलहाल, Web Workers में Prompt API उपलब्ध नहीं है. ऐसा इसलिए है, क्योंकि अनुमतियों से जुड़ी नीति की स्थिति की जांच करने के लिए, हर वर्कर के लिए एक ज़िम्मेदार दस्तावेज़ तैयार करना मुश्किल है.

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

आपके सुझाव और राय से, हमें इस एपीआई और पहले से मौजूद सभी एआई एपीआई के आने वाले वर्शन को बनाने और लागू करने में मदद मिल सकती है.