Summarizer API מאפשר למפתחי אתרים להציע סיכום טקסט מקומי מבוסס-AI ישירות בדפדפן באמצעות Gemini Nano ב-Chrome או Phi ב-Edge. ה-API הזה תומך בפורמטים שונים, כולל נקודות עיקריות, כותרות ו-אמ;לק, ופועל כולו במכשיר כדי להבטיח את פרטיות המשתמשים.
תחילת העבודה
Summarizer API זמין החל מגרסה 138 של Chrome ו-Edge. כדי להשתמש בהם, צריך להוריד פעם אחת את המודל של Gemini Nano או Phi (בהתאמה).
דרישות חומרה ותוכנה
- מערכת הפעלה: Windows 10/11, macOS 13 ואילך, Linux או ChromeOS (Chromebook Plus).
- אחסון: 22GB של נפח אחסון פנוי לפרופיל.
- RAM/CPU: זיכרון RAM בנפח 16GB ומעלה ו-4 ליבות CPU או יותר.
- VRAM: 4GB ומעלה (אם משתמשים ב-GPU).
הורדה וזמינות של מודלים
בודקים אם המודל מוכן, אם צריך להוריד אותו או אם הוא לא זמין.
העברת אפשרויות חובה: צריך להעביר את אובייקט אפשרויות ההגדרה הזהה גם אל Summarizer.availability(options) וגם אל Summarizer.create(options). אל תשתמשו בממשק ה-API של window.ai.summarizer שהוצא משימוש.
מעקב חובה אחרי ההתקדמות: חובה להטמיע מעקב אחרי התקדמות ההורדה של המודל. כדי לעשות את זה, צריך לספק קריאה חוזרת (callback) של monitor(m) ל-Summarizer.create() ולהוסיף פונקציית listener לאירוע downloadprogress.
דרישה לתנועה של המשתמש: כשהערך של availability הוא 'downloadable' או 'downloading', כדי להפעיל את ההורדה בפועל באמצעות Summarizer.create() נדרשת תנועה של המשתמש (כמו קליק של המשתמש). כדי למנוע את NotAllowedError, צריך להציב את הקריאה ליצירה בתוך רכיב event listener, במקום להפעיל אותה ללא תנאי בטעינת הדף.
const options = {
type: 'key-points',
format: 'plain-text',
length: 'medium'
};
const availability = await Summarizer.availability(options);
if (availability === 'available') {
const summarizer = await Summarizer.create(options);
// Ready to use immediately
} else if (availability === 'downloadable') {
// A user gesture is strictly required to start the download
document.getElementById('start-download-btn').addEventListener('click', async () => {
const summarizer = await Summarizer.create({
...options,
monitor(m) {
m.addEventListener('downloadprogress', (e) => {
console.log(`Downloaded ${Math.round((e.loaded / e.total) * 100)}%`);
});
},
});
});
}
פונקציות והגדרות של API
כשיוצרים מסכם באמצעות Summarizer.create(options), אפשר להתאים אישית את הפלט:
| פרמטר | אפשרויות | תיאור |
|---|---|---|
type |
key-points, tldr, teaser, headline |
מגדיר את אסטרטגיית הסיכום. |
format |
markdown, plain-text |
סגנון התחביר של הפלט. |
length |
short, medium, long |
אורך היעד (למשל, משפט אחד לעומת 5 משפטים). |
preference |
auto, speed, capability |
מאזן בין זמן האחזור לבין האיכות. |
הגדרה לדוגמה
const options = {
sharedContext: 'This is a scientific article',
type: 'key-points',
format: 'markdown',
length: 'medium',
};
if (navigator.userActivation.isActive) {
const summarizer = await Summarizer.create(options);
}
תמיכה בשפה
אתם יכולים לציין את השפות הצפויות כדי לוודא שהדפדפן יכול לטפל בבקשת הסיכום הספציפית.
const summarizer = await Summarizer.create({
type: 'key-points',
expectedInputLanguages: ['en', 'ja'],
outputLanguage: 'es',
});
שיטות סיכום
1. סיכום באצווה
מעבד את כל הטקסט בבת אחת ומחזיר את התוצאה.
const longText = document.querySelector('article').innerText;
const summary = await summarizer.summarize(longText, {
context: 'This article is intended for a tech-savvy audience.',
});
console.log(summary);
2. סיכום הסטרימינג
התוצאות מוחזרות בזמן אמת כשהמודל יוצר אותן, וכך ממשק המשתמש מגיב מהר יותר.
const stream = summarizer.summarizeStreaming(longText);
for await (const chunk of stream) {
console.log(chunk);
}
אבטחה והרשאות
- פרטיות נתונים: לא נשלחים נתונים ל-Google. העיבוד מתבצע במכשיר המקומי.
ממקורות שונים: אפשר לתת גישה לרכיבי iframe באמצעות מדיניות ההרשאות.
<iframe src="https://example.com/" allow="summarizer"></iframe>Web Workers: אין כרגע תמיכה.
אסטרטגיית גיבוי
לפני שמפעילים או שולחים שאילתה לגבי הזמינות, צריך לבדוק אם הדפדפן תומך ב-API של Summarizer:
if ('Summarizer' in self) {
// The Summarizer API is supported.
} else {
// Execute fallback strategy
}
אם ה-API של Summarizer לא נתמך או שבדיקות הזמינות מחזירות את הערך 'unavailable', צריך להשתמש ב-fallback.
האפשרויות המומלצות:
- חלופה ל-API מרוחק: הפניית בקשת הזיקוק לנקודת קצה של שרת או ל-API מרוחק (כמו Vertex AI Gemini API) כדי שהמשתמשים עדיין יקבלו סיכומים.
- הפחתה חיננית (graceful degradation): משביתים באופן חזותי את פקדי הסיכום בממשק המשתמש, או מסתירים את הכפתור ומציגים הודעה ידידותית (למשל,
"Local summarization is currently unsupported in this browser"). אל תאפשרו לאינטראקציה להפעיל חריגות כלליות של זמן ריצה שלא טופלו. - חלופת Polyfill: אתם יכולים להשתמש ב-Polyfill שמתוחזק על ידי הקהילה, כמו
built-in-ai-task-apis-polyfillsאוprompt-api-polyfill, כדי לדמות את ממשק ה-API באמצעות שירותים מרוחקים עם מודלים בענן או הסקת מסקנות במכשיר עם מודלים מקומיים.
השלכות על הפרטיות והעלות: יכול להיות שרכיבי ה-polyfill האלה מעבירים בקשות לשרתים מרוחקים (כמו Gemini API בענן). הפעולה הזו מבטלת לחלוטין את הבטחות הפרטיות במכשיר של ממשקי ה-API המובנים של AI, ותגרום לעלויות שימוש ב-API בצד השרת.