פורסם: 12 במרץ 2025, עדכון אחרון: 28 במאי 2025
הסבר | פיתוח אתרים | תוספים | הסטטוס של Chrome | המטרה |
---|---|---|---|---|
MDN | |
|
תצוגה | כוונה לשלוח |
Summarizer API עוזר לכם ליצור סיכומים של מידע באורכים ובפורמטים שונים. אתם יכולים להשתמש בו עם Gemini Nano ב-Chrome, או עם מודלים אחרים של שפות שמוטמעים בדפדפנים, כדי לקבל הסבר תמציתי לטקסט ארוך או מורכב.
כשמבצעים הצפנה מצד הלקוח, אפשר לעבוד עם נתונים באופן מקומי, וכך לשמור על בטיחות הנתונים הרגישים וליהנות מזמינות בכל קנה מידה. עם זאת, חלון ההקשר קטן בהרבה בהשוואה למודלים בצד השרת, ולכן יכול להיות שיהיה קשה לסכם מסמכים גדולים מאוד. כדי לפתור את הבעיה, אפשר להשתמש בטכניקה של סיכום הסיכומים.
מהו סיכום של סיכומים?
כדי להשתמש בטכניקה של סיכום הסיכומים, צריך לפצל את תוכן הקלט בנקודות מרכזיות, ואז לסכם כל חלק בנפרד. אפשר לשרשר את הפלט מכל חלק, ואז לסכם את הטקסט המשורשר לסיכום סופי אחד.

פיצול התוכן בצורה מושכלת
חשוב לחשוב איך לפצל קטע טקסט גדול, כי אסטרטגיות שונות יכולות להוביל לתוצאות שונות במודלים שונים של LLM. מומלץ לפצל את הטקסט כשעוברים לנושא אחר, למשל כשמתחיל קטע חדש במאמר או כשמתחילים פסקה חדשה. חשוב להימנע מפיצול הטקסט באמצע מילה או משפט, ולכן אי אפשר להשתמש בספירת תווים כהנחיה היחידה לפיצול.
יש הרבה דרכים לעשות את זה. בדוגמה הבאה, השתמשנו בRecursive Text Splitter מ-LangChain.js, שמאזן בין הביצועים לבין איכות הפלט. השיטה הזו אמורה לעבוד ברוב עומסי העבודה.
כשיוצרים מכונה חדשה, יש שני פרמטרים חשובים:
chunkSize
הוא מספר התווים המקסימלי שאפשר להזין בכל פיצול.-
chunkOverlap
הוא מספר התווים שחופפים בין שני פיצולים עוקבים. כך, כל נתח יכלול חלק מההקשר של הנתח הקודם.
מפצלים את הטקסט באמצעות splitText()
כדי להחזיר מערך של מחרוזות עם כל נתח.
ברוב מודלי השפה הגדולים, חלון ההקשר מוגדר כמספר טוקנים ולא כמספר תווים. בממוצע, טוקן מכיל 4 תווים. בדוגמה שלנו, chunkSize
הוא 3,000 תווים, שזה בערך 750 טוקנים.
קביעת הזמינות של טוקנים
כדי לקבוע כמה אסימונים זמינים לשימוש בקלט, משתמשים בשיטה measureInputUsage()
ובמאפיין inputQuota
. במקרה כזה, ההטמעה היא בלתי מוגבלת, כי אי אפשר לדעת כמה פעמים הכלי לסיכום יפעל כדי לעבד את כל הטקסט.
יצירת סיכומים לכל פיצול
אחרי שמגדירים איך התוכן יפוצל, אפשר ליצור סיכומים לכל חלק באמצעות Summarizer API.
יוצרים מופע של הכלי לסיכום באמצעות הפונקציה create()
. כדי לשמור על כמה שיותר הקשר, הגדרנו את הפרמטר format
לערך plain-text
, את הפרמטר type
לערך tldr
ואת הפרמטר length
לערך long
.
לאחר מכן, יוצרים את הסיכום לכל פיצול שנוצר על ידי RecursiveCharacterTextSplitter
ומשרשרים את התוצאות למחרוזת חדשה.
הפרדנו כל סיכום בשורה חדשה כדי שיהיה קל לזהות את הסיכום של כל חלק.
השורה החדשה הזו לא משנה כשמבצעים את הלולאה הזו רק פעם אחת, אבל היא שימושית כדי לקבוע איך כל סיכום מוסיף לערך הטוקן של הסיכום הסופי. ברוב המקרים, הפתרון הזה אמור לעבוד עבור תוכן באורך בינוני וארוך.
סיכום רקורסיבי של סיכומים
אם יש לכם כמות גדולה מאוד של טקסט, יכול להיות שאורך הסיכום המחובר יהיה גדול יותר מחלון ההקשר הזמין, ולכן הסיכום ייכשל. כדי לטפל בבעיה, אפשר ליצור סיכום של הסיכומים באופן רקורסיבי.

אנחנו עדיין אוספים את הפיצולים הראשוניים שנוצרו על ידי RecursiveCharacterTextSplitter
. לאחר מכן, בפונקציה recursiveSummarizer()
, אנחנו מבצעים לולאה של תהליך הסיכום על סמך אורך התווים של החלקים המחוברים. אם אורך התווים של הסיכומים חורג מ-3000
,
אז אנחנו משלבים אותם ל-fullSummaries
. אם לא מגיעים למגבלה, הסיכום נשמר כ-partialSummaries
.
אחרי שכל הסיכומים נוצרים, הסיכומים החלקיים הסופיים מתווספים לסיכום המלא. אם יש רק סיכום אחד ב-fullSummaries
, לא צריך לבצע רקורסיה נוספת. הפונקציה מחזירה סיכום סופי. אם יש יותר מסיכום אחד, הפונקציה חוזרת על עצמה וממשיכה לסכם את הסיכומים החלקיים.
בדקנו את הפתרון הזה עם RFC של Internet Relay Chat (IRC), שכולל 110,030 תווים, כולל 17,560 מילים. הסיכום הבא נוצר באמצעות Summarizer API:
צ'אט ממסר באינטרנט (IRC) הוא דרך לתקשר באינטרנט בזמן אמת באמצעות הודעות טקסט. אתם יכולים לשוחח בצ'אטים בערוצים או לשלוח הודעות פרטיות, וגם להשתמש בפקודות כדי לשלוט בצ'אט ולקיים אינטראקציה עם השרת. זה כמו חדר צ'אט באינטרנט שבו אפשר להקליד ולראות את ההודעות של אחרים באופן מיידי.
זה די יעיל! הוא כולל רק 309 תווים.
מגבלות
טכניקת סיכום הסיכומים עוזרת לכם לפעול במסגרת חלון ההקשר של מודל בגודל לקוח. למרות שיש הרבה יתרונות ל-AI בצד הלקוח, יכול להיות שתיתקלו בבעיות הבאות:
- סיכומים פחות מדויקים: בשימוש ברקורסיה, תהליך הסיכום חוזר על עצמו מספר פעמים, ואולי אפילו אינסוף פעמים, וכל סיכום רחוק יותר מהטקסט המקורי. המשמעות היא שהמודל עשוי ליצור סיכום סופי שלא מספיק מפורט כדי להיות שימושי.
- ביצועים איטיים יותר: לוקח זמן ליצור כל סיכום. שוב, מכיוון שיש מספר אינסופי של סיכומים אפשריים בטקסטים ארוכים יותר, יכול להיות שהגישה הזו תימשך כמה דקות.
יש לנו הדגמה של הכלי לסיכום, ואפשר לראות את קוד המקור המלא.
שיתוף משוב
אפשר לנסות להשתמש בטכניקה של סיכום סיכומים עם טקסט קלט באורכים שונים, גדלים שונים של פיצול ואורכים שונים של חפיפה, באמצעות Summarizer API.
- כדי לשלוח משוב על ההטמעה של Chrome, אפשר להגיש דוח באגים או בקשה להוספת תכונה.
- קוראים את התיעוד ב-MDN
- אפשר לשוחח עם צוות Chrome AI על תהליך הסיכום או על כל שאלה אחרת לגבי AI מובנה.