דלגו לתוכן

הפעלת סוכנים במקביל

המדריך הזה מראה כיצד להריץ כמה סוכנים בו־זמנית בלי שהם ידרסו זה את זה.

יחידת הבידוד היא המרחב, לא הסוכן

קטע בשם “יחידת הבידוד היא המרחב, לא הסוכן”

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

לכן:

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

הכלל שנגזר מכך: מרחב אחד לכל משימה מקבילה.

הרצת משימות במקביל — מרחבים נפרדים

קטע בשם “הרצת משימות במקביל — מרחבים נפרדים”
  1. פתחו מרחב עם סוכן A ושלחו לו משימה.
  2. פתחו מרחב שני עם סוכן B ושלחו לו משימה אחרת.
  3. שניהם משוגרים מיד, כל אחד בצ׳קאאוט של המרחב שלו ועל הענף שלו.

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

עבודה משותפת במרחב אחד — כמה אזכורים

קטע בשם “עבודה משותפת במרחב אחד — כמה אזכורים”

במרחב בודד, אזכרו יותר מסוכן אחד עם @:

@alice refactor the auth module. @bob review what alice lands.

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

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

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

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

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

שני המשטחים מוגבלים לסביבת העבודה הפעילה.

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

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

כדי לצמצם התנגשויות בכל אחת מהדרכים:

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

כל סוכן שרץ עולה:

  • צ׳קאאוט של מרחב — זניח מבחינת דיסק כל עוד העתקה בעת כתיבה זמינה; ב-Windows, git worktree. מערכת קבצים שאינה יכולה לבצע reflink מכשילה את ההקצאה במקום להעתיק.
  • תהליך במארח השרת
  • אסימוני מודל, שמצטברים לפי סוכן

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