title: “CrewAI” sidebarTitle: “CrewAI” description: “ניהול צוות, זרימות, סוכנים לפי תפקיד, כלים, זיכרון ומשוב אנושי.” icon: “/images/frameworks/crewai.svg”
התקנה
crewai גרסאות 1.13 עד 2.0. גרסה 1.13 היא הגרסה שהוספה started_event_id והנורמליזציה של שימוש בטוקנים, ששניהם מהם המתאם תלוי כדי להתאים אירועים ולדווח על טוקנים.
ערוך
instrument() רושם מאזין על אפיק האירועים ברמת המודול של CrewAI וממנוי מטפל אחד לכל מחלקת אירועים. כלום לגבי הצוות, הסוכנים, המשימות או הכלים שלך לא משתנה.
מה מתועד
משימה לא משדרת כלום בכוונה. משימת CrewAI היא תת-קבוצה של ביצוע הסוכן שמריץ אותה, ולכן פליטה של שניהם תשדר כל שורה פעמיים ותיצור אותם כאחים. מזהה המשימה והשם מיזעקים לאירועים של הסוכן עצמו.
פעולות זיכרון וידע מתועדות ככלים, שנקראו על פני השטח שהם פוגעים בהם, כדי שהם יופיעו ליד הכלים האמיתיים שלך כאשר אתה יכול להשוות את ההשהיית שלהם.
בצוות היררכי, קינון הוא מה שהופך את ההעקבות לקריאות:
delegate_work_to_coworker, לא ישירות על המנהל, ולכן המתאם עוקב אחרי הקישור הזה. ללא זה כל סוכן יוצא אח של כל אחד אחר והמבנה ההנחיה אבוד.
דוגמה
analyst span נסגר, ה-writer span נפתח, ושניהם יושבים בתוך span crew אחד.
תן שם ל-spans שלך
agent_id מגיע מ-Agent(role=...), זה מה שהופך אותו לפן יוקרה קריא על הלוח.
agent_id הוא עמודה בעלת קרדינליות נמוכה. תפקיד המכיל מזהה ריצה או חותמת זמן מורידו לכל שאילתה שמישהו מריץ. אם תפקיד נראה כמו מזהה, המתאם מסרב אותו ושם את הערך האמיתי בשדה payload במקום.
שלוט בסדר הישיבה
מסודר בסדר זה, התאמה ראשונה זוכה:instrument("crewai", session_id=...)- ההיקף
failproofai_sdk.session()המקיף uuid4().hexשנוצר, פעם אחת לכל crew או flow
אפשרויות
session_id היא האפשרות היחידה שמתאם זה קורא. הנושאות והשלמות תמיד מתועדות, מקוצצות לתקציב ה-payload.
אדם בלולאה
CrewAI יש שני משטחי אדם-בלולאה, ושניהם מתועדים כאותם ארבע אירועים.@human_feedback בשיטת זרימה עובר דרך אפיק האירועים של CrewAI: ה-runtime משדר אירוע לפני שהוא חוסם על אדם ועוד אחד לאחר התשובה.
Task(human_input=True) לא. זה קוראה input() בתוך ספק הקלט של CrewAI עצמו ואינו משדר אירוע מכל סוג, כך המתאם עוטף ישירות את ספק הזה — ללא זה כל ההמתנה האנושית הייתה בלתי נראית וחויבת כזמן סוכן פעיל.
כך או כך אתה מקבל:
agent_pause ל-agent_resume היא הזוג היחיד שמזין זמן מושהה. ללא זה, עשר דקות של המתנה אנושית חויבות כעשר דקות של זמן סוכן פעיל.
CrewAI לא מגדיר מזהה מתאם על שום אירוע משוב אנושי, כך המתאם משדבר אותם בשם הזרימה והשיטה, ונופל בחזרה ללחץ שנפתח לאחרונה. זה סביר כי הנושא של קונסול חוסם. אם אתה בונה ספק משוב במקביל, קבע
request_id בשני האירועים.מכיוון שנתיב
Task(human_input=True) הוא עטיפה סביב ספק הקלט של CrewAI ולא מנוי על אירועים, הוא מוחזר בעת uninstrument() ו-re-raises כל מה ש-input() raises, KeyboardInterrupt כלול, ללא שינוי.בעיות נפוצות
לסנן הסוכן יש אלפי ערכים
לסנן הסוכן יש אלפי ערכים
role מכיל UUID, חותמת זמן או סיומת לכל ריצה. השתמש בתפקיד אנושי יציב והצב את המזהה הספציפי לריצה בתיאור המשימה במקום.בדיקה קוראת אפס אירועים, אך הלוח מציג אותם
בדיקה קוראת אפס אירועים, אך הלוח מציג אותם
אפיק האירועים אסינכרוני, ו-זה תכונה של CrewAI, לא של ה-SDK.
kickoff() חוזר לפני הפעלת המטפלים האחרונים. ניקז אותו קודם:סדר ישיבה מוצג כמתמשך לנצח
סדר ישיבה מוצג כמתמשך לנצח
agent_end כופה-סוגר השהיות פתוחות אך לא כלים או דגמים, כך שריצה המתה בתוך קריאת כלי משאירה את ה-span פתוח. הפירוק הרגיל סוגר כל מה שעדיין פתוח ומסמן אותו לא שלם. רק SIGKILL משאיר אותו תלוי, כי שום דבר לא יכול להריץ.כלום לא מתועד
כלום לא מתועד
בדוק בסדר זה:
instrument() רץ לפני kickoff(); יש with failproofai_sdk.session(): סביבו; crewai הוא 1.13 או חדש יותר; FAILPROOFAI_SDK_STRICT=1 קבוע, כך ווו מופחת מעלה במקום להיספג.הבא
איך זה עובד
זוגות, מזהים, מחזור חיים של סדר ישיבה והעברה.
קרא עקבות
עקוב אחרי סיבתיות דרך הסדר ישיבה שרק תפסת.
מסגרות אחרות
LangGraph, LlamaIndex, Pydantic AI, וסוכנים מותאמים אישית.

