פייבל 5.1 בקלוד קוד: עד גרסה 2.1.260 כל תור עם כלי נשלח בלי cache
מאת ירון דויטשר עודכן לאחרונה:
פייבל 5.1 יצא ב-1 בספטמבר, וכמעט מיד התחילו לרוץ ברשת דיווחים על מכסה שנגמרת בקצב חשוד. דיווחים על החשבון של מישהו אחר אינם דבר שאפשר לאמת, ולא ננסה.
מה שכן מתועד, בשורה אחת ביומן השינויים של גרסה 2.1.260: לקלוד קוד הייתה באותם ימים תקלת cache אמיתית בפייבל 5.1, והיא נגעה בדיוק בחלק שגדל הכי מהר בשיחה.
הכלל: מי שעובד עם פייבל 5.1 בקלוד קוד ולא עדכן לגרסה 2.1.260 — כל תור שכולל קריאה לכלי שולח מחדש קונטקסט שהיה אמור להיקרא מה-cache, במחיר קלט מלא.
מה היה שבור, בדיוק
התיקון מנוסח בקצרה: cache הפרומפט בפייבל 5.1 לא כיסה את הקונטקסט שנוסף אחרי תוצאות של כלים, ולכן הוא נשלח כקלט לא-cached בכל תור עם קריאת כלי.
שווה לעצור על מה שזה אומר. ה-cache עובד על תחילת הבקשה: מה שזהה למה שכבר עובד נקרא בזול, ורק הזנב החדש מעובד באמת. תוצאת כלי היא בדיוק הזנב הזה — היא נכנסת לסוף השיחה, ובתור הבא היא כבר אמורה להיות חלק מהתחילית ה”קרה” והזולה. כשהיא אינה נכנסת ל-cache, היא נשארת קלט מלא לנצח, והיא מצטברת.
למה זה יקר במיוחד בקלוד קוד
כי בקלוד קוד כמעט אין תורים בלי כלים. קריאת קובץ, חיפוש, הרצת בדיקות, קומיט — כל אחד מהם הוא קריאה לכלי שמחזירה פלט לתוך השיחה. עבודה סוכנית ארוכה היא בפועל רצף כזה, ובדיוק שם הפער נפתח:
- הצטברות: כל תוצאת כלי נשארת בשיחה. אם היא אינה נכנסת ל-cache, התור העשירי משלם קלט מלא על תשע התוצאות שלפניו
- הכיוון הלא נכון: דווקא פייבל 5.1 מיועד למשימות ארוכות, עם חלון של מיליון טוקנים. המודל שהפער כאב בו יותר מכולם הוא המודל שנמכר על ריצות ארוכות
- חוסר נראות: קריאה מה-cache עולה שבריר ממחיר קלט מלא, ובפייבל 5.1 השבריר הזה קטן במיוחד (למה זה כך). כשהתקלה החליפה שבריר בשלם, שום דבר במסך לא צעק — רק המכסה זזה
צריך לומר את זה ביושר: אנתרופיק לא קשרה בין התיקון הזה לבין הדיווחים על מכסה שנשרפת. הקשר סביר, והוא לא מאושר. מה שכן ודאי הוא שהתקלה עצמה מתועדת, ושהיא תוקנה.
התיקון השני מבטל עצה שנתנו כאן אתמול
באותה גרסה יש שורה שנייה, והיא הופכת כלל שהאתר הזה לימד ביותר מעמוד אחד: /effort על פייבל 5.1 כבר לא מפיל את ה-cache כששינוי המאמץ נעשה באמצע סשן.
עד אתמול הכלל היה חד: המודל ורמת המאמץ הם חלק ממפתח ה-cache, ולכן מכווננים מאמץ בתחילת סשן ולא באמצע משימה. זה נכתב כאן בטיפ על החלפת מודל באמצע שיחה, בספוק על עלות סשן ו-cache הפרומפט, וגם בטיפ מאתמול על כוונון מאמץ — שאמר במפורש שבקלוד קוד זה עדיין לא כך.
זה היה נכון כשנכתב. הוא הפסיק להיות נכון באותו יום.
והסייגים חשובים כאן יותר מהכלל:
- פייבל 5.1 בלבד, לפי נוסח יומן השינויים. על שאר המודלים בקלוד קוד /effort ממשיך לאפס את התחילית בדיוק כמו קודם
- החלפת מודל לא השתנתה. מודל אחר הוא cache אחר, וזה נכון גם עכשיו
- ב-API זה סיפור נפרד ומוקדם יותר: שינוי מאמץ לכל הודעה בנפרד קיים שם מאז ההשקה, בבטא ומאחורי כותרת ייעודית, וגם במיתוס 5.1 ובאופוס 5. שינוי המאמץ ה”רגיל”, זה שברמת הבקשה כולה, עדיין מאתחל את ה-cache בכל מודל (התיעוד)
המשמעות המעשית נעימה: מי שעובד על פייבל 5.1 יכול להוריד מאמץ לשלב מכני באמצע משימה ולהעלות אותו בחזרה לשלב הקשה, בלי לשלם על קריאה מחדש של כל ההיסטוריה.
עכשיו אפשר פשוט לשאול למה ה-cache הוחטא
התיקון השלישי הוא הקטן שבשלושה, והוא מייתר הרבה ניחושים. /cost ושדה
prompt_cache בשורת הסטטוס מציגים עכשיו גם סיבה משוערת להחטאת cache — למשל
שהגדרות הכלים או הנחיות המערכת השתנו, או שהשיחה שקטה זמן רב מדי ופג התוקף.
עד עכשיו הדרך לענות על “למה זה קרה” הייתה להשוות cache_read_input_tokens מול
cache_creation_input_tokens ולנחש מה בתחילית זז. הניחוש עדיין שימושי, אבל הוא
כבר לא הצעד הראשון.
מה לעשות היום
- לעדכן. זו הפעולה היחידה שקונה את כל השלושה: מי שנשאר על גרסה מלפני 2.1.260 ועובד על פייבל 5.1 משלם על התקלה הראשונה בכל תור עם כלי
- להסתכל על /cost בסשן ארוך אמיתי, לא בסשן ניסיון. יחס קריאה שנראה נמוך ביחס לאורך השיחה הוא הסימן, והסיבה המשוערת עכשיו מופיעה לידו
- לכוונן מאמץ באמצע משימה — אבל רק על פייבל 5.1, ורק אחרי העדכון
שורה תחתונה
שלוש שורות ביומן שינויים אחד, וכולן על אותו מנגנון: cache הפרומפט. אחת מהן תיקנה דליפת עלות שאיש לא ראה, אחת שחררה כפתור שהיה נעול, ואחת הפכה את המנגנון לקריא.
והערה על האתר הזה: העצה “אל תיגעו במאמץ באמצע סשן” נכונה עדיין לכל המודלים חוץ מאחד — והאחד הזה הוא מודל הדגל. העמודים שאומרים אחרת מתוקנים יחד עם הטיפ הזה, כי עמוד שנשאר עם כלל שפג הוא בעיה גדולה יותר מעמוד חסר.
התמונה המלאה של שני הכפתורים: מודל ורמת מאמץ בקלוד קוד. ואיפה כל שאר מה שמאפס את ה-cache מרוכז: החלפת מודל באמצע שיחה.