البدء السريع
شاهد: بناء Agents و Flows في CrewAI باستخدام Coding Agent Skills
Section titled “شاهد: بناء Agents و Flows في CrewAI باستخدام Coding Agent Skills”قم بتثبيت مهارات وكيل البرمجة الخاصة بنا (Claude Code، Codex، …) لتشغيل وكلاء البرمجة بسرعة مع CrewAI.
يمكنك تثبيتها باستخدام npx skills add crewaiinc/skills
في هذا الدليل ستُنشئ Flow يحدد موضوع بحث، ويشغّل طاقمًا بوكيل واحد (باحث يستخدم البحث على الويب)، وينتهي بتقرير Markdown على القرص. يُعد Flow الطريقة الموصى بها لتنظيم التطبيقات الإنتاجية: يمتلك الحالة وترتيب التنفيذ، بينما الوكلاء ينفّذون العمل داخل خطوة الطاقم.
إذا لم تُكمل تثبيت CrewAI بعد، اتبع دليل التثبيت أولًا.
المتطلبات الأساسية
Section titled “المتطلبات الأساسية”- بيئة Python وواجهة سطر أوامر CrewAI (راجع التثبيت)
- نموذج لغوي مهيأ بالمفاتيح الصحيحة — راجع LLMs
- مفتاح API من Serper.dev (
SERPER_API_KEY) للبحث على الويب في هذا الدرس
ابنِ أول Flow لك
Section titled “ابنِ أول Flow لك”- أنشئ مشروع Flow
من الطرفية، أنشئ مشروع Flow (اسم المجلد يستخدم شرطة سفلية، مثل
latest_ai_flow):CodeTerminal window crewai create flow latest-ai-flowcd latest_ai_flowيُنشئ ذلك تطبيق Flow ضمن
src/latest_ai_flow/، بما في ذلك طاقمًا أوليًا فيcrews/content_crew/ستستبدله بطاقم بحث بوكيل واحد في الخطوات التالية. - اضبط وكيلًا واحدًا في JSONC
أنشئ
src/latest_ai_flow/crews/content_crew/agents/researcher.jsonc(أنشئ مجلدagents/إذا لزم). تُملأ المتغيرات مثل{topic}منcrew.kickoff(inputs=...).{"role": "باحث بيانات أول في {topic}","goal": "اكتشاف أحدث التطورات في {topic}","backstory": "أنت باحث يجد المعلومات الأكثر صلة ويعرضها بوضوح.","tools": ["SerperDevTool"],"settings": {"verbose": true}} - اضبط الـ crew في `crew.jsonc`
أنشئ
src/latest_ai_flow/crews/content_crew/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} - حمّل crew JSON (`content_crew.py`)
استبدل
content_crew.pyالمُولّد بمحمل صغير يحولcrew.jsoncإلىCrew.src/latest_ai_flow/crews/content_crew/content_crew.py from pathlib import Pathfrom crewai.project import load_crewdef kickoff_content_crew(inputs: dict):crew, default_inputs = load_crew(Path(__file__).with_name("crew.jsonc"))return crew.kickoff(inputs={**default_inputs, **inputs}) - عرّف Flow في `main.py`
اربط الطاقم بـ Flow: خطوة
@start()تضبط الموضوع في الحالة، وخطوة@listenتشغّل الطاقم. يظلoutput_fileللمهمة يكتبoutput/report.md.src/latest_ai_flow/main.py from pydantic import BaseModelfrom crewai.flow import Flow, listen, startfrom latest_ai_flow.crews.content_crew.content_crew import kickoff_content_crewclass 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.rawprint("اكتمل طاقم البحث.")@listen(run_research)def summarize(self):print("مسار التقرير: output/report.md")def kickoff():LatestAiFlow().kickoff()def plot():LatestAiFlow().plot()if __name__ == "__main__":kickoff() - متغيرات البيئة
في جذر المشروع، ضبط
.env:SERPER_API_KEY— من Serper.dev- مفاتيح مزوّد النموذج حسب الحاجة — راجع إعداد LLM
- التثبيت والتشغيلCode
Terminal window crewai installcrewai runيُنفّذ
crewai runنقطة دخول Flow المعرّفة في المشروع (نفس أمر الطواقم؛ نوع المشروع"flow"فيpyproject.toml). - تحقق من المخرجات
يجب أن ترى سجلات من Flow والطاقم. افتح
output/report.mdللتقرير المُولَّد (مقتطف):Code# وكلاء الذكاء الاصطناعي: المشهد والاتجاهات الحديثة## ملخص تنفيذي…## أبرز الاتجاهات- **استخدام الأدوات والتنسيق** — …- **التبني المؤسسي** — …## الآثار…سيكون الملف الفعلي أطول ويعكس نتائج بحث مباشرة.
كيف يترابط هذا
Section titled “كيف يترابط هذا”- Flow — يشغّل
LatestAiFlowأولًاprepare_topicثمrun_researchثمsummarize. الحالة (topic،report) على Flow. - الطاقم — يحمّل
kickoff_content_crewملفcrew.jsoncويشغّل مهمة واحدة بوكيل واحد: الباحث يستخدم Serper للبحث على الويب ثم يكتب التقرير. - المُخرَج — يكتب
output_fileللمهمة التقرير فيoutput/report.md.
للتعمق في أنماط Flow (التوجيه، الاستمرارية، الإنسان في الحلقة)، راجع ابنِ أول Flow وFlows. للطواقم دون Flow، راجع Crews. لوكيل Agent واحد وkickoff() بلا مهام، راجع Agents.
اتساق التسمية
Section titled “اتساق التسمية”يجب أن تطابق الأسماء في crew.jsonc الملفات والمراجع:
agents: ["researcher"]يحمّلagents/researcher.jsonctasks[].agent: "researcher"يربط المهمة بذلك الـ agent
ادفع Flow إلى CrewAI AMP بعد أن يعمل محليًا ويكون المشروع في مستودع GitHub. من جذر المشروع:
crewai logincrewai deploy createcrewai deploy statuscrewai deploy logscrewai deploy pushcrewai deploy listcrewai deploy remove <deployment_id>