דילוג לתוכן הראשי
aivrit

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

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

למה המכסה נגמרת מהר ממה שהעבודה מסבירה

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

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

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

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

שלוש השכבות של כל בקשה

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

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

הסדר הזה הוא כל העניין. שינוי בשכבת השיחה משאיר את שתי השכבות שמעליה ב-cache, ולכן תור רגיל זול. שינוי בהנחיות המערכת מבטל הכול, כי כל מה שאחריו יושב מעכשיו מאחורי תחילית אחרת.

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

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

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

כמה זמן ה-cache חי, ולמי

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

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

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

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

שימו לב לשורה השנייה, כי היא מפתיעה: סוכני משנה מקבלים חמש דקות גם במנוי. מי שבנו זרימת עבודה שמפזרת עבודה לסוכני משנה ותוהים למה היא יקרה יותר ממה שנראה סביר — זו אחת הסיבות.

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

איך בוחרים את התוקף בעצמכם

מגרסה 2.1.242 של קלוד קוד יש שליטה ישירה על שני הדליים, וזו הדרך המדויקת לעשות את זה. ההגדרה ‎promptCacheTtl‎ קובעת את השיחה הראשית, וההגדרה ‎subagentPromptCacheTtl‎ קובעת את כל השאר. לשתיהן יש מקבילה במשתני סביבה, ושתיהן מקבלות ‎5m‎ או ‎1h‎ בלבד — כל ערך אחר נעלם בשקט.

{
  "promptCacheTtl": "1h",
  "subagentPromptCacheTtl": "1h"
}

מי שעובדים מול מפתח API או מול ספק ענן ומרגישים שכל חזרה למקלדת עולה כסף: זו ההגדרה שמחזירה את השעה לשיחה הראשית. הדלי השני יישאר על חמש דקות עד שתבחרו גם עבורו.

כשיותר משליטה אחת חלה, קלוד קוד לוקח את הראשונה שמתאימה מתוך הסדר הזה:

  1. FORCE_PROMPT_CACHING_5M=1‎, שכופה חמש דקות על שני הדליים
  2. משתנה הסביבה של הדלי
  3. ההגדרה של הדלי
  4. ENABLE_PROMPT_CACHING_1H=1‎, שמבקש שעה לשני הדליים יחד
  5. ברירת המחדל של הדלי, לפי הטבלה שלמעלה

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

שווה לדעת שני סייגים. התוקף הארוך אינו זמין דרך שער היישומים של קלוד, ובאמזון Bedrock התמיכה בו משתנה בין מודלים ובין אזורים. אם מוני ה-cache שלכם עומדים על אפס, שם כדאי לחפש.

ה-cache שייך למחשב ולתיקייה

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

שלוש מסקנות מעשיות:

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

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

מה צורך טוקנים כשאתם לא ליד המקלדת

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

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

השאר הן בקשות אמיתיות שנשלחות בזמן שהסשן סרק, וכל אחת מהן נושאת את הקונטקסט המלא:

  • משימות מתוזמנות: משימה מתוזמנת יורה לפי המרווח שלה גם כשהסשן יושב בלי תנועה, ושולחת את הקונטקסט המלא בכל ירייה. זו הסיבה שלולאה שנשכחה פתוחה היא אחד הפרטים היקרים ביותר בחשבון
  • הודעות בין סשנים: הודעה שמגיעה מסשן אחר שלכם נמסרת כתור חדש כשהסשן הזה סרק. אפשר לבקש שהודעות נכנסות יוחזקו במקום להימסר, דרך ההגדרה ‎crossSessionInbound‎ בערך ‎hold
  • בדיקות המשך של יעד: כשעבודת רקע מחזיקה יעד פעיל בהמתנה, קלוד קוד מבקש מקלוד לבדוק מה קורה איתה גם בסשן סרק, וזה תור חדש עם הקונטקסט המלא. מגרסה 2.1.246 הוא מוגבל לשלוש בדיקות סרק ליעד בין הודעה להודעה שלכם, וקודם לכן זה היה בלי תקרה בכלל
  • חברי צוות סוכנים: כל חבר צוות פעיל ממשיך לצרוך טוקנים עד שהוא יוצא או עד שהסשן נגמר
  • דחיסה: ‎/compact‎ קורא את השיחה שהוא מסכם, ולכן דחיסה של קונטקסט גדול היא בעצמה בקשה גדולה. כשרוצים התחלה נקייה ולא המשכיות, ‎/clear‎ אינו עולה דבר

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

איך רואים את זה במספרים

לפני שמשנים הרגלים, שווה למדוד. הפקודה ‎/usage‎ היא נקודת הפתיחה, והפקודה ‎/cost‎ היא שם נרדף לאותו מסך בדיוק — מי שחיפש פקודת עלות נפרדת יכול להפסיק לחפש.

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

הפילוח הזה הוא הכלי הטוב באמת, והוא מציג שלושה דברים:

  • ייחוס: איזה חלק מהשימוש האחרון הלך לסקילים, לסוכני משנה, לתוספים ולכל שרת MCP בנפרד. חלקו של שרת נספר רק על בקשות שבאמת צרכו תוצאה של אחד הכלים שלו
  • סימון התנהגויות: התנהגות שאחראית ל-10% ומעלה מהשימוש האחרון מסומנת בשם. קונטקסט ארוך והחטאות cache הן בדיוק שתי ההתנהגויות שהעמוד הזה עוסק בהן
  • שורות לולאה: שורה לכל משימה מתוזמנת כבדה שרצה לאחרונה, עם כמות ההרצות, סך הטוקנים, טוקנים להרצה ומתי רצה לאחרונה. זה בדיוק הכלי שמאתר את הלולאה שנשכחה. דורש גרסה 2.1.242 ומעלה

מקישים ‎d‎ או ‎w‎ למעבר בין 24 שעות לשבוע. חשוב לזכור מגבלה אחת: המספרים מחושבים מהיסטוריית הסשנים על המחשב הזה בלבד, כך ששימוש ממכשיר אחר או מ-Claude.ai פשוט אינו מופיע שם.

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

שדהמה הוא אומר
cache_read_input_tokensטוקנים שהוגשו מה-cache בתור הזה, בכ-10% ממחיר הקלט הרגיל
cache_creation_input_tokensטוקנים שנכתבו ל-cache בתור הזה, במחיר כתיבה

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

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

תקרת הוצאה, ומה היא לא עושה

יש דגל שעוצר ריצה בסכום שקבעתם, וספיגת האכזבה כדאי שתקרה כאן ולא בהמשך:

claude -p --max-budget-usd 5.00 "your query"

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

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

שורה תחתונה

שלושה הרגלים מכסים כמעט את כל מה שנכתב כאן, והם עולים פחות ממה שנדמה:

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

ומעל הכול: לפני שמשנים משהו, מריצים ‎/usage‎ ומסתכלים על הפילוח. ההתנהגות שאחראית לרבע מהשימוש שלכם כתובה שם בשם, ובדרך כלל היא אינה זו שניחשתם.

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

שאלות נפוצות

למה המכסה של קלוד קוד נגמרת מהר?

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

מה זה cache של הפרומפט בקלוד קוד?

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

למה המכסה יורדת כשאני לא עובד?

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

איך רואים כמה טוקנים צרכתי בקלוד קוד?

הפקודה ‎/usage‎ מציגה את הסשן הנוכחי, ובמנוי גם פילוח של מה שנספר מול המכסה: ייחוס לפי סקילים, סוכני משנה, תוספים ושרתי MCP, סימון התנהגויות שאחראיות ל-10% ומעלה מהשימוש האחרון, ושורה לכל משימה מתוזמנת כבדה. הפקודה ‎/cost‎ היא שם נרדף לאותו מסך. המספרים מחושבים מהיסטוריית הסשנים על המחשב הזה בלבד.

אפשר להגביל את ההוצאה של קלוד קוד?

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

מדריכים קשורים