Skip to main content

title: “CrewAI” sidebarTitle: “CrewAI” description: “تجهيز الفرق والتدفقات والوكلاء حسب الدور والأدوات والذاكرة وردود الفعل البشرية.” icon: “/images/frameworks/crewai.svg”

التثبيت

الإصدارات المدعومة: crewai من 1.13 إلى 2.0. الإصدار 1.13 هو الذي أضاف started_event_id وعادّ استخدام الرموز، وكلاهما يعتمد عليه المحول لربط الأحداث والإبلاغ عن الرموز.

التجهيز

يسجل instrument() مستمعًا على ناقل الأحداث على مستوى الوحدة في CrewAI ويشترك في معالج واحد لكل فئة حدث. لا يتغير شيء حول فريقك أو الوكلاء أو المهام أو الأدوات.

ما يتم تسجيله

المهمة لا تصدر شيئًا بقصد. مهمة CrewAI هي مجموعة فرعية من تنفيذ الوكيل الذي يشغلها، لذا فإن إصدار كليهما سيضاعف كل صف ويجعلها تبدو كأخوات. بدلاً من ذلك، يتم نقل معرف المهمة واسمها على أحداث الوكيل نفسه. يتم تسجيل عمليات الذاكرة والمعرفة كأدوات، مسماة للسطح الذي يصيبونه، بحيث تظهر بجانب أدواتك الحقيقية حيث يمكنك مقارنة زمن استجابتها. في الفريق الهرمي، التداخل هو الذي يجعل التتبع قابلاً للقراءة:
يربط CrewAI التنفيذ المفوّض على حدث أداة delegate_work_to_coworker وليس على المدير مباشرة، لذا يتبع المحول هذا الرابط. بدونه، كل وكيل يخرج كأخ لكل وكيل آخر وتضيع هيكل التفويض.

مثال

المرحلة الانتقالية مرئية في التتبع: يغلق امتداد analyst، ويفتح امتداد writer، وكلاهما يقع داخل امتداد crew واحد.

قم بتسمية امتدادات الشبكة الخاصة بك

يأتي agent_id من Agent(role=...)، وهذا هو ما يجعله وجهة نظر لوحة معلومات قابلة للقراءة.
agent_id هي عمود منخفض الأساسية. الدور الذي يحتوي على معرف التشغيل أو الطابع الزمني يقلل منه لكل استعلام يشغله أي شخص. إذا بدا الدور كمعرف، فإن المحول يرفضه ويضع القيمة الحقيقية في حقل الحمولة بدلاً من ذلك.

التحكم في الجلسة

تم حلها بهذا الترتيب، أول تطابق يفوز:
  1. instrument("crewai", session_id=...)
  2. نطاق failproofai_sdk.session() المغلف
  3. معرف uuid4().hex تم إنشاؤه، مرة واحدة لكل فريق أو تدفق
لف البدء للتحكم فيه لكل تشغيل:

الخيارات

session_id هو الخيار الوحيد الذي يقرأه هذا المحول. يتم تسجيل الطلبات والإكمالات دائمًا، مع القطع إلى ميزانية الحمولة.

البشر في الحلقة

يحتوي CrewAI على سطحين من أسطح البشر في الحلقة، وكلاهما يتم تسجيله نفس الأحداث الأربعة. يمر @human_feedback على طريقة التدفق عبر ناقل أحداث CrewAI: يصدر وقت التشغيل حدثًا قبل انسداده على شخص وآخر بعد الإجابة. لا يفعل Task(human_input=True). يستدعي input() داخل مزود الإدخال الخاص بـ CrewAI ولا يصدر أي حدث من أي نوع، لذا يلف المحول مزود الإدخال هذا مباشرة — بدونه كانت انتظار الإنسان بأكمله غير مرئي وتم محاسبته كوقت وكيل نشط. بأي طريقة تحصل على:
agent_pause إلى agent_resume هو الزوج الوحيد الذي يطعم الوقت المتوقف. بدونه، ينتظر الإنسان لمدة عشر دقائق يتم محاسبته كعشر دقائق من وقت الوكيل النشط.
لا يقوم CrewAI بتعيين معرف ارتباط على حدث ردود الفعل البشرية، لذا يقرن المحول بينهما على اسم التدفق والطريقة، مع العودة إلى آخر توقف تم فتحه. هذا صحيح لأن موجه وحدة التحكم ينسد. إذا قمت ببناء مزود ردود فعل متزامن، فقم بتعيين request_id على كلا الحدثين.
نظرًا لأن مسار Task(human_input=True) هو غلاف حول مزود إدخال CrewAI بدلاً من اشتراك في الأحداث، يتم استعادته على uninstrument() وإعادة رفع ما يرفعه input()، بما في ذلك KeyboardInterrupt بدون تغيير.

المشاكل الشائعة

يحتوي role على معرف UUID أو طابع زمني أو لاحقة لكل تشغيل. استخدم دورًا بشريًا مستقرًا وضع معرف التشغيل المحدد في وصف المهمة بدلاً من ذلك.
ناقل الأحداث غير متزامن، و kickoff() يعود قبل تشغيل آخر المعالجات. استنزف أولاً:
هذه خاصية CrewAI وليست خاصية SDK.
يفرض agent_end إغلاق التوقفات المفتوحة ولكن ليس الأدوات أو النماذج، لذا فإن التشغيل الذي يموت داخل استدعاء أداة يترك هذا الامتداد مفتوحًا. يغلق الهدم الطبيعي أي شيء لا يزال مفتوحًا ويضع علامة عليه كناقص. فقط SIGKILL يتركها معلقة، لأنه لا يمكن لأحد أن يركض.
تحقق بهذا الترتيب: instrument() يركض قبل kickoff()؛ هناك with failproofai_sdk.session(): حوله؛ crewai هو 1.13 أو أحدث؛ تم تعيين FAILPROOFAI_SDK_STRICT=1، بحيث يرفع Hook المتدهور بدلاً من الابتلاع.

التالي

كيف يعمل

الأزواج والمعرفات ودورة حياة الجلسة والتسليم.

اقرأ التتبع

اتبع السببية عبر الجلسة التي التقطتها للتو.

أطر عمل أخرى

LangGraph و LlamaIndex و Pydantic AI والوكلاء المخصصين.