الفصل الثالث : من سلسلة ” الذكاء الصناعي التعاوني CrewAI – دليل المطور العربي لبناء وكلاء ذكيين يعملون معًا ” .
اكتشف كيفية تصميم المهام Tasks في CrewAI لتحديد ما يقوم به كل وكيل ذكاء صناعي (Agent) داخل الطاقم، وكيف تربط الأهداف بالسلوك خطوة بخطوة في بايثون.
ما هي الـ Task؟
الـ Task تمثل “مهمة محددة” يجب على الوكيل (Agent) تنفيذها.
فكر فيها كأنك تكتب تذكرة عمل في نظام إدارة المشاريع مثل Jira أو Trello.
كل مهمة تصف ما يجب القيام به، وتُرسل إلى وكيل معين لتنفيذها وفقًا لدوره وهدفه.
💡 ببساطة:
الـ Agent هو من ينفذ،
والـ Task هي ما يُنفذ.
بنية إنشاء مهمة في CrewAI
نستخدم الكائن Task من المكتبة بالشكل التالي:
from crewai import Task
task = Task(
description="وصف المهمة المطلوب تنفيذها",
expected_output="ما يُفترض أن تنتجه المهمة (اختياري)",
agent=agent_instance, # الوكيل المسؤول
async_execution=False, # لتشغيل المهمة بشكل متزامن أو غير متزامن
tools=[...] # أدوات إضافية للمهمة (اختياري)
)
شرح المعاملات الأساسية
| المعامل | الوصف | مثال |
|---|---|---|
description | وصف نصي للمهمة التي يجب تنفيذها | “ابحث عن أحدث تطبيقات CrewAI” |
expected_output | (اختياري) يحدد شكل أو نوع المخرجات المتوقعة | “ملف JSON يحتوي قائمة الأدوات الحديثة” |
agent | يربط المهمة بوكيل محدد سينفذها | researcher_agent |
async_execution | تشغيل المهمة في الخلفية (True) أو بشكل متتابع (False) | False |
tools | أدوات خاصة بالمهمة يمكن استخدامها أثناء التنفيذ | [WebScraperTool] |
مثال عملي بسيط
لننشئ مهمة ينجزها وكيل باحث سبق أن أنشأناه في الفصل السابق:
from crewai import Agent, Task, Crew
from langchain.chat_models import ChatOpenAI
# إنشاء الوكيل
llm = ChatOpenAI(model="gpt-4o-mini")
researcher = Agent(
role="Researcher",
goal="جمع معلومات دقيقة عن أدوات CrewAI الحديثة",
backstory="باحث تقني يتابع تطورات مجال الذكاء الصناعي التعاوني.",
llm=llm
)
# إنشاء المهمة
task = Task(
description="ابحث عن أحدث أدوات ومكتبات الذكاء الصناعي التعاوني في 2025.",
expected_output="ملخص نصي يوضح الأدوات وأفضل استخداماتها.",
agent=researcher
)
# جمعهم في طاقم
crew = Crew(agents=[researcher], tasks=[task])
result = crew.run()
print(result)
النتيجة: سيقرأ الوكيل تفاصيل المهمة، ويفكر باستخدام النموذج اللغوي،
ثم ينتج مخرجات نصية حسب وصف المهمة والهدف الذي حددناه له.
العلاقة بين Agent وTask
يمكن أن يكون لكل وكيل مهمة واحدة أو أكثر،
كما يمكن أن تعمل عدة مهام بالتتابع،
أو أن تتوزع على عدة وكلاء ضمن نفس الطاقم.
مثال على طاقم مكون من باحث وكاتب ومراجع:
# مهام متعددة لوكلاء مختلفين
research_task = Task(description="اجمع معلومات حول CrewAI.", agent=researcher)
writing_task = Task(description="اكتب مقالًا تقنيًا استنادًا إلى نتائج البحث.", agent=writer)
review_task = Task(description="راجع المقال وصحح الأخطاء اللغوية.", agent=editor)
كل مهمة ترتبط بوكيل محدد، والطاقم ينسق تنفيذها واحدة تلو الأخرى.
بهذا الشكل، يتحوّل النظام إلى فريق متكامل من الذكاء الصناعي التعاوني.
تشغيل المهام المتعددة
يمكنك تمرير قائمة من المهام إلى الكائن Crew:
crew = Crew(agents=[researcher, writer, editor], tasks=[research_task, writing_task, review_task])
crew.run()
CrewAI سيتولى تنفيذ المهام بالتسلسل المنطقي المناسب،
بحيث تُغذي مخرجات كل مهمة المهمة التالية.
تخصيص الأدوات لكل مهمة
بدل أن تكون الأدوات عامة للوكيل، يمكنك تخصيصها لمهمة واحدة فقط.
مثلاً، لو أردت أن يستخدم الباحث أداة ويب في مهمة معينة فقط:
from crewai_tools import tool
from langchain.utilities import SerpAPIWrapper
search_tool = SerpAPIWrapper(serpapi_api_key="YOUR_SERPAPI_KEY")
search_task = Task(
description="ابحث في الإنترنت عن مقالات تشرح CrewAI.",
agent=researcher,
tools=[search_tool]
)
في هذه الحالة، الأداة تكون متاحة فقط أثناء تنفيذ تلك المهمة.
المهام المتزامنة وغير المتزامنة
- المهام المتزامنة (sync)
تُنفّذ واحدة تلو الأخرى، بترتيب محدد.
مثالية عند وجود اعتماد منطقي (Task 2 تعتمد على Task 1). - المهام غير المتزامنة (async)
تُنفّذ بالتوازي لتوفير الوقت، مثلاً مهام بحث متعددة في آنٍ واحد.
task = Task(description="حلل البيانات في الخلفية", async_execution=True)
نصائح تصميم مهام فعالة
- اكتب وصف المهمة بدقة:
“حلل الاتجاهات التقنية في مجال الذكاء الصناعي” أفضل من “ابحث عن الذكاء الصناعي”. - حدّد نتيجة متوقعة (expected_output) لتوجيه النموذج نحو نوع النتيجة المطلوبة.
- اربط كل مهمة بوكيل مناسب حسب تخصصه ودوره داخل الطاقم.
- قسّم المشاريع الكبيرة إلى مهام صغيرة يمكن للوكلاء التعاون فيها.
- استفد من الذاكرة السياقية (Memory) لاحقًا لتخزين نتائج كل مهمة — سنتناولها في الفصول القادمة.
مثال تطبيقي شامل
لنصمم نظامًا بسيطًا يتعاون فيه وكيلان لإنشاء ملخص تقني حول CrewAI:
from crewai import Agent, Task, Crew
from langchain.chat_models import ChatOpenAI
llm = ChatOpenAI(model="gpt-4o-mini")
# تعريف الوكلاء
researcher = Agent(
role="AI Researcher",
goal="جمع المعلومات بدقة",
backstory="باحث متخصص في تحليل تقنيات الذكاء الصناعي الحديثة.",
llm=llm
)
writer = Agent(
role="Tech Writer",
goal="صياغة النتائج بشكل واضح ومنسق.",
backstory="كاتب تقني يتقن تحويل البيانات إلى محتوى جذاب.",
llm=llm
)
# إنشاء المهام
task1 = Task(description="ابحث عن مكتبة CrewAI وأبرز استخداماتها.", agent=researcher)
task2 = Task(description="اكتب ملخصًا مبسطًا لما جمعه الباحث.", agent=writer)
# جمعهم في طاقم واحد
crew = Crew(agents=[researcher, writer], tasks=[task1, task2])
# تشغيل الطاقم
result = crew.run()
print(result)
النتيجة:
سيعمل الباحث أولًا، ثم يُرسل ناتجه إلى الكاتب،
الذي يقوم بإنتاج ملخص نهائي — تمامًا كما يعمل فريق حقيقي.
الخلاصة
المهام (Tasks) هي العمود الفقري لعملية التعاون في CrewAI.
فهي تحدد ما يجب أن يحدث، بينما يتولى الوكلاء تنفيذها وفقًا لأدوارهم وسلوكهم.
من خلال تنظيم المهام بذكاء، يمكنك بناء أنظمة كاملة تحاكي إدارة المشاريع الواقعية،
لكن بذكاء صناعي متكامل وذاتي التشغيل.
في الفصل الرابع سنتناول:
إدارة الطواقم (Crews) — كيف تجمع الوكلاء والمهام في نظام واحد،
وتتحكم في طريقة التعاون بينهم لتحقيق الهدف النهائي.

