الوكلاء
نظرة عامة على الوكيل
Section titled “نظرة عامة على الوكيل”في إطار عمل CrewAI، الـ Agent هو وحدة مستقلة يمكنها:
- أداء مهام محددة
- اتخاذ قرارات بناءً على دوره وهدفه
- استخدام الأدوات لتحقيق الأهداف
- التواصل والتعاون مع وكلاء آخرين
- الاحتفاظ بذاكرة التفاعلات
- تفويض المهام عند السماح بذلك
خصائص الوكيل
Section titled “خصائص الوكيل”| الخاصية | المعامل | النوع | الوصف |
|---|---|---|---|
| الدور | role | str | يحدد وظيفة الوكيل وخبرته ضمن الطاقم. |
| الهدف | goal | str | الهدف الفردي الذي يوجه عملية اتخاذ القرار لدى الوكيل. |
| الخلفية | backstory | str | يوفر سياقًا وشخصية للوكيل، مما يثري التفاعلات. |
| LLM (اختياري) | llm | Union[str, LLM, Any] | نموذج اللغة الذي يشغّل الوكيل. افتراضيًا النموذج المحدد في OPENAI_MODEL_NAME أو “gpt-4”. |
| الأدوات (اختياري) | tools | List[BaseTool] | القدرات أو الوظائف المتاحة للوكيل. افتراضيًا قائمة فارغة. |
| LLM استدعاء الدوال (اختياري) | function_calling_llm | Optional[Any] | نموذج لغة لاستدعاء الأدوات، يتجاوز LLM الطاقم إذا حُدد. |
| الحد الأقصى للتكرارات (اختياري) | max_iter | int | الحد الأقصى للتكرارات قبل أن يقدم الوكيل أفضل إجابته. الافتراضي 20. |
| الحد الأقصى لـ RPM (اختياري) | max_rpm | Optional[int] | الحد الأقصى للطلبات في الدقيقة لتجنب حدود المعدل. |
| الحد الأقصى لوقت التنفيذ (اختياري) | max_execution_time | Optional[int] | الحد الأقصى للوقت (بالثواني) لتنفيذ المهمة. |
| الوضع المفصل (اختياري) | verbose | bool | تفعيل سجلات التنفيذ المفصلة للتصحيح. الافتراضي False. |
| السماح بالتفويض (اختياري) | allow_delegation | bool | السماح للوكيل بتفويض المهام لوكلاء آخرين. الافتراضي False. |
| دالة الخطوة (اختياري) | step_callback | Optional[Any] | دالة تُستدعى بعد كل خطوة للوكيل، تتجاوز دالة الطاقم. |
| التخزين المؤقت (اختياري) | cache | bool | تفعيل التخزين المؤقت لاستخدام الأدوات. الافتراضي True. |
| قالب النظام (اختياري) | system_template | Optional[str] | قالب أمر نظام مخصص للوكيل. |
| قالب الأمر (اختياري) | prompt_template | Optional[str] | قالب أمر مخصص للوكيل. |
| قالب الاستجابة (اختياري) | response_template | Optional[str] | قالب استجابة مخصص للوكيل. |
| السماح بتنفيذ الكود (اختياري) | allow_code_execution | Optional[bool] | تفعيل تنفيذ الكود للوكيل. الافتراضي False. |
| الحد الأقصى لإعادة المحاولة (اختياري) | max_retry_limit | int | الحد الأقصى لإعادات المحاولة عند حدوث خطأ. الافتراضي 2. |
| احترام نافذة السياق (اختياري) | respect_context_window | bool | إبقاء الرسائل تحت حجم نافذة السياق عبر التلخيص. الافتراضي True. |
| وضع تنفيذ الكود (اختياري) | code_execution_mode | Literal["safe", "unsafe"] | وضع تنفيذ الكود: ‘safe’ (باستخدام Docker) أو ‘unsafe’ (مباشر). الافتراضي ‘safe’. |
| متعدد الوسائط (اختياري) | multimodal | bool | ما إذا كان الوكيل يدعم القدرات متعددة الوسائط. الافتراضي False. |
| حقن التاريخ (اختياري) | inject_date | bool | ما إذا كان يتم حقن التاريخ الحالي تلقائيًا في المهام. الافتراضي False. |
| تنسيق التاريخ (اختياري) | date_format | str | سلسلة تنسيق التاريخ عند تفعيل inject_date. الافتراضي “%Y-%m-%d” (تنسيق ISO). |
| الاستدلال (اختياري) | reasoning | bool | ما إذا كان يجب على الوكيل التأمل وإنشاء خطة قبل تنفيذ المهمة. الافتراضي False. |
| الحد الأقصى لمحاولات الاستدلال (اختياري) | max_reasoning_attempts | Optional[int] | الحد الأقصى لمحاولات الاستدلال قبل تنفيذ المهمة. إذا None، سيحاول حتى الاستعداد. |
| المُضمّن (اختياري) | embedder | Optional[Dict[str, Any]] | تهيئة المُضمّن المستخدم من قبل الوكيل. |
| مصادر المعرفة (اختياري) | knowledge_sources | Optional[List[BaseKnowledgeSource]] | مصادر المعرفة المتاحة للوكيل. |
| استخدام أمر النظام (اختياري) | use_system_prompt | Optional[bool] | ما إذا كان يُستخدم أمر النظام (لدعم نموذج o1). الافتراضي True. |
إنشاء الوكلاء
Section titled “إنشاء الوكلاء”هناك طريقتان شائعتان لإنشاء الوكلاء في CrewAI: باستخدام تهيئة JSONC (الموصى بها للـ crews الجديدة) أو تعريفهم مباشرة في الكود.
تهيئة JSONC (موصى بها)
Section titled “تهيئة JSONC (موصى بها)”المشاريع الجديدة التي تُنشأ عبر crewai create crew <name> تستخدم تهيئة JSON-first. يُعرّف كل Agent في agents/<agent_name>.jsonc، ويحدد crew.jsonc أي Agents تدخل في الـ crew.
{ "role": "{topic} Senior Data Researcher", "goal": "Uncover cutting-edge developments in {topic}", "backstory": "You find the most relevant information and present it clearly.", "llm": "openai/gpt-4o", "tools": ["SerperDevTool"], "settings": { "verbose": true, "allow_delegation": false }}استخدم {placeholder} داخل role أو goal أو backstory. ضع القيم الافتراضية في inputs داخل crew.jsonc؛ وسيطلب crewai run أي قيم ناقصة. يمكن وضع حقول السلوك مثل verbose و allow_delegation و max_iter و memory و cache و planning_config في المستوى الأعلى أو داخل settings.
تهيئة YAML الكلاسيكية
Section titled “تهيئة YAML الكلاسيكية”المشاريع الكلاسيكية التي تُنشأ عبر crewai create crew <name> --classic تستخدم config/agents.yaml وفئة @CrewBase في crew.py.
تظل تهيئة YAML مدعومة للمشاريع الحالية المبنية بـ Python/YAML وللفِرق التي تفضل تعريف الوكلاء من خلال فئة @CrewBase.
بعد إنشاء مشروع كلاسيكي، انتقل إلى ملف src/<project_name>/config/agents.yaml وعدّل القالب ليتوافق مع متطلباتك.
إليك مثالًا على كيفية تهيئة الوكلاء باستخدام YAML:
# src/<project_name>/config/agents.yamlresearcher: role: > {topic} Senior Data Researcher goal: > Uncover cutting-edge developments in {topic} backstory: > You're a seasoned researcher with a knack for uncovering the latest developments in {topic}. Known for your ability to find the most relevant information and present it in a clear and concise manner.
reporting_analyst: role: > {topic} Reporting Analyst goal: > Create detailed reports based on {topic} data analysis and research findings backstory: > You're a meticulous analyst with a keen eye for detail. You're known for your ability to turn complex data into clear and concise reports, making it easy for others to understand and act on the information you provide.لاستخدام تهيئة YAML في الكود، أنشئ فئة طاقم ترث من CrewBase:
# src/<project_name>/crew.pyfrom crewai import Agent, Crew, Processfrom crewai.project import CrewBase, agent, crewfrom crewai_tools import SerperDevTool
@CrewBaseclass LatestAiDevelopmentCrew(): """LatestAiDevelopment crew"""
agents_config = "config/agents.yaml"
@agent def researcher(self) -> Agent: return Agent( config=self.agents_config['researcher'], # type: ignore[index] verbose=True, tools=[SerperDevTool()] )
@agent def reporting_analyst(self) -> Agent: return Agent( config=self.agents_config['reporting_analyst'], # type: ignore[index] verbose=True )تعريف مباشر في الكود
Section titled “تعريف مباشر في الكود”يمكنك إنشاء الوكلاء مباشرة في الكود بإنشاء فئة Agent. إليك مثالًا شاملًا يوضح جميع المعاملات المتاحة:
from crewai import Agentfrom crewai_tools import SerperDevTool
# إنشاء وكيل بجميع المعاملات المتاحةagent = Agent( role="Senior Data Scientist", goal="Analyze and interpret complex datasets to provide actionable insights", backstory="With over 10 years of experience in data science and machine learning, " "you excel at finding patterns in complex datasets.", llm="gpt-4", function_calling_llm=None, verbose=False, allow_delegation=False, max_iter=20, max_rpm=None, max_execution_time=None, max_retry_limit=2, allow_code_execution=False, code_execution_mode="safe", respect_context_window=True, use_system_prompt=True, multimodal=False, inject_date=False, date_format="%Y-%m-%d", reasoning=False, max_reasoning_attempts=None, tools=[SerperDevTool()], knowledge_sources=None, embedder=None, system_template=None, prompt_template=None, response_template=None, step_callback=None,)دعنا نستعرض بعض تركيبات المعاملات الرئيسية لحالات الاستخدام الشائعة:
وكيل بحث أساسي
Section titled “وكيل بحث أساسي”research_agent = Agent( role="Research Analyst", goal="Find and summarize information about specific topics", backstory="You are an experienced researcher with attention to detail", tools=[SerperDevTool()], verbose=True)وكيل تطوير الكود
Section titled “وكيل تطوير الكود”dev_agent = Agent( role="Senior Python Developer", goal="Write and debug Python code", backstory="Expert Python developer with 10 years of experience", allow_code_execution=True, code_execution_mode="safe", max_execution_time=300, max_retry_limit=3)وكيل تحليل طويل المدى
Section titled “وكيل تحليل طويل المدى”analysis_agent = Agent( role="Data Analyst", goal="Perform deep analysis of large datasets", backstory="Specialized in big data analysis and pattern recognition", memory=True, respect_context_window=True, max_rpm=10, function_calling_llm="gpt-4o-mini")تفاصيل المعاملات
Section titled “تفاصيل المعاملات”المعاملات الحرجة
Section titled “المعاملات الحرجة”roleوgoalوbackstoryمطلوبة وتشكّل سلوك الوكيلllmيحدد نموذج اللغة المستخدم (افتراضي: GPT-4 من OpenAI)
الذاكرة والسياق
Section titled “الذاكرة والسياق”memory: تفعيل للحفاظ على سجل المحادثةrespect_context_window: يمنع مشاكل حد الرموزknowledge_sources: إضافة قواعد معرفة خاصة بالمجال
التحكم في التنفيذ
Section titled “التحكم في التنفيذ”max_iter: الحد الأقصى للمحاولات قبل تقديم أفضل إجابةmax_execution_time: المهلة بالثوانيmax_rpm: تحديد معدل استدعاءات APImax_retry_limit: إعادات المحاولة عند الخطأ
تنفيذ الكود
Section titled “تنفيذ الكود”allow_code_execution(مهجور): كان يُمكّن تنفيذ الكود المدمج عبرCodeInterpreterTool.code_execution_mode(مهجور): كان يتحكم في وضع التنفيذ ("safe"لـ Docker،"unsafe"للتنفيذ المباشر).
الميزات المتقدمة
Section titled “الميزات المتقدمة”multimodal: تفعيل القدرات متعددة الوسائط لمعالجة النص والمحتوى المرئيreasoning: تمكين الوكيل من التأمل وإنشاء خطط قبل تنفيذ المهامinject_date: حقن التاريخ الحالي تلقائيًا في أوصاف المهام
القوالب
Section titled “القوالب”system_template: يحدد السلوك الأساسي للوكيلprompt_template: ينظم تنسيق الإدخالresponse_template: ينسّق استجابات الوكيل
أدوات الوكيل
Section titled “أدوات الوكيل”يمكن تجهيز الوكلاء بأدوات متنوعة لتعزيز قدراتهم. يدعم CrewAI أدوات من:
إليك كيفية إضافة أدوات لوكيل:
from crewai import Agentfrom crewai_tools import SerperDevTool, WikipediaTools
# إنشاء الأدواتsearch_tool = SerperDevTool()wiki_tool = WikipediaTools()
# إضافة أدوات للوكيلresearcher = Agent( role="AI Technology Researcher", goal="Research the latest AI developments", tools=[search_tool, wiki_tool], verbose=True)التفاعل المباشر مع الوكيل عبر kickoff()
Section titled “التفاعل المباشر مع الوكيل عبر kickoff()”يمكن استخدام الوكلاء مباشرة بدون المرور بمهمة أو سير عمل طاقم باستخدام طريقة kickoff(). يوفر هذا طريقة أبسط للتفاعل مع وكيل عندما لا تحتاج إلى إمكانيات تنسيق الطاقم الكاملة.
from crewai import Agentfrom crewai_tools import SerperDevTool
# إنشاء وكيلresearcher = Agent( role="AI Technology Researcher", goal="Research the latest AI developments", tools=[SerperDevTool()], verbose=True)
# استخدام kickoff() للتفاعل مباشرة مع الوكيلresult = researcher.kickoff("What are the latest developments in language models?")
# الوصول إلى الاستجابة الخامprint(result.raw)اعتبارات مهمة وأفضل الممارسات
Section titled “اعتبارات مهمة وأفضل الممارسات”الأمان وتنفيذ الكود
Section titled “الأمان وتنفيذ الكود”تحسين الأداء
Section titled “تحسين الأداء”- استخدم
respect_context_window: trueلمنع مشاكل حد الرموز - عيّن
max_rpmمناسبًا لتجنب تحديد المعدل - فعّل
cache: trueلتحسين الأداء للمهام المتكررة - اضبط
max_iterوmax_retry_limitبناءً على تعقيد المهمة
إدارة الذاكرة والسياق
Section titled “إدارة الذاكرة والسياق”- استفد من
knowledge_sourcesللمعلومات الخاصة بالمجال - هيّئ
embedderعند استخدام نماذج تضمين مخصصة - استخدم القوالب المخصصة للتحكم الدقيق في سلوك الوكيل
التعاون بين الوكلاء
Section titled “التعاون بين الوكلاء”- فعّل
allow_delegation: trueعندما يحتاج الوكلاء للعمل معًا - استخدم
step_callbackلمراقبة وتسجيل تفاعلات الوكلاء - فكّر في استخدام نماذج LLM مختلفة لأغراض مختلفة
توافق النموذج
Section titled “توافق النموذج”- عيّن
use_system_prompt: falseللنماذج القديمة التي لا تدعم رسائل النظام - تأكد من أن
llmالمختار يدعم الميزات التي تحتاجها