Opus 4.7 API Deep Dive, Adaptive Thinking, xhigh, tool_use

📚 פיתוח עם Claude, Claude Code & API ⏱️ 14 דק׳ 🎓 מתקדם ✓ חינם לגמרי
Opus 4.7 API Deep Dive, Adaptive Thinking, xhigh, tool_use

המעבר שמפיל קוד, למה Opus 4.7 שונה מכל upgrade שעשית עד היום

רוב שדרוגי מודל הם פשוטים: מחליפים מחרוזת אחת, הכל עובד. Opus 4.7 שונה. שלושה שינויים שוברי-תאימות ב-Messages API אומרים שקוד עובד ב-4.6 יחזיר שגיאה 400 ב-4.7, בלי אזהרה, בלי deprecation warning. בתוך יומיים מהשקה, דוחות פגמים ממפתחים ב-Reddit ו-Hacker News הציפו את אותה תבנית: prompts שעבדו מצוין על 4.6 מניבים תוצאות קצרות, שגויות, או לא עולות בכלל. שיעור זה מפרק כל שינוי, מסביר למה Anthropic עשתה אותו, ונותן migration checklist עם קוד מוכן.

שינוי 1, Extended Thinking הוסר לחלוטין

זו השבירה הגדולה ביותר. בגרסאות 4.6 ומטה היה אפשר להגדיר תקציב טוקנים ל-thinking:

# Opus 4.6, עובד
thinking={"type": "enabled", "budget_tokens": 32000}

ב-4.7 הקריאה הזו מחזירה 400 Bad Request. ה-API מקבל רק מצב אחד כשחשיבה דלוקה:

# Opus 4.7, חובה
client.messages.create(
    model="claude-opus-4-7",
    max_tokens=64000,
    thinking={"type": "adaptive"},
    output_config={"effort": "high"},  # low | medium | high | xhigh | max
    messages=[{"role": "user", "content": "..."}]
)

למה השינוי? Anthropic פרסמה שב-evals פנימיים, adaptive thinking עקף את manual budget בעקביות. הסיבה: מודל שיכול להחליט בעצמו כמה לחשוב מתאים טוב יותר לסוג המשימה מאשר developer שקובע תקציב שרירותי של 10,000 טוקנים.

Adaptive thinking כבויה כברירת מחדל ב-4.7. בקשה ללא שדה thinking תרוץ בלי חשיבה כלל, בדיוק כמו התנהגות 4.6 ללא thinking. צריך להפעיל אותה במפורש.

שינוי 2, ה-effort Level "xhigh" החדש

ב-Opus 4.7 יש 5 רמות effort: lowmediumhighxhigh (חדש!), max. ה-xhigh מיועד לקוד ולעבודת agents, זה ברירת המחדל של Claude Code בכל תוכניות המנוי. ההבדל המעשי:

Effortמתי להשתמשעלות יחסית
low / mediumסיכומים פשוטים, סיווג טקסטנמוכה
highניתוח עסקי, כתיבה מורכבתבינונית
xhighקוד, אגנטים, debuggingגבוהה
maxבעיות מתמטיות קשות, מחקרגבוהה מאד + נטייה ל-overthinking

Anthropic ממליצה להתחיל עם xhigh לכל use-case של קוד ו-agents, ו-high כמינימום לכל שאר המשימות הקריטיות. אם תוצאות max גרועות מ-xhigh, אל תתפלא, זה documented: max לפעמים גורם ל-overthinking.

שינוי 3, Thinking Display: ברירת מחדל שקטה שמקפיאה אפליקציות

זה השינוי הכי מסוכן כי הוא לא זורק שגיאה. ב-4.6 thinking blocks חזרו עם תוכן. ב-4.7 ברירת המחדל היא display: "omitted", הבלוק קיים בתגובה, אבל שדה thinking ריק לגמרי.

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

התיקון: שורה אחת:

thinking={
    "type": "adaptive",
    "display": "summarized"  # מחזיר תוכן חשיבה
    # default: "omitted"
}

כאשר display="summarized", latency קצת גבוהה יותר, Claude מכין תמצית של reasoning שלו. אם אין לך צורך בתוכן החשיבה, השאר omitted וקבל latency טוב יותר.

שינוי 4, Temperature, top_p, top_k הוסרו לחלוטין

רבים שאלו: "מה קורה אם אני שולח temperature=0 לדטרמיניזם?". התשובה של Anthropic: זה לא עבד גם ב-4.6, temperature=0 מעולם לא הבטיח פלט זהה. ב-4.7 שלושת הפרמטרים האלה פשוט זורקים 400.

המעבר: הסר אותם מהקריאה. אם צריך לכוון התנהגות, עשה זאת דרך prompt. לדוגמה, במקום temperature=0.7 לקריאטיביות: הוסף לsystem prompt "ענה בשלוש גרסאות שונות עם גוון שונה לכל אחת".

Multi-turn עם Thinking Blocks, הכשל השקט ב-Agent Loops

ב-multi-turn עם tools יש כלל אחד קריטי: אל תסנן thinking blocks מה-messages history. ה-signature בתוך כל thinking block הוא reasoning מוצפן שהמודל צריך לשחזר הקשר. סינון שלו לא יזרוק שגיאה, הוא יגרום לתשובות עתידיות להיות פחות טובות, ובחלק מהמקרים לאבד חוט של ריצה.

# ❌ שגוי, מסנן thinking blocks
prev = [b for b in response.content if b.type != "thinking"]
messages.append({"role": "assistant", "content": prev})

# ✅ נכון, שומר הכל כפי שהוא
messages.append({"role": "assistant", "content": response.content})

Task Budgets, תקציב לאגנט שלם (Beta)

פיצ'ר חדש ב-4.7 לסטארטאפים בת"א שבונים agent loops: task budget נותן למודל הערכה של כמה טוקנים יש לו על פני ריצה שלמה, כולל חשיבה, קריאות כלים, תוצאות, ופלט סופי. הוא רואה ספירה לאחור ומעדיף משימות.

response = client.beta.messages.create(
    model="claude-opus-4-7",
    max_tokens=128000,
    output_config={
        "effort": "high",
        "task_budget": {"type": "tokens", "total": 128000}
    },
    messages=[{"role": "user", "content": "סרוק את הcodebase והצע refactor."}],
    betas=["task-budgets-2026-03-13"]
)

task_budget לעומת max_tokens: max_tokens הוא תקרה קשה לכל בקשה בודדת, המודל לא יודע עליו. task_budget הוא ייעוץ לריצה שלמה, המודל רואה אותו ומכווין עצמו. מינימום: 20k טוקנים. לעבודות שאיכות חשובה בהן יותר ממהירות, אל תגדיר task budget.

Checklist: Migration מ-4.6 ל-4.7

  1. החלף model="claude-opus-4-6" ב-model="claude-opus-4-7"
  2. החלף thinking={"type":"enabled","budget_tokens":N} ב-thinking={"type":"adaptive"} + output_config={"effort":"high"}
  3. הסר temperaturetop_ptop_k מכל קריאה
  4. אם מסטרמים חשיבה למשתמש: הוסף "display":"summarized"
  5. בditor לOPS שמשתמשים ב-multi-turn: בדוק שלא מסננים thinking blocks
  6. עדכן max_tokens עם headroom, הtokenizer החדש צורך עד 35% יותר
  7. טיפ: הפעל /claude-api migrate ב-Claude Code לאוטומציה של השלבים
thinking הוסר לחלוטין ב-4.7
network timeout של ה-API
display ברירת המחדל השתנתה ל-omitted, thinking blocks חוזרים ריקים. פתרון: display:summarized
streaming לא נתמך יותר ב-4.7

סיכום, מה חייב לזכור

רוצה ללמוד עם מעקב התקדמות, קוויזים ותעודה?

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