الأطقم
نظرة عامة
Section titled “نظرة عامة”يمثل الطاقم في CrewAI مجموعة تعاونية من الوكلاء يعملون معًا لتحقيق مجموعة من المهام. يحدد كل طاقم استراتيجية تنفيذ المهام وتعاون الوكلاء وسير العمل العام.
خصائص الطاقم
Section titled “خصائص الطاقم”| الخاصية | المعامل | الوصف |
|---|---|---|
| المهام | 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. |
إنشاء الأطقم
Section titled “إنشاء الأطقم”هناك طريقتان رئيسيتان لإنشاء الأطقم في CrewAI: باستخدام تهيئة JSONC (الموصى بها للـ crews الجديدة) أو تعريفها مباشرة في الكود للمشاريع الكلاسيكية والحالات المتقدمة.
تهيئة JSONC (موصى بها)
Section titled “تهيئة JSONC (موصى بها)”المشاريع الجديدة التي تُنشأ عبر 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.
تهيئة YAML الكلاسيكية
Section titled “تهيئة YAML الكلاسيكية”المشاريع الكلاسيكية التي تُنشأ عبر 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, Processfrom crewai.project import CrewBase, agent, task, crew, before_kickoff, after_kickofffrom crewai.agents.agent_builder.base_agent import BaseAgentfrom typing import List
@CrewBaseclass 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.
مخرجات الطاقم
Section titled “مخرجات الطاقم”تُغلّف مخرجات الطاقم في فئة CrewOutput. توفر هذه الفئة طريقة منظمة للوصول إلى نتائج تنفيذ الطاقم، بما في ذلك تنسيقات متنوعة مثل السلاسل النصية الخام وJSON ونماذج Pydantic.
خصائص مخرجات الطاقم
Section titled “خصائص مخرجات الطاقم”| الخاصية | المعامل | النوع | الوصف |
|---|---|---|---|
| Raw | raw | str | المخرجات الخام للطاقم. هذا هو التنسيق الافتراضي. |
| Pydantic | pydantic | Optional[BaseModel] | كائن نموذج Pydantic يمثل المخرجات المنظمة. |
| JSON Dict | json_dict | Optional[Dict[str, Any]] | قاموس يمثل مخرجات JSON. |
| Tasks Output | tasks_output | List[TaskOutput] | قائمة كائنات TaskOutput، كل منها يمثل مخرجات مهمة. |
| Token Usage | token_usage | Dict[str, Any] | ملخص استخدام الرموز. |
استخدام الذاكرة
Section titled “استخدام الذاكرة”يمكن للأطقم استخدام الذاكرة (قصيرة المدى، طويلة المدى، وذاكرة الكيانات) لتحسين تنفيذها وتعلمها بمرور الوقت.
استخدام التخزين المؤقت
Section titled “استخدام التخزين المؤقت”يمكن استخدام التخزين المؤقت لتخزين نتائج تنفيذ الأدوات، مما يجعل العملية أكثر كفاءة.
مقاييس استخدام الطاقم
Section titled “مقاييس استخدام الطاقم”بعد تنفيذ الطاقم، يمكنك الوصول إلى خاصية usage_metrics لعرض مقاييس استخدام نموذج اللغة (LLM) لجميع المهام المنفذة.
crew = Crew(agents=[agent1, agent2], tasks=[task1, task2])crew.kickoff()print(crew.usage_metrics)عملية تنفيذ الطاقم
Section titled “عملية تنفيذ الطاقم”- العملية التسلسلية: تُنفذ المهام واحدة تلو الأخرى، مما يسمح بتدفق عمل خطي.
- العملية الهرمية: ينسق وكيل مدير الطاقم، ويفوّض المهام ويتحقق من النتائج.
تشغيل الطاقم
Section titled “تشغيل الطاقم”بمجرد تجميع طاقمك، ابدأ سير العمل بطريقة kickoff().
result = my_crew.kickoff()print(result)طرق مختلفة لتشغيل الطاقم
Section titled “طرق مختلفة لتشغيل الطاقم”الطرق المتزامنة
Section titled “الطرق المتزامنة”kickoff(): يبدأ عملية التنفيذ وفقًا لتدفق العملية المحدد.kickoff_for_each(): ينفذ المهام بالتتابع لكل مدخل.
الطرق غير المتزامنة
Section titled “الطرق غير المتزامنة”| الطريقة | النوع | الوصف |
|---|---|---|
akickoff() | غير متزامن أصلي | async/await أصلي عبر سلسلة التنفيذ بأكملها |
akickoff_for_each() | غير متزامن أصلي | تنفيذ غير متزامن أصلي لكل مدخل في قائمة |
kickoff_async() | مبني على الخيوط | يغلّف التنفيذ المتزامن في asyncio.to_thread |
kickoff_for_each_async() | مبني على الخيوط | غير متزامن مبني على الخيوط لكل مدخل في قائمة |
بث تنفيذ الطاقم
Section titled “بث تنفيذ الطاقم”للرؤية في الوقت الفعلي لتنفيذ الطاقم، يمكنك تفعيل البث:
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الإعادة من مهمة محددة
Section titled “الإعادة من مهمة محددة”يمكنك الآن الإعادة من مهمة محددة باستخدام أمر CLI replay.
crewai log-tasks-outputsثم للإعادة من مهمة محددة:
crewai replay -t <task_id>