מדריך בדיקות רגרסיה: כך תיערכו לעדכון מודל ששובר קוד בן-לילה
המעבר האוטומטי ל-Claude Sonnet 5 שבר קוד בפרודקשן בן-לילה. מדריך מעשי לבניית חבילת בדיקות רגרסיה, נעילת גרסאות מודל וניטור שגיאות API.

ב-30 ביוני 2026 מפתחים רבים גילו שהקוד שלהם נשבר בלי ששינו שורה אחת: אנת'רופיק שחררה את Claude Sonnet 5 והפכה אותו בן-לילה למודל ברירת המחדל בתוכניות Free ו-Pro וב-Claude Code. קריאות API שהעבירו temperature או top_p בערכים לא-דיפולטיביים התחילו להחזיר שגיאת 400, וצוותים שלא נעלו גרסת מודל מצאו את עצמם מכבים שריפות בפרודקשן. המדריך הזה מסביר איך בונים מערך הגנה שמונע את ההפתעה הבאה.
מה בדיוק נשבר, ולמה זה יקרה שוב
לפי מדריך המיגרציה הרשמי של אנת'רופיק, Sonnet 5 הביא שני שינויי API שוברים ביחס ל-Sonnet 4.6: חשיבה מורחבת ידנית עם budget_tokens כבר לא נתמכת, ופרמטרי דגימה (temperature, top_p, top_k) בערכים לא-דיפולטיביים נדחים עם שגיאת 400. הנקודה המעניינת היא שהשבירה תפסה את שני הקצוות של קהילת המפתחים בו-זמנית: מי שהעלה temperature לצורך גיוון יצירתי ומי שקבע אותו לאפס לצורך דטרמיניזם נשברו באופן זהה. רק ערך ברירת המחדל המילולי temperature=1.0 ממשיך להתקבל.
מעבר לשגיאות המפורשות, יש גם עלות שקטה: הטוקנייזר החדש מייצר כ-30% יותר טוקנים לאותו טקסט, כך שמגבלת max_tokens שכוונה בקפידה ל-Sonnet 4.6 עלולה לקטוע פלט באמצע ב-Sonnet 5. זו בדיוק סוג התקלה שלא מייצרת שגיאה בלוגים, אלא פשוט תשובות חתוכות שהמשתמשים מגלים לפניכם.
האירוע הזה הוא לא חריג אלא תבנית. כל ספק מודלים גדול מחליף ברירות מחדל, מוציא פרמטרים משימוש ומשנה התנהגות טוקניזציה. השאלה היא לא אם זה יקרה שוב, אלא האם המערכת שלכם תגלה את זה תוך דקות או תוך ימים.
שלב 1: נעילת גרסאות מודל (Model Pinning)
הכלל הראשון והפשוט ביותר: לעולם אל תשתמשו בכינוי גנרי של מודל בפרודקשן. מזהה כמו claude-sonnet מצביע תמיד על 'הגרסה העדכנית', כלומר הספק מחליט מתי הקוד שלכם עובר מודל. במקום זה, נעלו מזהה גרסה מלא וספציפי, ונהלו אותו כקונפיגורציה מרכזית אחת, לא כמחרוזת מפוזרת בעשרות קבצים.
במקרה הנוכחי, אנת'רופיק משאירה את Sonnet 4.6 פעיל עם תאריך פרישה משוער לא לפני 17 בפברואר 2027. זה חלון של חודשים ארוכים שבו אפשר להשאיר את הפרודקשן על המודל הישן והמוכר, ולבצע מיגרציה מסודרת בקצב שלכם. מי שנעל גרסה מראש בכלל לא הרגיש את ה-30 ביוני.
שימו לב: נעילת גרסה מגינה על קריאות API ישירות, אבל לא על כלים כמו Claude Code או ממשקי צ'אט, שם הספק שולט בברירת המחדל. אם תהליכי עבודה פנימיים שלכם תלויים בכלי כזה, תעדו את התלות והוסיפו אותה לרשימת הבדיקות אחרי כל הכרזת מודל.
שלב 2: חבילת בדיקות רגרסיה אוטומטית
בדיקות רגרסיה למודלי שפה שונות מבדיקות יחידה קלאסיות, כי הפלט לא דטרמיניסטי. המטרה היא לא להשוות מחרוזות אחד-לאחד, אלא לוודא שהחוזה בין האפליקציה למודל נשמר: מבנה הפלט, אורכו, שדות חובה, וסף איכות מינימלי. חבילה טובה כוללת כמה שכבות:
- בדיקות חוזה (Contract Tests): כל קריאת API עם הפרמטרים המדויקים שבשימוש בפרודקשן, כולל temperature ו-top_p. אם פרמטר מפסיק להתקבל, הבדיקה נופלת מיד עם 400 ברור.
- בדיקות מבנה: אם אתם מצפים ל-JSON עם שדות מסוימים, ולידציה של הסכמה על כל תשובה בסביבת הבדיקות.
- בדיקות אורך וקטיעה: השוואת אורך הפלט מול max_tokens, עם התראה כשהפלט נעצר בגלל המגבלה ולא בסיום טבעי. זו הבדיקה שהייתה תופסת את בעיית ה-30% טוקנים.
- Evals איכותיים: סט של 30 עד 100 פרומפטים מייצגים מהשימוש האמיתי שלכם, עם ניקוד אוטומטי (מודל-שופט או כללים) וסף מינימום שמתחתיו הרצה נכשלת.
- בדיקת עלות: חישוב טוקנים בפועל מול תקציב צפוי, כדי לתפוס שינויי טוקניזציה שמייקרים כל קריאה.
את החבילה מריצים בשלושה טריגרים: בכל deploy, בתזמון יומי קבוע נגד ה-API החי, ובאופן ידני מיד אחרי כל הכרזת מודל של הספק. ההרצה היומית היא הקריטית, כי היא זו שתופסת שינוי שהספק ביצע בצד שלו בלי שנגעתם בקוד.
import anthropic, pytest
client = anthropic.Anthropic()
PINNED_MODEL = "claude-sonnet-4-6" # מזהה נעול, לא כינוי גנרי
def test_sampling_params_accepted():
"""נופל מיד אם הספק מפסיק לקבל פרמטרים שבשימוש בפרודקשן"""
resp = client.messages.create(
model=PINNED_MODEL,
max_tokens=256,
temperature=0.0, # הפרמטר שנשבר ב-Sonnet 5
messages=[{"role": "user", "content": "החזר JSON: {\"ok\": true}"}],
)
assert resp.stop_reason != "max_tokens", "פלט נקטע - ייתכן שינוי טוקנייזר"

שלב 3: ניטור שגיאות API בפרודקשן
גם עם בדיקות מצוינות, שכבת הניטור היא רשת הביטחון האחרונה. שגיאת 400 על פרמטר שהוסר נראית בלוגים בדיוק כמו באג רגיל, ולכן צריך התראות ייעודיות: עלייה חדה בשיעור שגיאות 4xx מול ה-API של הספק, שינוי פתאומי בהתפלגות stop_reason, קפיצה בצריכת טוקנים לבקשה, ושינוי באורך התשובות הממוצע. כל אחד מהמדדים האלה היה מזהה את אירוע ה-30 ביוני תוך דקות.
הצוותים שעברו את זה בשלום הם אלה שהתייחסו למודל כתלות חיצונית לכל דבר, עם גרסה נעולה, בדיקות חוזה וניטור. מי שהתייחס אליו כשירות שתמיד עובד גילה את השבירה מהתלונות של הלקוחות
שלב 4: תהליך מיגרציה מסודר במקום קפיצה למים
כשמגיע הזמן לעבור למודל החדש, ההמלצה שעולה גם ממדריכי אנת'רופיק וגם ממדריך המיגרציה של OpenRouter היא להתייחס לזה כשינוי קוד ולא כהחלפת קונפיגורציה. התהליך המומלץ: מריצים את חבילת ה-evals על המודל החדש בסביבת בדיקות, מתקנים את מה שנשבר, מעבירים אחוז קטן מהתעבורה (Canary) תוך השוואת מדדים מול המודל הישן, ורק אז מרחיבים בהדרגה. במקרה של Sonnet 5, אנת'רופיק אף מציעה אוטומציה חלקית דרך הפקודה /claude-api migrate ב-Claude Code, שמחליפה את מזהה המודל ומתקנת את הפרמטרים השוברים בכל הקוד, אבל גם אחרי הרצה אוטומטית חובה להריץ את הבדיקות.
יש גם שיקול כלכלי ללוח הזמנים: תמחור ההשקה של Sonnet 5, 2 דולר למיליון טוקני קלט ו-10 דולר לפלט, בתוקף עד 31 באוגוסט 2026, ואז עולה ל-3 ו-15 דולר בהתאמה. מי שמסיים מיגרציה מסודרת לפני סוף אוגוסט נהנה מחלון התמחור הזול, אבל אל תתנו לדדליין הזה לדחוף אתכם לדלג על שלב ה-Canary.
מה זה אומר לצוותים בישראל
לסטארטאפים ישראליים שרצים מהר, הפיתוי לעבוד על כינוי המודל העדכני ולחסוך ניהול גרסאות הוא גדול, אבל האירוע של סוף יוני מראה את המחיר: לילה אחד של שגיאות 400 בפרודקשן עולה יותר מיום עבודה על חבילת בדיקות. ההשקעה המינימלית, מזהה מודל נעול בקובץ קונפיגורציה אחד, עשר בדיקות חוזה ב-CI והתראה אחת על שיעור שגיאות, לוקחת יום עבודה ומכסה את רוב התרחישים. לחברות גדולות עם רגולציה או SLA מול לקוחות, שווה להוסיף גם סביבת Staging קבועה שרצה על המודל הבא בתור, כך שכל הכרזת ספק נבחנת שם לפני שהיא מתקרבת לפרודקשן.
טיפ מעשי: נהלו קובץ models.yaml אחד עם שלושה שדות לכל שימוש: המודל הנעול בפרודקשן, המודל הנבחן ב-Staging, ותאריך הפרישה שהספק פרסם. סקירה חודשית קצרה של הקובץ הזה מחליפה את רוב ההפתעות.
בשורה התחתונה, עדכוני מודלים הם כוח טבע בתחום הזה, והם רק יתדרדרו ככל שהספקים מאיצים את קצב ההשקות. ההבדל בין צוות שמושבת ליום לבין צוות שבכלל לא מרגיש הוא לא מזל, אלא ארבע שכבות ההגנה: נעילה, בדיקות, ניטור ותהליך מיגרציה. את כולן אפשר להקים השבוע.
שאלות נפוצות
מה זה Model Pinning ולמה זה חשוב?
Model Pinning הוא שימוש במזהה גרסה מדויק של מודל (למשל claude-sonnet-4-6) במקום כינוי גנרי שמצביע תמיד על הגרסה העדכנית. כך הספק לא יכול להחליף לכם את המודל בן-לילה, ואתם שולטים במועד המעבר ומבצעים אותו רק אחרי בדיקות.
למה Claude Sonnet 5 מחזיר שגיאת 400 על temperature?
החל מ-Sonnet 5, פרמטרי דגימה כמו temperature, top_p ו-top_k בערכים לא-דיפולטיביים אינם מתקבלים ומחזירים שגיאת 400. רק ערך ברירת המחדל temperature=1.0 ממשיך לעבוד. הפתרון: להסיר את הפרמטרים מהקריאות או להישאר על Sonnet 4.6, שנשאר פעיל לפחות עד פברואר 2027.
איך בודקים מודל שפה בבדיקות רגרסיה אם הפלט לא דטרמיניסטי?
במקום השוואת מחרוזות מדויקת, בודקים את החוזה: שהפרמטרים מתקבלים בלי שגיאה, שמבנה הפלט (למשל סכמת JSON) תקין, שהפלט לא נקטע בגלל max_tokens, ושסט evals קבוע של פרומפטים מייצגים עובר סף איכות מינימלי. את החבילה מריצים בכל deploy וגם יומית מול ה-API החי.
דרגו את הכתבה
הדירוג עוזר לנו לדעת מה שווה לכם.



תגובות