דפוס מתזמר-עובדים (Orchestrator-Worker Pattern)

כלים וסוכנים

הגדרה

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

הגדרה: מה זה דפוס מתזמר-עובדים, ואיך הוא שונה מצינור-עבודה קבוע

דפוס מתזמר-עובדים (Orchestrator-Worker Pattern) הוא תבנית-זרימת-עבודה שבה מודל-שפה מרכזי — "המתזמר" — מפרק דינמית משימה מורכבת לתת-משימות, מפיץ אותן במקביל לכמה "סוכני-עובד" (Worker LLMs), ולבסוף מסנתז את התוצאות שחוזרות מהם לתשובה אחת מאוחדת. ההבדל המהותי מול צינור-עבודה קבוע-מראש (למשל "שרשור-פרומפטים", Prompt Chaining, שבו כל שלב מוגדר מראש בקוד ומורץ בסדר קבוע) הוא שהמתזמר מחליט "תוך-כדי-ריצה" כמה תת-משימות יש, מה תוכנן, ולאיזה עובד לשלוח כל אחת — הפירוק עצמו הוא פלט של המודל, לא לוגיקה קשיחה שנכתבה מראש על-ידי מפתח. זה מה שהופך את הדפוס למתאים במיוחד למשימות שבהן מספר תת-השלבים הדרושים אינו ידוע מראש, ותלוי בתוכן הבקשה הספציפית — לדוגמה, שאילתת-מחקר שדורשת לפעמים תת-משימה אחת ולפעמים חמש, בהתאם למידת-המורכבות של הנושא ולמספר-הזוויות שראוי לבדוק בו בנפרד לפני שמגבשים תשובה סופית.

המקור התיעודי: "Building Effective Agents" של Anthropic ומשפחת חמשת-הדפוסים

המונח מתועד באופן מדויק ורשמי בפוסט המכונן של Anthropic מדצמבר 2024, "בניית סוכנים אפקטיביים" (Building Effective Agents), שמגדיר אותו כאחד מחמישה דפוסי-זרימה-עבודה סטנדרטיים לבניית מערכות-LLM מורכבות. ארבעת האחרים: "שרשור-פרומפטים" (Prompt Chaining) — פירוק משימה לרצף-שלבים קבוע-מראש, לעיתים עם "שערי-בדיקה" (gates) שמוודאים תקינות-ביניים לפני מעבר לשלב הבא; "ניתוב" (Routing) — סיווג קלט נכנס ושליחתו לאחד מכמה נתיבי-טיפול מיוחדים; "הרצה-מקבילית" (Parallelization) — הרצת אותה משימה כמה פעמים לצורך הצבעה, או פיצול משימה לתתי-חלקים ידועים-מראש שמורצים בו-זמנית; ו"מעריך-משפר" (Evaluator-Optimizer) — מודל אחד מייצר טיוטה, מודל שני (או אותו מודל בתפקיד שונה) מבקר אותה, בלולאה חוזרת עד שהתוצאה עומדת ברף איכות. ההגדרה הרשמית של מתזמר-עובדים בפוסט: "בזרימת-העבודה מתזמר-עובדים, LLM מרכזי מפרק דינמית משימות, מאציל אותן לLLM-י-עובד, ומסנתז את תוצאותיהם". הפוסט גם מבחין בין "זרימת-עבודה" (Workflow) לבין "סוכן" (Agent) במובן הצר-יותר: זרימת-עבודה עוברת דרך נתיבי-קוד קבועים-מראש, בעוד סוכן "מנהל אוטונומית" את התהליך שלו-עצמו — ודפוס מתזמר-עובדים נמצא בתווך: יש בו פירוק דינמי (כמו סוכן), אבל בתוך מסגרת-שליטה קבועה של "פרק, האצל, סנתז" (כמו זרימת-עבודה).

מקרה-מבחן: מערכת-המחקר הרב-סוכנית של Anthropic

הדוגמה המפורטת והמתועדת ביותר ליישום בקנה-מידה תעשייתי מופיעה בפוסט ההנדסי הבא של Anthropic, מיוני 2025, שמתאר את מערכת-המחקר-הרב-סוכנית שלה: סוכן-מתזמר בשם LeadResearcher מקבל שאילתת-מחקר, בונה תוכנית-מחקר, ואז מפעיל 3 עד 5 "תת-סוכני-עובד" (Subagents) במקביל — כל אחד עם חלון-הקשר וגישת-כלים משלו — לחקור זוויות-משנה שונות של אותה שאלה, ולעיתים אף עם 3 כלים או יותר שכל עובד מפעיל בו-זמנית מבפנים. כשהעובדים מסיימים, LeadResearcher מסנתז את התוצאות ומחליט אם דרוש עוד סבב-חקירה לפני שמעביר את התוצאה לניסוח סופי אצל סוכן-ציטוטים ייעודי. Anthropic מדווחת ש-95% משונות-הביצועים בהערכת BrowseComp הוסברה על-ידי שלושה גורמים בלבד — מספר-הטוקנים-שנצרכו, מספר-קריאות-הכלים, ובחירת-המודל — כשמספר-הטוקנים לבדו הסביר 80% מהשונות; ושהמערכת המתוזמרת-רב-סוכנית עקפה ב-90.2% סוכן בודד על מבחן-מחקר פנימי, במחיר של כ-15 פי יותר טוקנים מאשר שיחת-צ'אט רגילה (לעומת פי-4 בלבד לסוכן בודד עם כלים). שיפורים תפעוליים לאורך זמן הראו שהתועלת-בפועל מהדפוס לא הייתה קבועה: שדרוג תיאורי-הכלים שכל עובד קיבל צמצם את זמן-השלמת-המשימה ב-40%, ושינויים בדרך שבה עובדים הופעלו במקביל הביאו במקרים מסוימים לקיצור זמן-המחקר הכולל בעד 90% — הוכחה שבדפוס מתזמר-עובדים, איכות-ניסוח-ההוראות שכל עובד מקבל מהמתזמר משפיעה על התוצאה לפחות באותה מידה כמו עצם קיום-המקביליות.

מתי להשתמש בדפוס הזה, ומתי להימנע ממנו

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

הבדל מ"תזמור-סוכנים" הכללי ומדפוסי-זרימה שכנים אחרים

חשוב להבדיל בין דפוס מתזמר-עובדים הספציפי הזה לבין המונח הרחב יותר "תזמור-סוכנים" (Agent Orchestration): תזמור-סוכנים הוא הקטגוריה הכללית של כל שיטת-ניהול בין כמה סוכנים — כולל ניתוב מרכזי, זרימה-רציפה (pipeline), ותיאום-לא-מרכזי — ואילו מתזמר-עובדים הוא דפוס-ספציפי אחד בתוך הקטגוריה הזו, המזוהה עם פירוק-דינמי + הפצה-מקבילית + סינתזה. הוא גם שונה מ"הרצה-מקבילית" הפשוטה (Parallelization) — שם, לרוב, אותה משימה מופצת לכמה מודלים באופן זהה כדי להשוות תוצאות ("הצבעה") או שתת-המשימות ידועות-מראש ומפוצלות סטטית לפי חלוקה קבועה; במתזמר-עובדים, לעומת זאת, המתזמר עצמו מחליט דינמית מה כל עובד יעשה. מדריך-הארכיטקטורה של מיקרוסופט ל-Azure מתעד תבנית קרובה תחת השם "תזמור-מקבילי" (Concurrent Orchestration), עם הכינויים החלופיים "פאן-אאוט/פאן-אין", "scatter-gather" ו-"map-reduce" — אך שם, בניגוד למתזמר-עובדים, כל הסוכנים בדרך-כלל מעבדים בו-זמנית את אותו קלט מנקודות-מבט שונות, ולא מקבלים תת-משימות שונות שפורקו דינמית. לבסוף, "דפוס תת-סוכן" (Subagent Pattern) מתאר את לבנת-הבניין הממוקדת יותר — יחידת-הפעלה בודדת עם חלון-הקשר מבודד — שממנה, בפועל, בנוי דפוס מתזמר-העובדים: תת-הסוכן הוא ה"עובד", ומתזמר-העובדים הוא הדפוס השלם שמתאר איך המתזמר מנהל את קבוצת-התת-הסוכנים הזו מקצה-לקצה.

קרוב-משפחה פרוע-יותר: תזמור מגנטי (Magentic) לבעיות פתוחות-לחלוטין

מדריך-הארכיטקטורה של Azure מתעד גם דפוס שכן נוסף, "תזמור מגנטי" (Magentic Orchestration), שמיועד לבעיות פתוחות-ומורכבות שאין להן תוכנית-פעולה קבועה-מראש כלל — לא רק תת-משימות לא-ידועות, אלא אפילו לא ברור מראש כמה סבבי-תכנון יידרשו. שם, "מנהל מגנטי" (Magentic Manager) בונה "פנקס-משימות" (Task Ledger) שמתעדכן דינמית ככל שהקשר מתפתח, ומתעד יעדים ותתי-יעדים לאורך כל התהליך, לא רק בשלב-הפירוק הראשוני היחיד כמו במתזמר-עובדים הקלאסי. ההבדל המעשי בין השניים: במתזמר-עובדים, הפירוק מתרחש בעיקר פעם אחת בתחילת התהליך ואז העובדים פועלים במקביל עד לסיום; בתזמור-מגנטי, התוכנית-עצמה ממשיכה להתעדכן תוך-כדי-ריצה בהתאם לתוצאות-ביניים, מה שהופך אותו לגמיש יותר אך גם לפחות צפוי מבחינת עלות — Azure מציינת במפורש ש"תזמורי-מגנטי הם המשתנים-ביותר, מכיוון שסוכן-המנהל ממשיך לחזור-על-עצמו עד שהוא בונה תוכנית בת-קיימא, מה שמקשה על חיזוי העלות הכוללת" מראש, בניגוד למתזמר-עובדים שבו לפחות מספר-סבבי-הפירוק-הראשוניים ניתן להעריך מראש בקירוב.

ניהול-עלות בפועל: התאמת-מודל לכל עובד, וניטור לפי סוכן

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

שאלות נפוצות ❓

מה ההבדל בין דפוס מתזמר-עובדים לבין "תזמור-סוכנים" באופן כללי?

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

איך יודעים כמה "עובדים" להפעיל?

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

האם דפוס מתזמר-עובדים תמיד משתלם?

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

מה ההבדל בין מתזמר-עובדים לבין הרצה-מקבילית (Parallelization) רגילה?

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

האם המתזמר "רואה" את כל מה שהעובדים עשו?

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