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

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

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

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

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

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

שנתחיל?

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

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

כדי להתחיל להשתמש ב-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://flags/#summarization-api-for-gemini-nano.
  2. בוחרים באפשרות מופעל.
  3. לוחצים על הפעלה מחדש או מפעילים מחדש את 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.availability() האסינכרונית. הפונקציה מחזירה הבטחה עם הערכים הבאים.

  • הערך "unavailable" מציין שההטמעה לא תומכת באפשרויות המבוקשות.
  • הערך "downloadable" מציין שההטמעה תומכת באפשרויות המבוקשות, אבל יהיה עליה להוריד משהו (למשל, מודל למידת מכונה או כוונון מדויק) לפני שתוכל לבצע פעולה כלשהי.
  • הערך "downloading" מציין שההטמעה תומכת באפשרויות המבוקשות, אבל תצטרך לסיים הורדה מתמשכת לפני שתוכל לבצע פעולה כלשהי.
  • הערך "available" מציין שההטמעה תומכת באפשרויות המבוקשות בלי צורך בהורדות חדשות.

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

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

פונקציות 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 availability = await self.ai.summarizer.availability();
let summarizer;
if (availability === 'unavailable') {
  // The Summarizer API isn't usable.
  return;
}
if (availability === 'available') {
  // 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(`Downloaded ${e.loaded * 100}%`);
  });
  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 Community Group להמשך דיון. צוות Chrome ביקש משוב מקבוצת הארכיטקטורה הטכנית של W3C, וביקש מ-Mozilla ומ-WebKit את עמדותיהם בנושא התקנים.

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

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