تخطَّ إلى المحتوى

الأطقم

يمثل الطاقم في CrewAI مجموعة تعاونية من الوكلاء يعملون معًا لتحقيق مجموعة من المهام. يحدد كل طاقم استراتيجية تنفيذ المهام وتعاون الوكلاء وسير العمل العام.

الخاصيةالمعاملالوصف
المهامtasksقائمة المهام المعيّنة للطاقم.
الوكلاءagentsقائمة الوكلاء الذين يشكلون جزءًا من الطاقم.
العملية (اختياري)processتدفق العملية (مثل تسلسلي، هرمي) الذي يتبعه الطاقم. الافتراضي sequential.
الوضع المفصل (اختياري)verboseمستوى التفصيل في التسجيل أثناء التنفيذ. الافتراضي False.
LLM المدير (اختياري)manager_llmنموذج اللغة المستخدم بواسطة وكيل المدير في العملية الهرمية. مطلوب عند استخدام العملية الهرمية.
LLM استدعاء الدوال (اختياري)function_calling_llmإذا مُرر، سيستخدم الطاقم هذا LLM لاستدعاء دوال الأدوات لجميع الوكلاء. يمكن لكل وكيل أن يكون له LLM خاص يتجاوز LLM الطاقم.
التهيئة (اختياري)configإعدادات تهيئة اختيارية للطاقم، بتنسيق Json أو Dict[str, Any].
الحد الأقصى لـ RPM (اختياري)max_rpmالحد الأقصى للطلبات في الدقيقة. الافتراضي None.
الذاكرة (اختياري)memoryتُستخدم لتخزين ذاكرات التنفيذ (قصيرة المدى، طويلة المدى، ذاكرة الكيانات).
التخزين المؤقت (اختياري)cacheيحدد ما إذا كان يُستخدم تخزين مؤقت لنتائج تنفيذ الأدوات. الافتراضي True.
المُضمّن (اختياري)embedderتهيئة المُضمّن المستخدم من قبل الطاقم. الافتراضي {"provider": "openai"}.
دالة الخطوة (اختياري)step_callbackدالة تُستدعى بعد كل خطوة لكل وكيل.
دالة المهمة (اختياري)task_callbackدالة تُستدعى بعد اكتمال كل مهمة.
مشاركة الطاقم (اختياري)share_crewما إذا كنت تريد مشاركة معلومات الطاقم الكاملة وتنفيذه مع فريق CrewAI.
ملف سجل المخرجات (اختياري)output_log_fileعيّن True لحفظ السجلات كـ logs.txt أو وفّر مسار ملف. الافتراضي None.
وكيل المدير (اختياري)manager_agentيعيّن وكيلًا مخصصًا سيُستخدم كمدير.
التخطيط (اختياري)planningيضيف قدرة التخطيط للطاقم.
LLM التخطيط (اختياري)planning_llmنموذج اللغة المستخدم بواسطة AgentPlanner في عملية التخطيط.
مصادر المعرفة (اختياري)knowledge_sourcesمصادر المعرفة المتاحة على مستوى الطاقم، يمكن لجميع الوكلاء الوصول إليها.
البث (اختياري)streamتفعيل مخرجات البث لتلقي تحديثات في الوقت الفعلي. الافتراضي False.

هناك طريقتان رئيسيتان لإنشاء الأطقم في CrewAI: باستخدام تهيئة JSONC (الموصى بها للـ crews الجديدة) أو تعريفها مباشرة في الكود للمشاريع الكلاسيكية والحالات المتقدمة.

المشاريع الجديدة التي تُنشأ عبر crewai create crew <name> تستخدم crew.jsonc لإعدادات الـ crew والمهام، وملفًا منفصلًا لكل Agent داخل agents/. يكتشف crewai run ملف crew.jsonc أو crew.json، ويحمّل الـ Agents المشار إليها، ويطلب قيم placeholders الناقصة، ثم يبدأ الـ crew.

{
"name": "Market Research Crew",
"agents": ["researcher", "analyst"],
"tasks": [
{
"name": "research",
"description": "Research {topic} and collect the most relevant facts.",
"expected_output": "Structured research notes about {topic}.",
"agent": "researcher"
},
{
"name": "analysis",
"description": "Analyze the research and write a concise report.",
"expected_output": "A markdown report with findings and recommendations.",
"agent": "analyst",
"context": ["research"],
"output_file": "output/report.md"
}
],
"process": "sequential",
"verbose": true,
"memory": true,
"inputs": {
"topic": "AI Agents"
}
}

كل عنصر في agents يُحل أولًا إلى agents/<name>.jsonc ثم إلى agents/<name>.json. للـ crews الهرمية، استخدم "process": "hierarchical" مع manager_llm أو manager_agent.

المشاريع الكلاسيكية التي تُنشأ عبر crewai create crew <name> --classic تستخدم crew.py و config/agents.yaml و config/tasks.yaml والمزيّنات @CrewBase و @agent و @task و @crew.

تظل هذه الطريقة مدعومة للمشاريع الحالية المبنية بـ Python/YAML وللفِرق التي تحتاج تحكمًا صريحًا عبر decorators.

from crewai import Agent, Crew, Task, Process
from crewai.project import CrewBase, agent, task, crew, before_kickoff, after_kickoff
from crewai.agents.agent_builder.base_agent import BaseAgent
from typing import List
@CrewBase
class YourCrewName:
"""Description of your crew"""
agents: List[BaseAgent]
tasks: List[Task]
agents_config = 'config/agents.yaml'
tasks_config = 'config/tasks.yaml'
@before_kickoff
def prepare_inputs(self, inputs):
inputs['additional_data'] = "Some extra information"
return inputs
@after_kickoff
def process_output(self, output):
output.raw += "\nProcessed after kickoff."
return output
@agent
def agent_one(self) -> Agent:
return Agent(
config=self.agents_config['agent_one'], # type: ignore[index]
verbose=True
)
@task
def task_one(self) -> Task:
return Task(
config=self.tasks_config['task_one'] # type: ignore[index]
)
@crew
def crew(self) -> Crew:
return Crew(
agents=self.agents,
tasks=self.tasks,
process=Process.sequential,
verbose=True,
)

فئة CrewBase، مع هذه المزيّنات، تؤتمت جمع الوكلاء والمهام، مما يقلل الحاجة للإدارة اليدوية.

تعريف مباشر في الكود (بديل)

Section titled “تعريف مباشر في الكود (بديل)”

بدلاً من ذلك، يمكنك تعريف الطاقم مباشرة في الكود بدون ملفات تهيئة YAML.

تُغلّف مخرجات الطاقم في فئة CrewOutput. توفر هذه الفئة طريقة منظمة للوصول إلى نتائج تنفيذ الطاقم، بما في ذلك تنسيقات متنوعة مثل السلاسل النصية الخام وJSON ونماذج Pydantic.

الخاصيةالمعاملالنوعالوصف
Rawrawstrالمخرجات الخام للطاقم. هذا هو التنسيق الافتراضي.
PydanticpydanticOptional[BaseModel]كائن نموذج Pydantic يمثل المخرجات المنظمة.
JSON Dictjson_dictOptional[Dict[str, Any]]قاموس يمثل مخرجات JSON.
Tasks Outputtasks_outputList[TaskOutput]قائمة كائنات TaskOutput، كل منها يمثل مخرجات مهمة.
Token Usagetoken_usageDict[str, Any]ملخص استخدام الرموز.

يمكن للأطقم استخدام الذاكرة (قصيرة المدى، طويلة المدى، وذاكرة الكيانات) لتحسين تنفيذها وتعلمها بمرور الوقت.

استخدام التخزين المؤقت

Section titled “استخدام التخزين المؤقت”

يمكن استخدام التخزين المؤقت لتخزين نتائج تنفيذ الأدوات، مما يجعل العملية أكثر كفاءة.

بعد تنفيذ الطاقم، يمكنك الوصول إلى خاصية usage_metrics لعرض مقاييس استخدام نموذج اللغة (LLM) لجميع المهام المنفذة.

crew = Crew(agents=[agent1, agent2], tasks=[task1, task2])
crew.kickoff()
print(crew.usage_metrics)
  • العملية التسلسلية: تُنفذ المهام واحدة تلو الأخرى، مما يسمح بتدفق عمل خطي.
  • العملية الهرمية: ينسق وكيل مدير الطاقم، ويفوّض المهام ويتحقق من النتائج.

بمجرد تجميع طاقمك، ابدأ سير العمل بطريقة kickoff().

result = my_crew.kickoff()
print(result)

طرق مختلفة لتشغيل الطاقم

Section titled “طرق مختلفة لتشغيل الطاقم”
  • kickoff(): يبدأ عملية التنفيذ وفقًا لتدفق العملية المحدد.
  • kickoff_for_each(): ينفذ المهام بالتتابع لكل مدخل.
الطريقةالنوعالوصف
akickoff()غير متزامن أصليasync/await أصلي عبر سلسلة التنفيذ بأكملها
akickoff_for_each()غير متزامن أصليتنفيذ غير متزامن أصلي لكل مدخل في قائمة
kickoff_async()مبني على الخيوطيغلّف التنفيذ المتزامن في asyncio.to_thread
kickoff_for_each_async()مبني على الخيوطغير متزامن مبني على الخيوط لكل مدخل في قائمة

للرؤية في الوقت الفعلي لتنفيذ الطاقم، يمكنك تفعيل البث:

crew = Crew(
agents=[researcher],
tasks=[task],
stream=True
)
streaming = crew.kickoff(inputs={"topic": "AI"})
for chunk in streaming:
print(chunk.content, end="", flush=True)
result = streaming.result

يمكنك الآن الإعادة من مهمة محددة باستخدام أمر CLI replay.

Terminal window
crewai log-tasks-outputs

ثم للإعادة من مهمة محددة:

Terminal window
crewai replay -t <task_id>