סוכן שמריץ כלים: הלולאה, ואיפה היא נשברת בייצור

המודל מבקש, הקוד שלכם מריץ. ההפרדה הזאת היא גם מה שמאפשר שער אישור, וגם המקום שבו רוב הבאגים יושבים.

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

מה שחשוב להבין בהתחלה הוא שהמודל לא מריץ כלום. הוא מחזיר בלוק שאומר "תריץ את הכלי הזה עם הפרמטרים האלה". ההרצה היא שלכם. ההפרדה הזאת נראית כמו פרט טכני והיא בעצם הדבר שמאפשר את כל שכבת הבקרה.

מה עושים עם ההפרדה

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

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

תיאור הכלי הוא הממשק האמיתי

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

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

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

קריאות מקבילות

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

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

עצירות שצריך לטפל בהן

מלבד סיום רגיל יש שתי סיבות עצירה שמפילות קוד שלא מצפה להן.

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

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

מה שנשאר קשה

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

מקורות

  1. Tool use overview · Anthropic · 24 ביוני 2026