Writer API

पब्लिश होने की तारीख: 20 मई, 2025

ज़्यादा जानकारी देने वाला वीडियो वेब एक्सटेंशन Chrome स्टेटस मकसद
GitHub ऑरिजिन ट्रायल ऑरिजिन ट्रायल ऑरिजिन ट्रायल ऑरिजिन ट्रायल देखें एक्सपेरिमेंट करने का इरादा

Writer API की मदद से, ऐसा नया कॉन्टेंट बनाया जा सकता है जो लिखने से जुड़े किसी टास्क के मुताबिक हो. Writer API और Rewriter API, Writing Assistance APIs proposal का हिस्सा हैं.

ये पार्टनर एपीआई, उपयोगकर्ताओं के बनाए गए कॉन्टेंट को बेहतर बनाने में आपकी मदद कर सकते हैं.

उपयोग के उदाहरण

अपने शुरुआती आइडिया और वैकल्पिक कॉन्टेक्स्ट के आधार पर नया कॉन्टेंट लिखें. इसका इस्तेमाल इन कामों के लिए किया जा सकता है:

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

क्या आपको इस्तेमाल का उदाहरण नहीं मिल रहा है? अपने सुझाव या राय देने के लिए, अर्ली प्रीव्यू प्रोग्राम में शामिल हों.

अपनी प्रोफ़ाइल बनाना शुरू करें

Writer API के ऑरिजिन ट्रायल में शामिल हों. यह Chrome 137 से 142 में चल रहा है.

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

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 पर जाएं और मॉडल की स्थिति पर जाएं. मॉडल का साइज़ पता करने के लिए, सूची में दिया गया फ़ाइल पाथ खोलें.

ऑरिजिन ट्रायल के लिए साइन अप करना

Writer API, Rewriter API के साथ मिलकर ऑरिजिन ट्रायल में उपलब्ध है. इन एपीआई का इस्तेमाल शुरू करने के लिए:

  1. Google के जनरेटिव एआई के इस्तेमाल से जुड़ी पाबंदी की नीति को स्वीकार करें.
  2. Writer API के ऑरिजिन ट्रायल पर जाएं.
  3. रजिस्टर करें पर क्लिक करें और फ़ॉर्म भरें. वेब ऑरिजिन फ़ील्ड में, अपना ऑरिजिन या एक्सटेंशन आईडी chrome-extension://YOUR_EXTENSION_ID डालें.
  4. सबमिट करने के लिए, रजिस्टर करें पर क्लिक करें.
  5. दिए गए टोकन को कॉपी करें और इसे अपने ऑरिजिन के हर वेब पेज पर जोड़ें. इसके अलावा, इसे अपने एक्सटेंशन मेनिफ़ेस्ट में शामिल करें.
  6. Writer और Rewriter API का इस्तेमाल शुरू करें.

ऑरिजिन ट्रायल का इस्तेमाल शुरू करने के बारे में ज़्यादा जानें.

लोकल होस्ट के लिए सहायता जोड़ें

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

  1. chrome://flags/#writer-api-for-gemini-nano पर जाएं.
  2. चालू है को चुनें.
  3. फिर से लॉन्च करें पर क्लिक करें या Chrome को रीस्टार्ट करें.

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

सबसे पहले, सुविधा का पता लगाने की प्रोसेस चलाएं. इससे यह पता चलेगा कि ब्राउज़र इन एपीआई के साथ काम करता है या नहीं.

if ('Writer' in self) {
  // The Writer API is supported.
}

Writer API और पहले से मौजूद अन्य सभी एआई एपीआई, ब्राउज़र में इंटिग्रेट किए जाते हैं. जब कोई वेबसाइट पहली बार पहले से मौजूद एआई एपीआई का इस्तेमाल करती है, तब Gemini Nano को अलग से डाउनलोड किया जाता है. अगर किसी उपयोगकर्ता ने पहले से ही किसी बिल्ट-इन एपीआई के साथ इंटरैक्ट किया है, तो इसका मतलब है कि उसने मॉडल को अपने ब्राउज़र में डाउनलोड कर लिया है.

यह पता लगाने के लिए कि मॉडल इस्तेमाल करने के लिए तैयार है या नहीं, एसिंक्रोनस Writer.availability() फ़ंक्शन को कॉल करें. यह एक ऐसी स्ट्रिंग दिखाता है जिसकी चार संभावित वैल्यू हो सकती हैं:

  • unavailable: ब्राउज़र में Writer API काम करता है, लेकिन फ़िलहाल इसका इस्तेमाल नहीं किया जा सकता. इसकी कई वजहें हो सकती हैं. जैसे, मॉडल डाउनलोड करने के लिए डिस्क में जगह कम होना.
  • available: ब्राउज़र, Writer API के साथ काम करता है. इसका इस्तेमाल तुरंत किया जा सकता है.
  • downloadable: ब्राउज़र, Writer API के साथ काम करता है. हालांकि, इसे पहले मॉडल डाउनलोड करना होगा.
  • downloading: ब्राउज़र, Writer API के साथ काम करता है. साथ ही, फ़िलहाल मॉडल डाउनलोड कर रहा है.

मॉडल डाउनलोड करने की प्रोसेस शुरू करने और राइटर को चालू करने के लिए, Writer.create() फ़ंक्शन को कॉल करें. अगर availability() का जवाब downloadable था, तो डाउनलोड होने की प्रोसेस के बारे में सुनो और उपयोगकर्ता को इसकी जानकारी दो. ऐसा इसलिए, क्योंकि डाउनलोड होने में समय लग सकता है.

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

एपीआई फ़ंक्शन

create() फ़ंक्शन की मदद से, नया Writer ऑब्जेक्ट कॉन्फ़िगर किया जा सकता है. यह इन पैरामीटर के साथ, एक वैकल्पिक options ऑब्जेक्ट लेता है:

  • tone: लिखने का टोन से कॉन्टेंट की स्टाइल, किरदार या रवैये का पता चलता है. इसकी वैल्यू formal, neutral (डिफ़ॉल्ट) या casual पर सेट की जा सकती है.
  • format: आउटपुट फ़ॉर्मैटिंग. इसकी मान्य वैल्यू markdown (डिफ़ॉल्ट) और plain-text हैं.
  • length: आउटपुट की लंबाई. इसके लिए, short, medium (डिफ़ॉल्ट), और long वैल्यू का इस्तेमाल किया जा सकता है.
  • sharedContext: एक से ज़्यादा आउटपुट लिखते समय, शेयर किए गए कॉन्टेक्स्ट से मॉडल को आपकी उम्मीदों के मुताबिक कॉन्टेंट बनाने में मदद मिल सकती है.

यहां दिए गए उदाहरण में, writer ऑब्जेक्ट को शुरू करने का तरीका बताया गया है:

const options = {
  sharedContext: 'This is an email to acquaintances about an upcoming event.',
  tone: 'casual',
  format: 'plain-text',
  length: 'medium',
};

const available = await Writer.availability();
let writer;
if (available === 'unavailable') {
  // The Writer API isn't usable.
  return;
}
if (available === 'available') {
  // The Writer API can be used immediately .
  writer = await Writer.create(options);
} else {
  // The Writer can be used after the model is downloaded.
  const writer = await Writer.create({
    ...options,
    monitor(m) {
      m.addEventListener("downloadprogress", e => {
        console.log(`Downloaded ${e.loaded * 100}%`);
      });
    }
  });
}

लिखना शुरू करें

मॉडल से जवाब पाने के दो तरीके हैं: नॉन-स्ट्रीमिंग और स्ट्रीमिंग.

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

नॉन-स्ट्रीमिंग राइटिंग में, मॉडल पूरे इनपुट को प्रोसेस करता है. इसके बाद, आउटपुट जनरेट करता है.

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

// Non-streaming
const writer = await Writer.create();
const result = await writer.write(
  "An inquiry to my bank about how to enable wire transfers on my account.", {
    context: "I'm a longstanding customer",
  },
);

स्ट्रीम में लिखने की सुविधा

स्ट्रीमिंग से, रीयल-टाइम में नतीजे मिलते हैं. इनपुट जोड़ने और उसमें बदलाव करने पर, आउटपुट लगातार अपडेट होता रहता है.

स्ट्रीमिंग राइटर पाने के लिए, writeStreaming() फ़ंक्शन को कॉल करें और स्ट्रीम में मौजूद टेक्स्ट के उपलब्ध सेगमेंट पर दोहराएं. मॉडल को बैकग्राउंड की जानकारी देने के लिए, context जोड़ा जा सकता है. हालांकि, ऐसा करना ज़रूरी नहीं है. इससे मॉडल को आउटपुट के लिए आपकी उम्मीदों को बेहतर तरीके से पूरा करने में मदद मिल सकती है.

// Streaming
const writer = await Writer.create();
const stream = writer.writeStreaming(
  "An inquiry to my bank about how to enable wire transfers on my account.", {
    context: "I'm a longstanding customer",
  },
);
for await (const chunk of stream) {
  composeTextbox.append(chunk);
}

एक से ज़्यादा टास्क के लिए कॉन्टेक्स्ट शेयर करना

एक से ज़्यादा तरह का कॉन्टेंट जनरेट करने के लिए, writer का इस्तेमाल किया जा सकता है. ऐसे में, sharedContext को जोड़ना फ़ायदेमंद होता है. उदाहरण के लिए, आपको समीक्षा करने वालों को टिप्पणियों में बेहतर सुझाव देने में मदद करनी हो सकती है.

// Shared context and per writing task context
const writer = await Writer.create({
sharedContext: "This is for publishing on [popular website name], a business and employment-focused social media platform."
});

const stream = writer.writeStreaming(
  "Write a blog post about how I love all this work on gen AI at Google!" +
  "Mention that there's so much to learn and so many new things I can do!",
  { context: " The request comes from someone working at a startup providing an e-commerce CMS solution."}
);

for await (const chunk of stream) {
  composeTextbox.append(chunk);
}

किसी राइटर का फिर से इस्तेमाल करना

एक ही लेखक से कई तरह का कॉन्टेंट लिखवाया जा सकता है.

// Reuse a writer
const writer = await Writer.create({ tone: "formal" });

const reviews = await Promise.all(
  Array.from(
    document.querySelectorAll("#reviews > .review"),
    (reviewEl) => writer.write(reviewEl.textContent)
  ),
);

लेखक को रोकना

लिखने की प्रोसेस को खत्म करने के लिए, कंट्रोलर को बंद करें और राइटर को डिस्ट्रॉय करें.

// Aborting a writer
const controller = new AbortController();
stopButton.onclick = () => controller.abort();

const writer = await Writer.create({ signal: controller.signal });
await writer.write(reviewEl.textContent, { signal: controller.signal });

// Destroying a writer
writer.destroy();

डेमो

जुड़ें और सुझाव/राय दें या शिकायत करें

Writer और Rewriter API पर फ़िलहाल चर्चा चल रही है. इसलिए, आने वाले समय में इनमें बदलाव हो सकता है. अगर आपने इस एपीआई को आज़माया है और आपको कोई सुझाव, शिकायत या राय देनी है, तो हमें ज़रूर बताएं.

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