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

الوكلاء

في إطار عمل CrewAI، الـ Agent هو وحدة مستقلة يمكنها:

  • أداء مهام محددة
  • اتخاذ قرارات بناءً على دوره وهدفه
  • استخدام الأدوات لتحقيق الأهداف
  • التواصل والتعاون مع وكلاء آخرين
  • الاحتفاظ بذاكرة التفاعلات
  • تفويض المهام عند السماح بذلك
الخاصيةالمعاملالنوعالوصف
الدورrolestrيحدد وظيفة الوكيل وخبرته ضمن الطاقم.
الهدفgoalstrالهدف الفردي الذي يوجه عملية اتخاذ القرار لدى الوكيل.
الخلفيةbackstorystrيوفر سياقًا وشخصية للوكيل، مما يثري التفاعلات.
LLM (اختياري)llmUnion[str, LLM, Any]نموذج اللغة الذي يشغّل الوكيل. افتراضيًا النموذج المحدد في OPENAI_MODEL_NAME أو “gpt-4”.
الأدوات (اختياري)toolsList[BaseTool]القدرات أو الوظائف المتاحة للوكيل. افتراضيًا قائمة فارغة.
LLM استدعاء الدوال (اختياري)function_calling_llmOptional[Any]نموذج لغة لاستدعاء الأدوات، يتجاوز LLM الطاقم إذا حُدد.
الحد الأقصى للتكرارات (اختياري)max_iterintالحد الأقصى للتكرارات قبل أن يقدم الوكيل أفضل إجابته. الافتراضي 20.
الحد الأقصى لـ RPM (اختياري)max_rpmOptional[int]الحد الأقصى للطلبات في الدقيقة لتجنب حدود المعدل.
الحد الأقصى لوقت التنفيذ (اختياري)max_execution_timeOptional[int]الحد الأقصى للوقت (بالثواني) لتنفيذ المهمة.
الوضع المفصل (اختياري)verboseboolتفعيل سجلات التنفيذ المفصلة للتصحيح. الافتراضي False.
السماح بالتفويض (اختياري)allow_delegationboolالسماح للوكيل بتفويض المهام لوكلاء آخرين. الافتراضي False.
دالة الخطوة (اختياري)step_callbackOptional[Any]دالة تُستدعى بعد كل خطوة للوكيل، تتجاوز دالة الطاقم.
التخزين المؤقت (اختياري)cacheboolتفعيل التخزين المؤقت لاستخدام الأدوات. الافتراضي True.
قالب النظام (اختياري)system_templateOptional[str]قالب أمر نظام مخصص للوكيل.
قالب الأمر (اختياري)prompt_templateOptional[str]قالب أمر مخصص للوكيل.
قالب الاستجابة (اختياري)response_templateOptional[str]قالب استجابة مخصص للوكيل.
السماح بتنفيذ الكود (اختياري)allow_code_executionOptional[bool]تفعيل تنفيذ الكود للوكيل. الافتراضي False.
الحد الأقصى لإعادة المحاولة (اختياري)max_retry_limitintالحد الأقصى لإعادات المحاولة عند حدوث خطأ. الافتراضي 2.
احترام نافذة السياق (اختياري)respect_context_windowboolإبقاء الرسائل تحت حجم نافذة السياق عبر التلخيص. الافتراضي True.
وضع تنفيذ الكود (اختياري)code_execution_modeLiteral["safe", "unsafe"]وضع تنفيذ الكود: ‘safe’ (باستخدام Docker) أو ‘unsafe’ (مباشر). الافتراضي ‘safe’.
متعدد الوسائط (اختياري)multimodalboolما إذا كان الوكيل يدعم القدرات متعددة الوسائط. الافتراضي False.
حقن التاريخ (اختياري)inject_dateboolما إذا كان يتم حقن التاريخ الحالي تلقائيًا في المهام. الافتراضي False.
تنسيق التاريخ (اختياري)date_formatstrسلسلة تنسيق التاريخ عند تفعيل inject_date. الافتراضي “%Y-%m-%d” (تنسيق ISO).
الاستدلال (اختياري)reasoningboolما إذا كان يجب على الوكيل التأمل وإنشاء خطة قبل تنفيذ المهمة. الافتراضي False.
الحد الأقصى لمحاولات الاستدلال (اختياري)max_reasoning_attemptsOptional[int]الحد الأقصى لمحاولات الاستدلال قبل تنفيذ المهمة. إذا None، سيحاول حتى الاستعداد.
المُضمّن (اختياري)embedderOptional[Dict[str, Any]]تهيئة المُضمّن المستخدم من قبل الوكيل.
مصادر المعرفة (اختياري)knowledge_sourcesOptional[List[BaseKnowledgeSource]]مصادر المعرفة المتاحة للوكيل.
استخدام أمر النظام (اختياري)use_system_promptOptional[bool]ما إذا كان يُستخدم أمر النظام (لدعم نموذج o1). الافتراضي True.

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

المشاريع الجديدة التي تُنشأ عبر 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.

المشاريع الكلاسيكية التي تُنشأ عبر 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.yaml
researcher:
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.py
from crewai import Agent, Crew, Process
from crewai.project import CrewBase, agent, crew
from crewai_tools import SerperDevTool
@CrewBase
class 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
)

يمكنك إنشاء الوكلاء مباشرة في الكود بإنشاء فئة Agent. إليك مثالًا شاملًا يوضح جميع المعاملات المتاحة:

from crewai import Agent
from 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,
)

دعنا نستعرض بعض تركيبات المعاملات الرئيسية لحالات الاستخدام الشائعة:

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
)
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
)
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"
)
  • role و goal و backstory مطلوبة وتشكّل سلوك الوكيل
  • llm يحدد نموذج اللغة المستخدم (افتراضي: GPT-4 من OpenAI)
  • memory: تفعيل للحفاظ على سجل المحادثة
  • respect_context_window: يمنع مشاكل حد الرموز
  • knowledge_sources: إضافة قواعد معرفة خاصة بالمجال
  • max_iter: الحد الأقصى للمحاولات قبل تقديم أفضل إجابة
  • max_execution_time: المهلة بالثواني
  • max_rpm: تحديد معدل استدعاءات API
  • max_retry_limit: إعادات المحاولة عند الخطأ
  • allow_code_execution (مهجور): كان يُمكّن تنفيذ الكود المدمج عبر CodeInterpreterTool.
  • code_execution_mode (مهجور): كان يتحكم في وضع التنفيذ ("safe" لـ Docker، "unsafe" للتنفيذ المباشر).
  • multimodal: تفعيل القدرات متعددة الوسائط لمعالجة النص والمحتوى المرئي
  • reasoning: تمكين الوكيل من التأمل وإنشاء خطط قبل تنفيذ المهام
  • inject_date: حقن التاريخ الحالي تلقائيًا في أوصاف المهام
  • system_template: يحدد السلوك الأساسي للوكيل
  • prompt_template: ينظم تنسيق الإدخال
  • response_template: ينسّق استجابات الوكيل

يمكن تجهيز الوكلاء بأدوات متنوعة لتعزيز قدراتهم. يدعم CrewAI أدوات من:

إليك كيفية إضافة أدوات لوكيل:

from crewai import Agent
from 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 Agent
from 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 “اعتبارات مهمة وأفضل الممارسات”
  • استخدم respect_context_window: true لمنع مشاكل حد الرموز
  • عيّن max_rpm مناسبًا لتجنب تحديد المعدل
  • فعّل cache: true لتحسين الأداء للمهام المتكررة
  • اضبط max_iter و max_retry_limit بناءً على تعقيد المهمة
  • استفد من knowledge_sources للمعلومات الخاصة بالمجال
  • هيّئ embedder عند استخدام نماذج تضمين مخصصة
  • استخدم القوالب المخصصة للتحكم الدقيق في سلوك الوكيل
  • فعّل allow_delegation: true عندما يحتاج الوكلاء للعمل معًا
  • استخدم step_callback لمراقبة وتسجيل تفاعلات الوكلاء
  • فكّر في استخدام نماذج LLM مختلفة لأغراض مختلفة
  • عيّن use_system_prompt: false للنماذج القديمة التي لا تدعم رسائل النظام
  • تأكد من أن llm المختار يدعم الميزات التي تحتاجها