Writer API

תאריך פרסום: 22 באוקטובר 2025

סרטון הסבר פיתוח אתרים תוספים הסטטוס של Chrome הרציונל
GitHub גרסת מקור לניסיון גרסת מקור לניסיון גרסת מקור לניסיון גרסת מקור לניסיון תצוגה הבעת כוונות לניסוי

בעזרת Writer API אפשר ליצור תוכן חדש שתואם למשימת כתיבה ספציפית. ‫Writer API ו-Rewriter API הם חלק מההצעה ל-Writing Assistance APIs.

ממשקי ה-API של השותפים האלה יכולים לעזור לכם לשפר את התוכן שנוצר על ידי משתמשים.

תרחישים לדוגמה

לכתוב תוכן חדש על סמך הרעיון הראשוני וההקשר האופציונלי. אפשר להשתמש במידע הזה כדי:

  • לעזור למשתמשים לכתוב כל סוג של תוכן, כמו ביקורות, פוסטים בבלוג או אימיילים.
  • עזרה למשתמשים בכתיבת בקשות תמיכה טובות יותר.
  • לנסח הקדמה לסדרת דוגמאות עבודה, כדי להמחיש בצורה טובה יותר מיומנויות מסוימות.

תרחיש השימוש שלכם לא מופיע? כדי לשתף משוב, אפשר להצטרף לתוכנית הגישה המוקדמת.

שנתחיל?

הצטרפות לגרסת המקור לניסיון של Writer API שפועלת ב-Chrome מגרסה 137 עד 148.

בדיקת דרישות החומרה

הדרישות הבאות חלות על מפתחים ועל משתמשים שמפעילים תכונות באמצעות ממשקי ה-API האלה ב-Chrome. בדפדפנים אחרים עשויות להיות דרישות הפעלה שונות.

ממשקי ה-API של כלי זיהוי השפה והתרגום פועלים ב-Chrome במחשב. ממשקי ה-API האלה לא פועלים במכשירים ניידים. ממשקי ה-API של ההנחיות, הסיכום, הכתיבה, השכתוב וההגהה פועלים ב-Chrome כשמתקיימים התנאים הבאים:

  • מערכת הפעלה: Windows 10 או 11;‏ macOS 13 ואילך (Ventura ואילך); Linux; או ChromeOS (מגרסה Platform 16389.0.0 ואילך) במכשירי Chromebook Plus. ‫Chrome ל-Android, ל-iOS ול-ChromeOS במכשירים שאינם Chromebook Plus עדיין לא נתמך על ידי ממשקי ה-API שמשתמשים ב-Gemini Nano.
  • אחסון: לפחות 22 GB של שטח פנוי בכרך שמכיל את פרופיל Chrome.
  • GPU או CPU: מודלים מוטמעים יכולים לפעול עם GPU או CPU.
    • מעבד גרפי (GPU): יותר מ-4 GB של VRAM.
    • יחידת עיבוד מרכזית (CPU): זיכרון RAM של 16 GB או יותר ו-4 ליבות CPU או יותר.
  • רשת: נתונים ללא הגבלה או חיבור ללא מדידה.

הגודל המדויק של Gemini Nano עשוי להשתנות כשהדפדפן מעדכן את המודל. כדי לדעת מה הגודל הנוכחי, אפשר לעבור אל chrome://on-device-internals.

אחרי שתעמדו בדרישות.

הרשמה לתקופת ניסיון של תכונה

ממשק ה-API של Writer זמין בגרסת מקור לניסיון משותפת עם Rewriter API. כדי להתחיל להשתמש בממשקי ה-API האלה:

  1. אישור המדיניות של Google בנושא שימוש אסור ב-AI גנרטיבי.
  2. עוברים אל גרסת המקור לניסיון של Writer API.
  3. לוחצים על הרשמה וממלאים את הטופס. בשדה Web origin (מקור האינטרנט), מציינים את המקור או את מזהה התוסף, chrome-extension://YOUR_EXTENSION_ID.
  4. כדי לשלוח, לוחצים על הרשמה.
  5. מעתיקים את האסימון שסופק ומוסיפים אותו לכל דף אינטרנט שמשתתף במקור או כוללים אותו במניפסט של התוסף.
  6. מתחילים להשתמש בממשקי Writer ו-Rewriter API.

איך מתחילים להשתמש בתקופות ניסיון של מקורות

הוספת תמיכה ב-localhost

כדי לגשת ל-Writer API ב-localhost, משתמשים בתכונות ניסיוניות של Chrome:

  1. מגדירים את chrome://flags/#optimization-guide-on-device-model למופעל.
  2. מגדירים את הדגלים הבאים לערך Enabled או Enabled Multilingual:
    • chrome://flags/#prompt-api-for-gemini-nano-multimodal-input
    • chrome://flags/#writer-api-for-gemini-nano
  3. לוחצים על הפעלה מחדש או מפעילים מחדש את Chrome.

שימוש ב-Writer API

קודם מריצים זיהוי תכונות כדי לראות אם הדפדפן תומך בממשקי ה-API האלה.

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

ממשק Writer API וכל ממשקי ה-AI API המובנים האחרים משולבים בדפדפן. ‫Gemini Nano מוריד בנפרד בפעם הראשונה שאתר כלשהו משתמש בממשק API מובנה של AI. בפועל, אם משתמש כבר יצר אינטראקציה עם ממשק API מובנה, הוא הוריד את המודל לדפדפן שלו.

כדי לקבוע אם המודל מוכן לשימוש, מפעילים את הפונקציה האסינכרונית Writer.availability(). אם התשובה ל-availability() היא downloadable, צריך להאזין להתקדמות ההורדה ולעדכן את המשתמש, כי ההורדה עשויה להימשך זמן מה.

const availability = await Writer.availability();

כדי להפעיל את ההורדה של המודל ולהתחיל את הכתיבה, צריך לבדוק אם יש הפעלה של משתמש ולהפעיל את הפונקציה Writer.create().

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

פונקציות API

הפונקציה create() מאפשרת להגדיר אובייקט כתיבה חדש. היא מקבלת אובייקט 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}%`);
      });
    }
  });
}

הקצאת שפות צפויות

‫Writer API תומך בכמה שפות. כשיוצרים את הסשן, מגדירים את שפות הקלט וההקשר הצפויות, וגם את שפת הפלט הצפויה. כך הדפדפן יכול לדחות את הבקשה אם הוא לא תומך בשילוב שפות ספציפי.

const writer = await Writer.create({
  tone: "formal",
  expectedInputLanguages: ["en", "ja", "es"],
  expectedContextLanguages: ["en", "ja", "es"],
  outputLanguage: "es",
  sharedContext: "These are requests to write messages to teachers in a Spanish
    language program, by students who may speak Spanish, Japanese, or English.
    Staff expect questions to be written in Spanish."
});

להתחיל לכתוב

יש שתי דרכים להפיק כתיבה מהמודל: פלט מבוסס-בקשה וסטרימינג.

פלט מבוסס-בקשה

בפלט מבוסס-בקשה (או 'לא סטרימינג'), המודל מחכה עד שכל הקלט נוצר, מעבד את הקלט כמכלול ואז יוצר את הפלט.

כדי לקבל פלט מבוסס-בקשה, קוראים לפונקציה האסינכרונית write(). חובה לכלול הנחיה לתוכן שרוצים לכתוב. אפשר להוסיף תג אופציונלי context כדי לספק למודל מידע רקע, שיעזור לו לעמוד טוב יותר בציפיות שלכם לגבי הפלט.

// Request-based
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(
  expectedInputLanguages: ["en"],
  expectedContextLanguages: ["en"],
  outputLanguage: "en",
);
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({
    expectedInputLanguages: ["en"],
    expectedContextLanguages: ["en"],
    outputLanguage: "en",
    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();

הדגמה (דמו)

מדיניות הרשאות, מסגרות iframe ו-Web Workers

כברירת מחדל, Writer API זמין רק לחלונות ברמה העליונה ול-iframes מאותו מקור. אפשר להעניק גישה ל-API ל-iframes ממקורות שונים באמצעות מאפיין allow="" של מדיניות ההרשאות:

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

ממשק ה-API של Writer לא זמין ב-Web Workers. הסיבה לכך היא המורכבות של יצירת מסמך אחראי לכל עובד כדי לבדוק את הסטטוס של מדיניות ההרשאות.

אינטראקציה ושיתוף משוב

ה-API של הכלי Writer ושל Rewriter נמצאים כרגע בתהליכי דיון פעילים, ויכול להיות שהם ישתנו בעתיד. אם תנסו את ה-API הזה ויהיה לכם משוב, נשמח לשמוע אותו.

אתם יכולים לגלות את כל ממשקי ה-API המובנים של AI שמשתמשים במודלים, כולל Gemini Nano ומודלים אחרים של מומחים, בדפדפן.