الانتقال إلى المحتوى الرئيسي

شاهد: بناء Agents و Flows في CrewAI باستخدام Coding Agent Skills

قم بتثبيت مهارات وكيل البرمجة الخاصة بنا (Claude Code، Codex، …) لتشغيل وكلاء البرمجة بسرعة مع CrewAI. يمكنك تثبيتها باستخدام npx skills add crewaiinc/skills
في هذا الدليل ستُنشئ Flow يحدد موضوع بحث، ويشغّل طاقمًا بوكيل واحد (باحث يستخدم البحث على الويب)، وينتهي بتقرير Markdown على القرص. يُعد Flow الطريقة الموصى بها لتنظيم التطبيقات الإنتاجية: يمتلك الحالة وترتيب التنفيذ، بينما الوكلاء ينفّذون العمل داخل خطوة الطاقم. إذا لم تُكمل تثبيت CrewAI بعد، اتبع دليل التثبيت أولًا.

المتطلبات الأساسية

  • بيئة Python وواجهة سطر أوامر CrewAI (راجع التثبيت)
  • نموذج لغوي مهيأ بالمفاتيح الصحيحة — راجع LLMs
  • مفتاح API من Serper.dev (SERPER_API_KEY) للبحث على الويب في هذا الدرس

ابنِ أول Flow لك

1

أنشئ مشروع Flow

من الطرفية، أنشئ مشروع Flow (اسم المجلد يستخدم شرطة سفلية، مثل latest_ai_flow):
crewai create flow latest-ai-flow
cd latest_ai_flow
يُنشئ ذلك تطبيق Flow ضمن src/latest_ai_flow/، بما في ذلك طاقمًا أوليًا في crews/content_crew/ ستستبدله بطاقم بحث بوكيل واحد في الخطوات التالية.
2

اضبط وكيلًا واحدًا في JSONC

أنشئ src/latest_ai_flow/crews/content_crew/agents/researcher.jsonc (أنشئ مجلد agents/ إذا لزم). تُملأ المتغيرات مثل {topic} من crew.kickoff(inputs=...).
agents/researcher.jsonc
{
  "role": "باحث بيانات أول في {topic}",
  "goal": "اكتشاف أحدث التطورات في {topic}",
  "backstory": "أنت باحث يجد المعلومات الأكثر صلة ويعرضها بوضوح.",
  "tools": ["SerperDevTool"],
  "settings": {
    "verbose": true
  }
}
3

اضبط الـ crew في `crew.jsonc`

أنشئ src/latest_ai_flow/crews/content_crew/crew.jsonc:
crew.jsonc
{
  "name": "Research Crew",
  "agents": ["researcher"],
  "tasks": [
    {
      "name": "research_task",
      "description": "أجرِ بحثًا معمقًا عن {topic}. استخدم البحث على الويب للعثور على معلومات حديثة وموثوقة.",
      "expected_output": "تقرير بصيغة Markdown بأقسام واضحة: الاتجاهات الرئيسية، أدوات أو شركات بارزة، والآثار. بين 800 و1200 كلمة تقريبًا. دون إحاطة المستند بأكمله بكتل كود.",
      "agent": "researcher",
      "output_file": "output/report.md",
      "markdown": true
    }
  ],
  "process": "sequential",
  "verbose": true
}
4

حمّل crew JSON (`content_crew.py`)

استبدل content_crew.py المُولّد بمحمل صغير يحول crew.jsonc إلى Crew.
content_crew.py
# src/latest_ai_flow/crews/content_crew/content_crew.py
from pathlib import Path

from crewai.project import load_crew


def kickoff_content_crew(inputs: dict):
  crew, default_inputs = load_crew(Path(__file__).with_name("crew.jsonc"))
  return crew.kickoff(inputs={**default_inputs, **inputs})
5

عرّف Flow في `main.py`

اربط الطاقم بـ Flow: خطوة @start() تضبط الموضوع في الحالة، وخطوة @listen تشغّل الطاقم. يظل output_file للمهمة يكتب output/report.md.
main.py
# src/latest_ai_flow/main.py
from pydantic import BaseModel

from crewai.flow import Flow, listen, start

from latest_ai_flow.crews.content_crew.content_crew import kickoff_content_crew


class ResearchFlowState(BaseModel):
  topic: str = ""
  report: str = ""


class LatestAiFlow(Flow[ResearchFlowState]):
  @start()
  def prepare_topic(self, crewai_trigger_payload: dict | None = None):
    if crewai_trigger_payload:
      self.state.topic = crewai_trigger_payload.get("topic", "AI Agents")
    else:
      self.state.topic = "AI Agents"
    print(f"الموضوع: {self.state.topic}")

  @listen(prepare_topic)
  def run_research(self):
    result = kickoff_content_crew(inputs={"topic": self.state.topic})
    self.state.report = result.raw
    print("اكتمل طاقم البحث.")

  @listen(run_research)
  def summarize(self):
    print("مسار التقرير: output/report.md")


def kickoff():
  LatestAiFlow().kickoff()


def plot():
  LatestAiFlow().plot()


if __name__ == "__main__":
  kickoff()
إذا كان اسم الحزمة ليس latest_ai_flow، عدّل استيراد kickoff_content_crew ليطابق مسار الوحدة في مشروعك.
6

متغيرات البيئة

في جذر المشروع، ضبط .env:
  • SERPER_API_KEY — من Serper.dev
  • مفاتيح مزوّد النموذج حسب الحاجة — راجع إعداد LLM
7

التثبيت والتشغيل

crewai install
crewai run
يُنفّذ crewai run نقطة دخول Flow المعرّفة في المشروع (نفس أمر الطواقم؛ نوع المشروع "flow" في pyproject.toml).
8

تحقق من المخرجات

يجب أن ترى سجلات من Flow والطاقم. افتح output/report.md للتقرير المُولَّد (مقتطف):
# وكلاء الذكاء الاصطناعي: المشهد والاتجاهات الحديثة

## ملخص تنفيذي


## أبرز الاتجاهات
- **استخدام الأدوات والتنسيق** — …
- **التبني المؤسسي** — …

## الآثار

سيكون الملف الفعلي أطول ويعكس نتائج بحث مباشرة.

كيف يترابط هذا

  1. Flow — يشغّل LatestAiFlow أولًا prepare_topic ثم run_research ثم summarize. الحالة (topic، report) على Flow.
  2. الطاقم — يحمّل kickoff_content_crew ملف crew.jsonc ويشغّل مهمة واحدة بوكيل واحد: الباحث يستخدم Serper للبحث على الويب ثم يكتب التقرير.
  3. المُخرَج — يكتب output_file للمهمة التقرير في output/report.md.
للتعمق في أنماط Flow (التوجيه، الاستمرارية، الإنسان في الحلقة)، راجع ابنِ أول Flow وFlows. للطواقم دون Flow، راجع Crews. لوكيل Agent واحد وkickoff() بلا مهام، راجع Agents.
أصبح لديك Flow كامل مع طاقم وكيل وتقرير محفوظ — قاعدة قوية لإضافة خطوات أو طواقم أو أدوات.

اتساق التسمية

يجب أن تطابق الأسماء في crew.jsonc الملفات والمراجع:
  • agents: ["researcher"] يحمّل agents/researcher.jsonc
  • tasks[].agent: "researcher" يربط المهمة بذلك الـ agent

النشر

ادفع Flow إلى CrewAI AMP بعد أن يعمل محليًا ويكون المشروع في مستودع GitHub. من جذر المشروع:
crewai login
غالبًا ما يستغرق النشر الأول حوالي دقيقة. المتطلبات الكاملة ومسار الواجهة الويب في النشر على AMP.

دليل النشر

النشر على AMP خطوة بخطوة (CLI ولوحة التحكم).

المجتمع

ناقش الأفكار وشارك مشاريعك وتواصل مع مطوري CrewAI.