> ## 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 AMP

<Note>
  قبل النشر على CrewAI AMP، من الضروري التحقق من صحة بنية مشروعك.
  يمكن نشر كل من الطواقم والتدفقات كـ "أتمتات"، لكن لهما بنى مشاريع
  ومتطلبات مختلفة يجب استيفاؤها لنجاح النشر.
</Note>

## فهم الأتمتات

في CrewAI AMP، **الأتمتات** هو المصطلح الشامل لمشاريع الذكاء الاصطناعي الوكيل القابلة للنشر. يمكن أن تكون الأتمتة إما:

* **طاقم**: فريق مستقل من وكلاء الذكاء الاصطناعي يعملون معاً على المهام
* **تدفق**: سير عمل مُنسّق يمكنه الجمع بين طواقم متعددة واستدعاءات LLM المباشرة والمنطق الإجرائي

فهم النوع الذي تنشره ضروري لأن لهما بنى مشاريع ونقاط دخول مختلفة.

## الطواقم مقابل التدفقات: الفروقات الرئيسية

<CardGroup cols={2}>
  <Card title="مشاريع الطاقم" icon="users">
    فرق وكلاء ذكاء اصطناعي مستقلة. الـ crews الجديدة تستخدم بنية JSON-first مع `crew.jsonc` و `agents/`؛ ويمكن للـ crews الكلاسيكية الاستمرار في استخدام `crew.py`.
  </Card>

  <Card title="مشاريع التدفق" icon="diagram-project">
    سير عمل مُنسّق مع طواقم مضمنة في مجلد `crews/`. الأفضل للعمليات المعقدة متعددة المراحل.
  </Card>
</CardGroup>

| الجانب                       | الطاقم                                                 | التدفق                                                               |
| ---------------------------- | ------------------------------------------------------ | -------------------------------------------------------------------- |
| **بنية المشروع**             | جذر المشروع مع `crew.jsonc` و `agents/`                | `src/project_name/` مع مجلد `crews/`                                 |
| **موقع المنطق الرئيسي**      | `crew.jsonc` (كلاسيكي: `src/project_name/crew.py`)     | `src/project_name/main.py` (فئة Flow)                                |
| **دالة نقطة الدخول**         | تُحمّل من `crew.jsonc` (كلاسيكي: `run()` في `main.py`) | `kickoff()` في `main.py`                                             |
| **نوع pyproject.toml**       | `type = "crew"`                                        | `type = "flow"`                                                      |
| **أمر CLI للإنشاء**          | `crewai create crew name`                              | `crewai create flow name`                                            |
| **موقع التهيئة**             | `crew.jsonc` و `agents/` و `tools/` اختياريًا          | `src/project_name/crews/crew_name/config/` أو مجلدات crew JSON مضمنة |
| **يمكن أن يحتوي طواقم أخرى** | لا                                                     | نعم (في مجلد `crews/`)                                               |

## مرجع بنية المشروع

### بنية مشروع الطاقم

عند تشغيل `crewai create crew my_crew`، تحصل على بنية JSON-first:

```
my_crew/
├── .gitignore
├── pyproject.toml          # Must have type = "crew"
├── README.md
├── .env
├── uv.lock                  # REQUIRED for deployment
├── crew.jsonc               # إعدادات الـ crew والمهام والعملية والمدخلات
├── agents/
│   └── researcher.jsonc     # تعريفات الـ Agents
├── tools/                   # أدوات custom:<name> اختيارية
├── knowledge/
└── skills/
```

<Warning>
  في crews بنمط JSON-first، أبقِ `crew.jsonc` و `agents/` و `tools/` و `knowledge/` و `skills/`
  في جذر المشروع. وضعها داخل `src/` يمنع `crewai run` والتحقق قبل النشر من العثور على تعريف الـ crew.
</Warning>

<Info>
  المشاريع الكلاسيكية التي تُنشأ عبر `crewai create crew my_crew --classic` تستخدم البنية القديمة
  `src/project_name/crew.py` و `src/project_name/config/agents.yaml` و
  `src/project_name/config/tasks.yaml`. تظل هذه البنية مدعومة للـ crews المكتوبة في Python مع decorators.
</Info>

### بنية مشروع التدفق

عند تشغيل `crewai create flow my_flow`، تحصل على هذه البنية:

```
my_flow/
├── .gitignore
├── pyproject.toml          # Must have type = "flow"
├── README.md
├── .env
├── uv.lock                  # REQUIRED for deployment
└── src/
    └── my_flow/
        ├── __init__.py
        ├── main.py          # Entry point with kickoff() function + Flow class
        ├── crews/           # Embedded crews folder
        │   └── poem_crew/
        │       ├── __init__.py
        │       ├── poem_crew.py  # Crew with @CrewBase decorator
        │       └── config/
        │           ├── agents.yaml
        │           └── tasks.yaml
        └── tools/
            ├── __init__.py
            └── custom_tool.py
```

<Info>
  الـ crews المستقلة بنمط JSON-first تستخدم ملفات JSON في جذر المشروع. أما Flows فتظل تستخدم
  `src/project_name/` ويمكن أن تحتوي crews مضمنة كلاسيكية أو مجلدات crew JSON يتم تحميلها عبر
  `crewai.project.load_crew`.
</Info>

## قائمة فحص ما قبل النشر

استخدم هذه القائمة للتحقق من جاهزية مشروعك للنشر.

### 1. التحقق من تهيئة pyproject.toml

يجب أن يتضمن `pyproject.toml` قسم `[tool.crewai]` الصحيح:

<Tabs>
  <Tab title="للطواقم">
    ```toml theme={null}
    [tool.crewai]
    type = "crew"
    ```
  </Tab>

  <Tab title="للتدفقات">
    ```toml theme={null}
    [tool.crewai]
    type = "flow"
    ```
  </Tab>
</Tabs>

<Warning>
  إذا لم يتطابق `type` مع بنية مشروعك، سيفشل البناء أو
  لن تعمل الأتمتة بشكل صحيح.
</Warning>

### 2. التأكد من وجود ملف uv.lock

يستخدم CrewAI `uv` لإدارة الاعتماديات. يضمن ملف `uv.lock` بناءً قابلاً للتكرار وهو **مطلوب** للنشر.

```bash theme={null}
# إنشاء أو تحديث ملف القفل
uv lock

# التحقق من وجوده
ls -la uv.lock
```

إذا لم يكن الملف موجوداً، شغّل `uv lock` وارفعه إلى مستودعك:

```bash theme={null}
uv lock
git add uv.lock
git commit -m "Add uv.lock for deployment"
git push
```

### 3. التحقق من تعريف الـ Crew

<Tabs>
  <Tab title="JSON-first Crews">
    يجب أن تحتوي crews بنمط JSON-first على `crew.jsonc` أو `crew.json` في جذر المشروع.
    يجب أن يشير مصفوفة `agents` إلى ملفات داخل `agents/`، ويجب أن تشير كل task إلى اسم Agent صحيح.

    ```jsonc crew.jsonc theme={null}
    {
      "name": "Research Crew",
      "agents": ["researcher"],
      "tasks": [
        {
          "name": "research_task",
          "description": "Research {topic}.",
          "expected_output": "A concise report.",
          "agent": "researcher"
        }
      ],
      "inputs": {
        "topic": "AI Agents"
      }
    }
    ```

    تُشار الأدوات المخصصة بصيغة `"custom:<name>"` ويجب تنفيذها في
    `tools/<name>.py` كصنف يرث من `BaseTool`.
  </Tab>

  <Tab title="Crews كلاسيكية Python/YAML">
    يجب أن تستخدم الـ crews الكلاسيكية وPython crews المضمنة داخل Flows مزخرف `@CrewBase`.

    ```python theme={null}
    from crewai import Agent, Crew, Process, Task
    from crewai.project import CrewBase, agent, crew, task
    from crewai.agents.agent_builder.base_agent import BaseAgent
    from typing import List

    @CrewBase
    class MyCrew():
        """My crew description"""

        agents: List[BaseAgent]
        tasks: List[Task]

        @agent
        def my_agent(self) -> Agent:
            return Agent(
                config=self.agents_config['my_agent'],  # type: ignore[index]
                verbose=True
            )

        @task
        def my_task(self) -> Task:
            return Task(
                config=self.tasks_config['my_task']  # type: ignore[index]
            )

        @crew
        def crew(self) -> Crew:
            return Crew(
                agents=self.agents,
                tasks=self.tasks,
                process=Process.sequential,
                verbose=True,
            )
    ```
  </Tab>
</Tabs>

### 4. التحقق من نقاط دخول المشروع

لا تحتاج crews المستقلة بنمط JSON-first إلى ملف `src/project_name/main.py` مكتوب يدويًا؛
يقوم `crewai run` وتغليف النشر بتحميل `crew.jsonc` مباشرة. تستخدم crews الكلاسيكية وFlows نقاط دخول Python:

<Tabs>
  <Tab title="JSON-first Crews">
    شغّل محليًا من جذر المشروع:

    ```bash theme={null}
    crewai run
    ```
  </Tab>

  <Tab title="Crews كلاسيكية">
    تستخدم نقطة الدخول دالة `run()`:

    ```python theme={null}
    # src/my_crew/main.py
    from my_crew.crew import MyCrew

    def run():
        """Run the crew."""
        inputs = {'topic': 'AI in Healthcare'}
        result = MyCrew().crew().kickoff(inputs=inputs)
        return result

    if __name__ == "__main__":
        run()
    ```
  </Tab>

  <Tab title="للتدفقات">
    تستخدم نقطة الدخول دالة `kickoff()` مع فئة Flow:

    ```python theme={null}
    # src/my_flow/main.py
    from crewai.flow import Flow, listen, start
    from my_flow.crews.poem_crew.poem_crew import PoemCrew

    class MyFlow(Flow):
        @start()
        def begin(self):
            # Flow logic here
            result = PoemCrew().crew().kickoff(inputs={...})
            return result

    def kickoff():
        """Run the flow."""
        MyFlow().kickoff()

    if __name__ == "__main__":
        kickoff()
    ```
  </Tab>
</Tabs>

### 5. تحضير متغيرات البيئة

قبل النشر، تأكد من أن لديك:

1. **مفاتيح API لـ LLM** جاهزة (OpenAI، Anthropic، Google، إلخ.)
2. **مفاتيح API للأدوات** إذا كنت تستخدم أدوات خارجية (Serper، إلخ.)

<Info>
  إذا كان مشروعك يعتمد على حزم من **سجل PyPI خاص**، ستحتاج أيضاً لتهيئة
  بيانات اعتماد مصادقة السجل كمتغيرات بيئة. راجع
  دليل [سجلات الحزم الخاصة](/ar/enterprise/guides/private-package-registry) للتفاصيل.
</Info>

<Tip>
  اختبر مشروعك محلياً بنفس متغيرات البيئة قبل النشر
  لاكتشاف مشاكل التهيئة مبكراً.
</Tip>

## أوامر التحقق السريع

شغّل هذه الأوامر من جذر مشروعك للتحقق السريع من إعدادك:

```bash theme={null}
# 1. Check project type in pyproject.toml
grep -A2 "\[tool.crewai\]" pyproject.toml

# 2. Verify uv.lock exists
ls -la uv.lock || echo "ERROR: uv.lock missing! Run 'uv lock'"

# 3. For JSON-first crews, verify crew.jsonc and agents/
([ -f crew.jsonc ] || [ -f crew.json ]) || echo "No crew.jsonc or crew.json found"
test -d agents || echo "No agents/ directory found"

# 4. For classic Crews - verify crew.py exists
ls -la src/*/crew.py 2>/dev/null || echo "No crew.py (expected for Crews)"

# 5. For Flows - verify crews/ folder exists
ls -la src/*/crews/ 2>/dev/null || echo "No crews/ folder (expected for Flows)"

# 6. For classic Python crews - check for CrewBase usage
grep -r "@CrewBase" . --include="*.py"
```

## أخطاء الإعداد الشائعة

| الخطأ                                                   | العرض                             | الإصلاح                                              |
| ------------------------------------------------------- | --------------------------------- | ---------------------------------------------------- |
| `uv.lock` مفقود                                         | فشل البناء أثناء حل الاعتماديات   | شغّل `uv lock` وارفعه                                |
| `type` خاطئ في pyproject.toml                           | نجاح البناء لكن فشل وقت التشغيل   | غيّر إلى النوع الصحيح                                |
| `crew.jsonc` أو `agents/` مفقود في crew بنمط JSON-first | لا يمكن العثور على تعريف الـ crew | أبقِ `crew.jsonc` و `agents/` في جذر المشروع         |
| مُزخرف `@CrewBase` مفقود في crew كلاسيكية               | أخطاء "Config not found"          | أضف المُزخرف لجميع فئات الـ crew الكلاسيكية          |
| ملفات كلاسيكية في الجذر بدل `src/`                      | نقطة الدخول غير موجودة            | انقل ملفات Python الكلاسيكية إلى `src/project_name/` |
| `run()` أو `kickoff()` مفقودة                           | لا يمكن بدء الأتمتة               | أضف دالة الدخول الصحيحة                              |

## الخطوات التالية

بمجرد اجتياز مشروعك لجميع عناصر القائمة، أنت جاهز للنشر:

<Card title="النشر على AMP" icon="rocket" href="/ar/enterprise/guides/deploy-to-amp">
  اتبع دليل النشر لنشر طاقمك أو تدفقك على CrewAI AMP باستخدام
  CLI أو واجهة الويب أو تكامل CI/CD.
</Card>
