Subagents — האצלת משימות

כשלולאה אחת כבר לא מספיקה

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

זה יוצר שתי בעיות: הקונטקסט מתמלא בפרטים שהיו חשובים רק לצעד אחד (למשל תוכן מלא של קובץ שכבר נבדק), וככל שהוא מתארך, העלות עולה והמודל מתמקד פחות טוב במה שרלוונטי עכשיו — אותה בעיה שראינו בפרק ה-Context Window בנושא ה-LLM.

מה זה בעצם Subagent?

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

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

יחסי הורה-ילד: האצלה ותקציר בחזרה

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

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

JSON
{
  "type": "tool_call",
  "name": "spawn_subagent",
  "input": {
    "task": "בדוק את התיקייה src/auth ומצא בעיות אבטחה",
    "tools": ["read_file", "grep"]
  }
}
תרשים המציג תיבת הורה עליונה עם חץ יורד אל תוך מסגרת מקווקווית (המסמלת קונטקסט מבודד) המכילה עיגול עם סמל לולאה פנימית קטנה — הסאב-אגנט הרץ. חץ כתום חוזר מהמסגרת המקווקווית אל בועה קטנה מסומנת בקווים (תקציר), לא בחזרה למסגרת המלאה — ממחיש שרק תקציר, לא כל התהליך הפנימי, חוזר להורה.
ההורה מאציל משימה לסאב-אגנט בקונטקסט מבודד משלו, ומקבל בחזרה רק תקציר — לא את כל התהליך הפנימי

מתי כדאי להשתמש בסאב-אגנט

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

גם בלי מקביליות, סאב-אגנט משתלם כשמשימת המשנה "רועשת" (הרבה קריאות כלים ותוצאות ארוכות) וההורה צריך רק את השורה התחתונה. מקרה נוסף: כשמשימת המשנה צריכה הגדרה אחרת — persona ייעודית או סט כלים מצומצם, למשל הרשאות קריאה בלבד.

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

כתיבת משימה לסאב-אגנט: הוא לא יודע מה שההורה יודע

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

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

JSON
{
  "bad_task": "תבדוק את הבעיה שדיברנו עליה",
  "good_task": "בדיקות ההתחברות ב-src/auth/login.test.ts נכשלות מאז שדרוג ספריית ה-JWT. מצא את הסיבה. כבר נבדק: משתני הסביבה תקינים. אל תשנה קבצים - רק אבחון. החזר: הסיבה, קובץ ושורה, ותיקון מוצע."
}

המחיר: Latency, עלות ואיבוד מידע

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

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

שאלות נפוצות

האם סאב-אגנט יכול להפעיל סאב-אגנט משלו?

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

איך מוודאים שהתקציר שחוזר מהסאב-אגנט מכיל את מה שההורה צריך?

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

האם סאב-אגנט חייב לרוץ על אותו מודל כמו ההורה?

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