כיווץ-הקשר (Context Compaction)

כלים וסוכנים

הגדרה

כיווץ-הקשר הוא מנגנון שמסכם את היסטוריית-השיחה של סוכן כשהיא מתקרבת לגבול חלון-ההקשר, ופותח איתה חלון חדש וקטן יותר — כדי שסשן-סוכן ארוך יוכל להמשיך בלי לפרוץ את מגבלת-הטוקנים; ב-Claude Code זו תכונה מתועדת בשם auto-compact.

הבעיה: סוכן שממשיך לפעול אחרי שחלון-ההקשר מתמלא

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

המימוש המתועד ביותר: auto-compact ב-Claude Code

התיעוד הרשמי של Claude Code, כלי-הקידוד-הסוכני של Anthropic, מתאר תכונה בשם "חלון-כיווץ-אוטומטי" (Auto-Compact Window) שמפעילה כיווץ באופן אוטומטי כשהשיחה מתקרבת לגבול חלון-ההקשר של המודל. הסף המדויק תלוי בדגם: אצל מודלים עם חלון של 200 אלף טוקן הכיווץ מופעל בקרבת הגבול הזה, ואצל מודלים עם חלון-הקשר טבעי של מיליון טוקן ומעלה — ברירת-המחדל היא כ-967 אלף טוקן. אפשר לשנות את הסף עצמו בכמה דרכים: פקודת "/autocompact <גודל>" ששומרת את ההעדפה לצמיתות, דגל-שורת-פקודה לשימוש חד-פעמי, או משתנה-סביבה ייעודי; הטווח האפשרי הוא בין 100 אלף למיליון טוקן, כפוף לגבול-האמיתי של הדגם. מעבר לכיווץ האוטומטי, יש גם פקודה ידנית — "/compact", עם אפשרות להוסיף הנחיה כמו "התמקד בדוגמאות-קוד ובשימוש ב-API" — וגם אפשרות להגדיר הנחיות-כיווץ קבועות בקובץ ה-CLAUDE.md של הפרויקט.

למה לא פשוט להגדיר סף גבוה כמה שאפשר

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

המנגנון: קריאה נפרדת למודל, לא "קיצוץ" פשוט

התיעוד הטכני מבהיר שכיווץ אינו פעולה חינמית: Claude Code שולחת בקשה נפרדת למודל, עם אותה הנחיית-מערכת ואותם כלים כמו בבקשה הרגילה, ומצרפת בסופה הנחיה לסכם את כל ההיסטוריה שנצברה; אז ההיסטוריה המקורית מוחלפת בתקציר שחזר. מכיוון שזו קריאה מלאה למודל שמעבדת את כל ההיסטוריה שהצטברה, התיעוד מציין אותה במפורש כאחד הגורמים לעלייה בצריכת-הטוקנים בסשן ארוך — ובמיוחד אם הסשן חזר לפעילות אחרי הפסקה שחרגה מחיי-מטמון-ההקשר (ראו הערך מטמון-הקשר), שכן אז הבקשה-לסיכום עצמה מעבדת את כל ההיסטוריה כקלט לא-ממוטמן, מה שמייקר אותה עוד יותר.

מה נשמר ומה נמחק

לא כל פרט מהשיחה שווה-ערך בעיני מנגנון-הכיווץ. לפי התיעוד, התקציר שנוצר שומר במפורש את בקשות-המשתמש והכוונה שלהן, מושגים-טכניים מרכזיים, קבצים שנבדקו או שונו לצד קטעי-קוד חשובים מהם, שגיאות ואיך תוקנו, משימות-ממתינות ועבודה נוכחית — ומוותר על פלטי-הכלים המלאים ועל שרשרת-הנימוק הביניימית שהובילה אליהם. כדי לפצות על האובדן הזה, Claude Code גם קוראת-מחדש עד חמישה מהקבצים שעודכנו לאחרונה, ומזריקה-מחדש את גוף כל אחת מיכולות-ההרחבה (Skills) שהופעלו בסשן (עד תקרה של 5,000 טוקן ליכולת) — אך לא את תיאורי-היכולות המקוריים שנטענו בתחילת הסשן. מנגנון קרוב אך נבדל, שהתיעוד מכנה "ניקוי תוצאות-כלים" (Tool Result Clearing), מוותר רק על פלטי-כלים ישנים בלי להפעיל סיכום מלא — נחשב לצורת-הכיווץ ה"קלה" ביותר.

כיווץ מול נקודות-בדיקה: /compact מול /rewind

כדאי להבדיל בין כיווץ לבין מנגנון קרוב אך שונה מהותית: נקודת-בדיקה (Checkpoint). התיעוד של Claude Code מציג את פקודת "/rewind" כחלופה לכיווץ במקרים מסוימים — היא לא מסכמת את ההיסטוריה אלא חותכת אותה בחזרה לנקודה מוקדמת יותר בשיחה — ומציעה תפריט-בחירה: לשחזר גם את הקוד וגם את השיחה, רק את השיחה (תוך שמירת הקוד הנוכחי), או רק את הקוד. התפריט כולל גם שתי אפשרויות-סיכום, כך ש-"/rewind" אינו בדיוק ההפך מכיווץ אלא מכיל אותו כאחת מאפשרויותיו. כיווץ, לעומת זאת, שומר תמצית של הכול ומאפשר להמשיך קדימה עם הידע שהצטבר, במחיר של פירוט. שתי הגישות משרתות תרחישים שונים: "/rewind" מתאים כשמתברר שכיוון-העבודה כולו היה שגוי וכדאי להתחיל אותו חלק מחדש; כיווץ מתאים כשהעבודה עצמה תקינה אבל היסטוריית-השיחה פשוט ארוכה מדי כדי להמשיך להחזיק אותה במלואה.

תכונה קרובה: חידוש-שיחה מתוך תקציר

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

למה זה קריטי דווקא בסוכני-קידוד

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

התאמה אישית של הכיווץ דרך קובץ-הפרויקט

מעבר לברירת-המחדל, Claude Code מאפשרת להגדיר בקובץ CLAUDE.md של הפרויקט סעיף ייעודי בשם "הנחיות-כיווץ" (Compact Instructions), שמנחה את המודל מה לשמר ביתר-הקפדה כשהוא מבצע כיווץ בפרויקט הספציפי הזה — למשל להקפיד לשמר תמיד את רשימת-הבדיקות שעוד לא רצו, או את הפירוט המלא של החלטות-ארכיטקטורה שהתקבלו. זו דרך לתת לצוות-פיתוח שליטה על סדרי-העדיפויות של הכיווץ באופן שמתאים לאופי הפרויקט הספציפי, במקום להסתמך רק על ברירת-המחדל הכללית שמתאימה באותה מידה לכל פרויקט.

כיווץ ויכולות-הרחבה: מה נטען מחדש ומה לא

פרט טכני שממחיש כמה מדויק מנגנון-השחזור-לאחר-כיווץ: כשמסתיים כיווץ, Claude Code מזריקה-מחדש להקשר את גוף כל אחת מיכולות-ההרחבה (Skills) שהופעלו בסשן לפני הכיווץ, עד תקרה של 5,000 טוקן ליכולת אחת — כדי שהסוכן לא יאבד את ההנחיות המפורטות שהיכולת הזו כללה. אבל תיאורי-היכולות הכלליים שנטענו כאינדקס בתחילת הסשן, כדי לאפשר לסוכן לדעת אילו יכולות בכלל קיימות ולבחור ביניהן, אינם נטענים-מחדש אוטומטית אחרי כיווץ — כלומר הסוכן "זוכר" איך להשתמש ביכולות שכבר הפעיל, אבל לא בהכרח באילו יכולות נוספות הוא יכול להיעזר מעכשיו, אלא אם התקציר עצמו שימר את המידע הזה.

כיווץ ומטמון-הקשר: שני מנגנונים שיכולים להתנגש

כיווץ ומטמון-הקשר (ראו הערך הייעודי) פותרים בעיות שונות אך משפיעים זה על זה: מטמון-הקשר חוסך עלות כשהיסטוריית-השיחה נשארת יציבה וגדלה בהדרגה, ואילו כיווץ מחליף את ההיסטוריה כולה בתקציר חדש — כלומר הוא בהכרח שובר כל מטמון שהצטבר עד אז, כי הקידומת שהמטמון הכיר כבר לא קיימת. התיעוד של Claude Code מציין זאת ישירות: אם סשן מתחדש אחרי הפסקה ארוכה מחיי-המטמון, הבקשה-לכיווץ עצמה מתבצעת במחיר-מלא, בלי הנחת-המטמון, בדיוק בגלל הבעיה הזו. המשמעות המעשית: כיווץ תדיר-מדי לא רק מסכן אובדן-מידע אלא גם מבטל חלק מהיתרון הכלכלי שמטמון-ההקשר נועד לספק.

כיווץ מול זיכרון ארוך-טווח: מה נשאר בפנים, מה יוצא החוצה

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

כיווץ כטכניקה בהנדסת-הקשר, ומה שעלול להשתבש

רשומת-הנדסה של Anthropic בשם "Effective Context Engineering for AI Agents" ממסגרת כיווץ כאחת הטכניקות המרכזיות בתחום הרחב יותר של הנדסת-הקשר (ראו הערך הייעודי באתר הזה): "הפרקטיקה של לקיחת שיחה שמתקרבת לגבול חלון-ההקשר, סיכום תוכנה, והתחלה-מחדש של חלון-הקשר חדש עם הסיכום" — ומכנה אותה "המנוף הראשון בהנדסת-הקשר להנעת קוהרנטיות ארוכת-טווח". אותה רשומה גם מזהירה במפורש: "כיווץ אגרסיבי מדי עלול לגרום לאובדן הקשר עדין אך קריטי" — כלומר הסיכום, מטבעו, בוחר מה חשוב ומה לא, וטעות בבחירה הזו נעלמת בלי סימן-אזהרה. הרשומה ממליצה גם על שתי טכניקות משלימות לכיווץ ולא תחליף לו: "רישום-הערות מובנה" (שמירת מידע חשוב בקובץ חיצוני-פרסיסטנטי לפני שהוא נמחק מההקשר) ו"ארכיטקטורת תת-סוכנים", שבה כל תת-סוכן מחזיר תקציר מכווץ בלבד להורה שלו במקום את כל ההקשר שאסף.

שאלות נפוצות ❓

מה ההבדל בין כיווץ-הקשר להנדסת-הקשר?

הנדסת-הקשר היא הדיסציפלינה הרחבה של ניהול מה נכנס לחלון-ההקשר של מודל; כיווץ-הקשר הוא מנגנון ספציפי אחד בתוכה — סיכום שיחה שמתקרבת לגבול, ופתיחת חלון חדש עם התקציר.

האם כיווץ קורה אוטומטית?

כן, ב-Claude Code הוא מופעל אוטומטית כשהשיחה מתקרבת לגבול חלון-ההקשר של הדגם, אבל אפשר גם להפעיל אותו ידנית בפקודת /compact או לשנות את הסף שמפעיל אותו.

האם כיווץ עלול לגרום לאובדן מידע?

כן. Anthropic מזהירה במפורש שכיווץ אגרסיבי מדי עלול לגרום לאובדן הקשר עדין אך קריטי, כי הסיכום בוחר מה לשמור ומה להשמיט.

האם הכיווץ עצמו חינמי?

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