> ## Documentation Index
> Fetch the complete documentation index at: https://docs.crewai.com/llms.txt
> Use this file to discover all available pages before exploring further.

# الوكلاء

> دليل تفصيلي حول إنشاء وإدارة الوكلاء ضمن إطار عمل CrewAI.

## نظرة عامة على الوكيل

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

* أداء مهام محددة
* اتخاذ قرارات بناءً على دوره وهدفه
* استخدام الأدوات لتحقيق الأهداف
* التواصل والتعاون مع وكلاء آخرين
* الاحتفاظ بذاكرة التفاعلات
* تفويض المهام عند السماح بذلك

> [!TIP]
>
> فكّر في الوكيل كعضو فريق متخصص بمهارات وخبرات ومسؤوليات محددة.
> على سبيل المثال، قد يتفوق وكيل `Researcher` في جمع وتحليل المعلومات،
> بينما قد يكون وكيل `Writer` أفضل في إنشاء المحتوى.

> [!NOTE]
>
> يتضمن CrewAI AMP منشئ وكلاء مرئي يبسّط إنشاء وتهيئة الوكلاء بدون كتابة كود. صمم وكلاءك بصريًا واختبرهم في الوقت الفعلي.
>
> ![Visual Agent Builder Screenshot](https://mintcdn.com/crewai/5SZbe87tsCWZY09V/images/enterprise/crew-studio-interface.png?fit=max\&auto=format\&n=5SZbe87tsCWZY09V\&q=85\&s=c4f5428b111816273b3b53d9cef14fad)
>
> يُمكّن منشئ الوكلاء المرئي من:
>
> * تهيئة وكلاء بديهية بواجهات نماذج
> * اختبار والتحقق في الوقت الفعلي
> * مكتبة قوالب مع أنواع وكلاء مهيأة مسبقًا
> * تخصيص سهل لخصائص وسلوكيات الوكيل

## خصائص الوكيل

| الخاصية | المعامل | النوع | الوصف |
| :- | :- | :- | :- |
| **الدور** | `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. |
| **استخدام ضغط أفضل** *(اختياري)* | `use_better_compaction` | `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. |

## إنشاء الوكلاء

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

### تهيئة JSONC (موصى بها)

المشاريع الجديدة التي تُنشأ عبر `crewai create crew <name>` تستخدم تهيئة JSON-first. يُعرّف كل Agent في `agents/<agent_name>.jsonc`، ويحدد `crew.jsonc` أي Agents تدخل في الـ crew.

```jsonc agents/researcher.jsonc theme={null}
{
  "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`.

> [!NOTE]
>
> يدعم JSONC التعليقات والفواصل النهائية. إذا وُجد `agents/<name>.jsonc` و `agents/<name>.json` معًا، يستخدم CrewAI ملف JSONC.

### تهيئة YAML الكلاسيكية

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

تظل تهيئة YAML مدعومة للمشاريع الحالية المبنية بـ Python/YAML وللفِرق التي تفضل تعريف الوكلاء من خلال فئة `@CrewBase`.

بعد إنشاء مشروع كلاسيكي، انتقل إلى ملف `src/<project_name>/config/agents.yaml` وعدّل القالب ليتوافق مع متطلباتك.

> [!NOTE]
>
> ستُستبدل المتغيرات في ملفات YAML (مثل `{topic}`) بقيم من مدخلاتك عند تشغيل الطاقم:
>
> ```python Code theme={null}
> crew.kickoff(inputs={'topic': 'AI Agents'})
> ```

إليك مثالًا على كيفية تهيئة الوكلاء باستخدام YAML:

```yaml agents.yaml theme={null}
# 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`:

```python Code theme={null}
# 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
    )
```

> [!NOTE]
>
> يجب أن تتطابق الأسماء المستخدمة في ملفات YAML (`agents.yaml`) مع أسماء
> الطرق في كود Python.

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

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

```python Code theme={null}
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,
)
```

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

#### وكيل بحث أساسي

```python Code theme={null}
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
)
```

#### وكيل تطوير الكود

```python Code theme={null}
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
)
```

#### وكيل تحليل طويل المدى

```python Code theme={null}
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`: إعادات المحاولة عند الخطأ

#### تنفيذ الكود

> [!WARNING]
>
> `allow_code_execution` و`code_execution_mode` مهجوران. تمت إزالة `CodeInterpreterTool` من `crewai-tools`. استخدم خدمة بيئة معزولة مخصصة مثل [E2B](https://e2b.dev) أو [Modal](https://modal.com) لتنفيذ الكود بأمان.

* `allow_code_execution` *(مهجور)*: كان يُمكّن تنفيذ الكود المدمج عبر `CodeInterpreterTool`.
* `code_execution_mode` *(مهجور)*: كان يتحكم في وضع التنفيذ (`"safe"` لـ Docker، `"unsafe"` للتنفيذ المباشر).

#### الميزات المتقدمة

* `multimodal`: تفعيل القدرات متعددة الوسائط لمعالجة النص والمحتوى المرئي
* `reasoning`: تمكين الوكيل من التأمل وإنشاء خطط قبل تنفيذ المهام
* `inject_date`: حقن التاريخ الحالي تلقائيًا في أمر الوكيل

#### القوالب

* `system_template`: يحدد السلوك الأساسي للوكيل
* `prompt_template`: ينظم تنسيق الإدخال
* `response_template`: ينسّق استجابات الوكيل

> [!NOTE]
>
> عند استخدام القوالب المخصصة، تأكد من تعريف كل من `system_template` و
> `prompt_template`. `response_template` اختياري لكن يُوصى به
> لتنسيق مخرجات متسق.

## أدوات الوكيل

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

* [مجموعة أدوات CrewAI](https://github.com/joaomdmoura/crewai-tools)
* [أدوات LangChain](https://python.langchain.com/docs/integrations/tools)

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

```python Code theme={null}
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()`

يمكن استخدام الوكلاء مباشرة بدون المرور بمهمة أو سير عمل طاقم باستخدام طريقة `kickoff()`. يوفر هذا طريقة أبسط للتفاعل مع وكيل عندما لا تحتاج إلى إمكانيات تنسيق الطاقم الكاملة.

```python Code theme={null}
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)
```

## ترقية الوكلاء من الإصدارات السابقة

أزال الإصدار 1.15.29 `CrewAgentExecutor` وغيّر طريقة تعامل كل وكيل مع نتائج الأدوات الكبيرة والمحادثات الطويلة واستدعاءات الأدوات المتكررة. تنطبق هذه التغييرات على الوكلاء داخل crew وداخل Flow وعند استدعائهم عبر `kickoff()`. والاستثناء هو خطوات الخطة لدى الوكيل الذي [يخطّط](https://docs.crewai.com/ar/concepts/planning.md): فلا تُؤجَّل نتائج أدواتها، ولا تُلخَّص محادثتها، ويبدأ عدّ الاستدعاءات المتكررة من جديد في كل خطوة. إذا كنت تنتقل من 1.15.28 أو أقدم، فراجع كل تغيير أدناه.

### إزالة `CrewAgentExecutor`

`AgentExecutor` هو منفّذ الوكلاء الوحيد. وهو الافتراضي منذ 1.14.5، لذا فإن الوكيل الذي لم يضبط `executor_class` قط كان يعمل عليه بالفعل.

* يفشل التحقق من `executor_class=CrewAgentExecutor`، أو من السلسلة `"CrewAgentExecutor"` في ملف إعداد، بالرسالة `CrewAgentExecutor has been removed. Use crewai.agents.agent_executor.AgentExecutor.` احذف هذا الإعداد.
* لم تعد مسارات الاستيراد هذه موجودة: `crewai.agents.crew_agent_executor`، و`crewai.agents.CrewAgentExecutor`، والوحدة `crewai.experimental.agent_executor`، و`crewai.experimental.AgentExecutor`، و`crewai.experimental.CrewAgentExecutorFlow`. استورد المنفّذ من `crewai.agents`:

```python Code theme={null}
from crewai.agents import AgentExecutor
```

لا يوجد إعداد يعيد المنفّذ القديم.

### تأجيل نتائج الأدوات الكبيرة جدًا

عندما يعيد استدعاء أداة أصلي نتيجة أكبر من 25% من نافذة سياق النموذج، لم يعد الوكيل يتلقى النتيجة كاملة. بل يتلقى معاينة قصيرة ومرجعًا إلى ملف مؤقت، ويقرأ الباقي على أجزاء باستخدام الأداة `Read a deferred tool result` (يراها النموذج باسم `read_a_deferred_tool_result`)، والتي يضيفها CrewAI إلى الوكيل عند الحاجة.

* لا تُؤجَّل أبدًا استدعاءات الأدوات الفاشلة، ولا الأدوات التي تحمل `result_as_answer=True`، ولا استدعاءات الأدوات النصية (ReAct).
* يُحفظ الملف في مجلد خاص داخل مجلد الملفات المؤقتة للنظام. ولا يمكن قراءته إلا أثناء التشغيل الذي أنتجه، ويُحذف عند انتهاء تلك المهمة أو استدعاء `kickoff()`.

للإبقاء على نتائج الأدوات كاملة في المحادثة، عطّل التأجيل للوكيل:

```python Code theme={null}
from crewai import Agent

agent = Agent(
    role="Source Reviewer",
    goal="Quote sources exactly",
    backstory="Checks every quote against the original text",
    use_better_compaction=False,  # Keep whole tool results in the conversation
)
```

### تلخيص السياق قبل أن يتجاوز الحد

مع `respect_context_window=True` (الافتراضي)، أصبح الوكيل يقيس كل طلب قبل إرساله. وعندما يكون الطلب أكبر من نافذة سياق النموذج، يلخّص CrewAI المحادثة السابقة أولًا بدلًا من انتظار رفض المزوّد للطلب. وقد يفقد الملخص تفاصيل مثل الاقتباسات الحرفية.

اضبط `respect_context_window=False` لتعطيل التلخيص. عندها يوقف الطلب الطويل جدًا التشغيل بـ `SystemExit("Context length exceeded and user opted not to summarize...")`. و`SystemExit` ليس صنفًا فرعيًا من `Exception`، لذا لا تلتقطه الكتلة `except Exception`.

### الاستدعاءات المتكررة للأدوات توقف المهمة

عندما يستدعي الوكيل الأداة نفسها بالوسائط نفسها ويحصل على النتيجة نفسها خمس مرات في تشغيل واحد، يوقف CrewAI المهمة بالخطأ `ToolExecutionFailedError` مع رسالة تفيد بأن الوكيل `called '<tool>' with the same arguments 5 times and got the same result each time`.

* يشمل العدّ المهمة كلها أو استدعاء `kickoff()` كله، لا الاستدعاءات المتتالية فقط، ويشمل النتائج التي أجاب عنها التخزين المؤقت للأدوات.
* يحدث الإيقاف أيًا كانت قيمة `tool_failure_policy`، ولا يعيد `max_retry_limit` المحاولة.
* حد الخمس مرات ثابت. لا يوجد إعداد لتغييره أو تعطيله.

### كيف يُحدَّد حجم نافذة السياق

يُقاس كل من التأجيل والتلخيص مقابل نافذة السياق التي يستخدمها CrewAI للنموذج: 85% من النافذة المدرجة في كتالوج نماذج LiteLLM المضمّن في الحزمة. ويستخدم النموذج غير الموجود في الكتالوج قيمة افتراضية من المزوّد. وبالنسبة لنماذج OpenAI وAzure وBedrock والنماذج المتوافقة مع OpenAI (مثل OpenRouter) والنماذج الموجّهة عبر LiteLLM، تبلغ هذه القيمة 8,192 رمزًا، فيستخدم CrewAI القيمة 6,963 بعد تطبيق نسبة 85%، وتبدأ الميزتان أبكر بكثير مما تستدعيه النافذة الحقيقية للنموذج. ويستخدم الصنف الفرعي المخصص من `BaseLLM` الذي لا يعيد تعريف `get_context_window_size()` القيمة 4,096. لمعرفة الحجم الذي يستخدمه CrewAI، استدعِ `get_context_window_size()` على الـ LLM. يُنشأ الـ LLM كما يُنشأ عند التشغيل، لذا يجب ضبط مفتاح API الخاص بالمزوّد:

```python Code theme={null}
from crewai import LLM

llm = LLM(model="openrouter/your-provider/your-model")
print(llm.get_context_window_size())
```

## اعتبارات مهمة وأفضل الممارسات

### الأمان وتنفيذ الكود

> [!WARNING]
>
> `allow_code_execution` و`code_execution_mode` مهجوران وتمت إزالة `CodeInterpreterTool`. استخدم خدمة بيئة معزولة مخصصة مثل [E2B](https://e2b.dev) أو [Modal](https://modal.com) لتنفيذ الكود بأمان.

### تحسين الأداء

* استخدم `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` المختار يدعم الميزات التي تحتاجها


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.