סיכום ב-Chrome באמצעות AI מובנה

תאריך פרסום: 11 בנובמבר 2024

נסו לדמיין איך תוכלו להציע למשתמשים שלכם את היכולת לסכם מאמרים ארוכים, מסמכים מורכבים או אפילו שיחות צ'אט תוססות לסיכומים תמציתיים ומלאי תובנות.

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

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

זמינות

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

כדי להתחיל להשתמש ב-Summarizer API:

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

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

הגבלות במהלך תקופת הניסיון של המקור

במהלך תקופת הניסיון בגרסת המקור, Summarizer API תומך רק בסיכום של טקסטים באנגלית, כי איכות המודל נבדקה באופן יסודי רק בתוכן באנגלית. אנחנו מתכוונים לבטל את ההגבלה הזו אחרי שנבדוק שפות נוספות מבחינת איכות ובטיחות, ושה-API יהיה זמין לשימוש נרחב.

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

כדי לגשת ל-Summarizer API ב-localhost במהלך תקופת הניסיון בגרסת המקור, צריך להשתמש ב-Chrome Canary. לאחר מכן, פועלים לפי השלבים הבאים:

  1. פותחים את Chrome Canary באחת מהפלטפורמות הבאות: Windows,‏ Mac או Linux.
  2. לעבור אל chrome://flags/#summarization-api-for-gemini-nano.
  3. בוחרים באפשרות מופעל.
  4. לוחצים על הפעלה מחדש או מפעילים מחדש את Chrome.

שימוש ב-Summarizer API

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

if ('ai' in self && 'summarizer' in self.ai) {
  // The Summarizer API is supported.
}

הורדת מודל

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

כדי לבדוק אם המודל מוכן לשימוש, צריך להפעיל את הפונקציה ai.summarizer.capabilities() האסינכרונית. הפונקציה מחזירה אובייקט AISummarizerCapabilities עם שדה available שיכול לקבל שלושה ערכים אפשריים:

  • no: הדפדפן הנוכחי תומך ב-Summarizer API, אבל אי אפשר להשתמש בו כרגע. יכולות להיות לכך כמה סיבות, למשל אם אין מספיק מקום פנוי בדיסק כדי להוריד את המודל.
  • readily: הדפדפן הנוכחי תומך ב-Summarizer API, וניתן להשתמש בו באופן מיידי.
  • after-download: הדפדפן הנוכחי תומך ב-Summarizer API, אבל קודם צריך להוריד את המודל.

כדי להפעיל את הורדת המודל וליצור את הסיכום, צריך לבצע קריאה לפונקציה ai.summarizer.create() האסינכרונית. אם התשובה לשאילתה capabilities() היא after-download, מומלץ להאזין להתקדמות ההורדה. כך תוכלו להודיע למשתמש אם ההורדה נמשכת זמן רב.

const summarizer = await ai.summarizer.create({
  monitor(m) {
    m.addEventListener('downloadprogress', (e) => {
      console.log(`Downloaded ${e.loaded} of ${e.total} bytes.`);
    });
  }
});

פונקציות API

הפונקציה create() מאפשרת להגדיר אובייקט חדש של סיכום בהתאם לצרכים שלכם. הפונקציה מקבלת אובייקט options אופציונלי עם הפרמטרים הבאים:

  • sharedContext: הקשר נוסף ששותף ויכול לעזור לכלי ליצירת סיכומים.
  • type: סוג הסיכום, עם הערכים המותרים key-points (ברירת המחדל), tl;dr, teaser ו-headline.
  • format: הפורמט של הסיכום, עם הערכים המותרים markdown (ברירת המחדל) ו-plain-text.
  • length: אורך הסיכום, עם הערכים המותרים short,‏ medium (ברירת המחדל) ו-long. המשמעויות של האורך משתנות בהתאם ל-type המבוקש. לדוגמה, בהטמעה של Chrome, סיכום קצר של נקודות עיקריות מורכב משלושה תבליטים, וסיכום קצר מורכב משפט אחד. סיכום ארוך של נקודות עיקריות מורכב משבעה תבליטים, וסיכום ארוך מורכב פסקה אחת.

הדוגמה הבאה ממחישה איך מאתחלים את הסיכום.

const options = {
  sharedContext: 'This is a scientific article',
  type: 'key-points',
  format: 'markdown',
  length: 'medium',
};

const available = (await self.ai.summarizer.capabilities()).available;
let summarizer;
if (available === 'no') {
  // The Summarizer API isn't usable.
  return;
}
if (available === 'readily') {
  // The Summarizer API can be used immediately .
  summarizer = await self.ai.summarizer.create(options);
} else {
  // The Summarizer API can be used after the model is downloaded.
  summarizer = await self.ai.summarizer.create(options);
  summarizer.addEventListener('downloadprogress', (e) => {
    console.log(e.loaded, e.total);
  });
  await summarizer.ready;
}

הרצת הסיכום

יש שתי דרכים להפעיל את הכלי לסיכום: סטרימינג ולא סטרימינג.

סיכום ללא סטרימינג

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

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

const longText = document.querySelector('article').innerHTML;
const summary = await summarizer.summarize(longText, {
  context: 'This article is intended for a tech-savvy audience.',
});

סיכום של סטרימינג

סיכום בזמן אמת מספק תוצאות בזמן אמת. הפלט מתעדכן באופן רציף ככל שמוסיפים ומתאימים את הקלט.

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

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);

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

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

let result = '';
let previousLength = 0;
for await (const segment of stream) {
  const newContent = segment.slice(previousLength);
  console.log(newContent);
  previousLength = segment.length;  
  result += newContent;
}
console.log(result);

הדגמה (דמו)

אתם יכולים לנסות את Summarizer API במגרש המשחקים של Summarizer API.

מאמץ סטנדרטיזציה

אנחנו פועלים כדי לסטנדרט את Summarizer API, כדי להבטיח תאימות לדפדפנים שונים.

הצעת ה-API שלנו קיבלה תמיכה מהקהילה והועברה לקבוצת הקהילה של W3C Web Incubator להמשך דיון. צוות Chrome ביקש משוב מקבוצת הארכיטקטורה הטכנית של W3C, וביקש מ-Mozilla ומ-WebKit את עמדותיהם בנושא התקנים.

השתתפות ושיתוף משוב

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