stop_reason: שבע סיבות עצירה, ורק לאחת יש פרטים

pause_turn אומר שלולאת כלי השרת נגמרה ויש להמשיך. stop_details מאוכלס רק בסירוב, ובכל השאר הוא ריק.

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

end_turn הוא סיום טבעי. max_tokens הוא פגיעה בתקרה שביקשתם, והפתרון הוא תקרה גבוהה יותר או סטרימינג. stop_sequence הוא רצף עצירה שהגדרתם. tool_use הוא בקשה להריץ כלי ולהמשיך.

השלוש שמפתיעות

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

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

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

הבדיקה שנשברת בשקט

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

וגם בסירוב, שדה ההסבר לא מובטח. ההסתעפות היא לפי סיבת העצירה, לא לפי הפרטים.

המקום שבו זה נבלע

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

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

מקורות

  1. Handling stop reasons · Anthropic · 24 ביוני 2026