إنشاء Agent متعدد (Multi-Agent Systems) يتعاونون لحل مشكلة باستخدام CrewAI
إنشاء Multi-Agent Systems يتعاونون لحل مشكلة باستخدام CrewAI
بعد فهم أساسيات العملاء الأذكياء (AI Agents) وكيفية تزويدهم بالأدوات، تظهر مشكلة هندسية مهمة: الوكيل الواحد غالباً يصبح مثقلاً جداً إذا طلبنا منه التحليل، والبحث، والتحقق، ثم الصياغة النهائية في جلسة واحدة. هنا تظهر قوة Multi-Agent Systems، حيث نقسم العمل إلى عدة وكلاء متخصصين، لكل واحد دور واضح، وذاكرة مهمة، وتعليمات تشغيل دقيقة. إطار CrewAI يقدّم طريقة عملية لبناء هذا النوع من الأنظمة عبر تنظيم الوكلاء والمهام والتسلسل التنفيذي بشكل قريب من فرق العمل البشرية.
الفكرة ليست مجرد “تشغيل عدة نماذج” معاً، بل تصميم بنية تنسيقية تجعل كل وكيل ينتج مخرجات وسيطة قابلة للاستهلاك من وكيل آخر. هذا يرفع الدقة، ويقلل الهلوسة، ويحسن إمكانية الاختبار والمراقبة. كما أنه ينسجم طبيعياً مع مفاهيم هندسة الأوامر (Prompt Engineering) وبناء الأدوات المخصصة، ويمكن دمجه لاحقاً مع نظام RAG أو حتى مع واجهات FastAPI.
متى نحتاج إلى بنية متعددة الوكلاء بدلاً من Single Agent؟
استخدم بنية متعددة الوكلاء عندما تكون المشكلة تحتوي على مراحل معرفية مختلفة لا يُفضّل خلطها داخل سياق واحد. أمثلة ذلك:
- وكيل بحث يجمع البيانات من الويب أو من قاعدة معرفة.
- وكيل محلل يراجع النتائج ويستخرج الحقائق المهمة.
- وكيل مدقق يتحقق من التناقضات أو الثغرات المنطقية.
- وكيل كاتب يحوّل المادة الخام إلى تقرير نهائي منسق.
هذا الأسلوب يشبه تطبيق مبدأ Separation of Concerns في هندسة البرمجيات. بدلاً من تكديس كل المسؤوليات في وكيل واحد، نقسمها إلى وحدات مستقلة، ما يجعل النظام أسهل في الصيانة والتجربة والتحسين.
الهيكلية المعمارية داخل CrewAI
يبني CrewAI النظام حول ثلاثة مكونات أساسية:
Agent: الوكيل الذي يمتلك دوراً وخلفية وأهدافاً وأدوات.Task: المهمة المطلوب تنفيذها مع وصف واضح ومخرجات متوقعة.Crew: طبقة التنسيق التي تجمع الوكلاء والمهام وتحدد ترتيب التنفيذ.
تدفق البيانات عادة يكون كالتالي: يدخل طلب المستخدم إلى النظام، فتقوم طبقة التنسيق بتمريره إلى مهمة أولى ينفذها وكيل متخصص. الناتج من هذه المهمة يصبح سياقاً منظماً للمهمة التالية، وهكذا حتى الوصول إلى الناتج النهائي. إذا أضفت أدوات مثل محرك بحث أو منفذ Python أو مسترجع وثائق، فإن كل وكيل يمكنه استدعاء الأدوات المناسبة فقط، بدلاً من إعطاء كل الصلاحيات للجميع.
تصميم الأدوار بوضوح
نجاح النظام يعتمد على تعريف الأدوار بدقة. لا تكتب وصفاً عاماً مثل “وكيل ذكي يساعد في كل شيء”، بل حدّد:
- ما هي مسؤولية الوكيل؟
- ما الأدوات المسموح له باستخدامها؟
- ما شكل المخرجات الذي يجب أن ينتجه؟
- ما القيود؟ مثل عدم التخمين أو وجوب ذكر عدم كفاية المعلومات.
أنت وكيل بحث تقني. مهمتك جمع معلومات دقيقة فقط من المصادر المتاحة لك، ثم تلخيصها في نقاط قصيرة قابلة للتسليم إلى وكيل التحليل. لا تستنتج حقائق غير موجودة، وإذا كانت المعلومة غير مؤكدة فاذكر ذلك صراحة.
إعداد البيئة وبناء المثال العملي
قبل البدء تأكد من أنك أنهيت إعداد بيئة العمل الذكية والاتصال الأول مع مفاتيح API. المثال التالي يبني طاقماً بسيطاً من ثلاثة وكلاء: باحث، محلل، وكاتب. الهدف هو إعداد تقرير مختصر عن تقنية معينة بناءً على موضوع يدخله المستخدم.
import os
from crewai import Agent, Task, Crew, Process
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model="gpt-4o-mini",
temperature=0.2,
api_key=os.getenv("OPENAI_API_KEY")
)
researcher = Agent(
role="Senior AI Researcher",
goal="Collect accurate technical facts about the requested topic",
backstory="Specialized in gathering reliable engineering insights for downstream analysis",
llm=llm,
verbose=True
)
analyst = Agent(
role="Technical Analyst",
goal="Transform raw findings into structured technical insights",
backstory="Experienced in validating, organizing, and comparing technical information",
llm=llm,
verbose=True
)
writer = Agent(
role="Engineering Report Writer",
goal="Produce a clear final report in Arabic with concise technical depth",
backstory="Expert in converting analytical outputs into readable and accurate documentation",
llm=llm,
verbose=True
)
research_task = Task(
description="Research the topic: Multi-agent systems using CrewAI. Gather architecture, benefits, risks, and practical use cases.",
expected_output="Bullet points with validated technical findings",
agent=researcher
)
analysis_task = Task(
description="Analyze the research findings and organize them into architecture, workflow, limitations, and deployment considerations.",
expected_output="A structured technical analysis with clear sections",
agent=analyst
)
writing_task = Task(
description="Write a final Arabic report based on the analysis with implementation-oriented explanation.",
expected_output="Final polished report in Arabic",
agent=writer
)
crew = Crew(
agents=[researcher, analyst, writer],
tasks=[research_task, analysis_task, writing_task],
process=Process.sequential,
verbose=True
)
result = crew.kickoff()
print(result)
ماذا يحدث هنا برمجياً؟
- أنشأنا كائناً من
ChatOpenAIليكون النموذج الأساسي. - عرّفنا ثلاثة وكلاء لكل منهم شخصية تشغيلية مستقلة.
- أنشأنا ثلاث مهام متتابعة بحيث يصبح خرج كل مرحلة أساساً للمرحلة التالية.
- استخدمنا
Process.sequentialلأننا نريد ترتيباً خطياً واضحاً.
هذه البنية ممتازة للمشكلات التي تحتاج تحويل البيانات من شكل إلى آخر: جمع ← تحليل ← كتابة. أما إذا كانت لديك مهام مستقلة جزئياً، فيمكن التفكير لاحقاً في عمليات أكثر تعقيداً أو تفريعاً.
دمج الأدوات مع الوكلاء
القوة الحقيقية تظهر عندما نربط الوكلاء بأدوات. مثلاً، وكيل البحث قد يستخدم أداة ويب، ووكيل التحليل قد يستخدم آلة حاسبة أو منفذ Python، ووكيل الكتابة قد يكتفي بالمخرجات النصية. هذا قريب من نمط ReAct حيث يفكر الوكيل ثم يتصرف باستخدام أدوات.
كما يمكن ربط وكيل الاسترجاع مع LangChain أو مع قواعد البيانات المتجهة (Vector Databases) من أجل جلب المعرفة الداخلية. وعندها يصبح النظام أقرب إلى فريق مؤسسي: وكيل يسترجع بالسياق عبر Retriever، وآخر يلخص، وثالث يصوغ القرار النهائي. هذه من أفضل الطرق لتقليل الهلوسة وتحسين موثوقية النتائج.
أفضل الممارسات الهندسية عند بناء Crew
- اجعل كل وكيل محدود الدور، ولا تمنحه مسؤوليات متناقضة.
- اكتب
expected_outputبدقة حتى تعرف ما الذي يجب اختباره. - اخفض قيمة
temperatureفي المهام التحليلية، ويمكنك فهم ذلك أكثر من مقال التحكم في الإبداع برمجياً. - استخدم مخرجات مهيكلة إن أمكن، بالاستفادة من مفهوم JSON Output Parsers.
- راقب التكلفة وعدد Tokens لأن تعدد الوكلاء يعني تعدد الاستدعاءات.
- اختبر كل وكيل منفرداً قبل اختباره داخل الفريق الكامل.
المخاطر والتحديات العملية
رغم قوة هذا النمط، إلا أنه ليس سحرياً. أول تحدٍ هو تضخم التكلفة والزمن، لأن كل خطوة هي استدعاء جديد للنموذج. ثاني تحدٍ هو انتقال الأخطاء: إذا قدّم وكيل البحث معلومات رديئة، فإن بقية الوكلاء قد يبنون فوقها. ثالث تحدٍ هو تعقيد التتبع، لذلك من المفيد الاعتماد على أدوات ملاحظة مثل LangSmith أو كتابة سجلات تفصيلية لكل مرحلة.
كذلك يجب الانتباه إلى الأمان. إذا كنت تمرر مدخلات مستخدم إلى عدة وكلاء، فأنت توسع سطح الهجوم الخاص بـ Prompt Injection. لذلك من الأفضل تنظيف المدخلات، وتقييد الأدوات، وعزل الصلاحيات حسب الوكيل.
سيناريوهات استخدام قوية لـ CrewAI
- أنظمة بحث وتحليل منافسين ثم إنتاج تقارير تنفيذية.
- خطوط عمل محتوى حيث يجمع وكيل المصادر، ويحلل آخر نية البحث، ثم يكتب ثالث المسودة.
- مساعدات داخلية للشركات تجمع من
RAGثم تمر عبر طبقة تحقق ثم طبقة عرض. - تحليل بيانات تشغيلية وربطها بأدوات مثل ملفات Excel/CSV أو Text-to-SQL.
الخلاصة
بناء نظام Multi-Agent باستخدام CrewAI ليس مجرد تجربة عصرية، بل أسلوب هندسي فعّال لتوزيع التفكير والمهام داخل تطبيقات الذكاء الاصطناعي التوليدي. عندما تصمم الأدوار جيداً، وتحدد تدفق البيانات بوضوح، وتربط الوكلاء بالأدوات المناسبة، ستحصل على نظام أكثر دقة وقابلية للتوسع من الوكيل الواحد. ابدأ بطاقم صغير من باحث ومحلل وكاتب، ثم أضف الاسترجاع، والذاكرة، والتقييم الآلي تدريجياً حتى تصل إلى بنية إنتاجية حقيقية.