البناء الواقعي وتحقيق الدخل
المشروع النهائي: خط أنبوب محتوى متعدد الوكلاء
النتيجة: بنهاية هذا الدرس ستكون قد شحنت خط أنبوب CrewAI يعمل بـ 4 وكلاء متخصصين — باحث ← كاتب ← مدقق حقائق ← ناشر — يأخذ موضوعاً كمدخل، يجمع المصادر، يصيغ منشوراً، يتحقق من كل ادعاء واقعي، ويحفظ الـ markdown النهائي (أو ينشره عبر webhook). هذا هو التنسيق متعدد الوكلاء الذي بنيت نحوه عبر خمس وحدات.
ما ستشحنه — هذا الأمر يشغّل الفريق كاملاً:
python pipeline.py --topic "حالة أطر الوكلاء مفتوحة المصدر في الربع الثاني 2026"
الجزء 1 — إعداد المشروع (5 دقائق)
content-crew/
├── pipeline.py
├── agents/
│ ├── researcher.py
│ ├── writer.py
│ ├── fact_checker.py
│ └── publisher.py
├── tools/
│ ├── web_search.py
│ └── cms_webhook.py
├── requirements.txt
└── .env.example
requirements.txt:
crewai==0.95.0
crewai-tools==0.25.0
anthropic==0.42.0
tavily-python==0.7.1
httpx==0.27.2
python-dotenv==1.0.1
.env.example:
ANTHROPIC_API_KEY=sk-ant-...
TAVILY_API_KEY=tvly-...
CMS_WEBHOOK_URL=https://your-cms.com/api/drafts
CMS_WEBHOOK_TOKEN=
الجزء 2 — الأدوات المخصصة (10 دقائق)
وكلاء CrewAI يستخدمون نمط @tool من الوحدة 3. أداتان تُشغّلان هذا الفريق: بحث الويب (الباحث) و CMS webhook (الناشر). راجع tools/web_search.py و tools/cms_webhook.py في النسخة الإنجليزية.
الجزء 3 — الوكلاء الأربعة (15 دقيقة)
لكل وكيل مهمة واحدة — هذه هي فكرة التنسيق. وكيل بثلاث مسؤوليات سرعان ما يصبح وكيلاً لا يؤدي أياً منها جيداً.
# agents/researcher.py
researcher = Agent(
role="Research Analyst",
goal="Gather 6-10 authoritative, recent sources on the assigned topic",
backstory="أنت محلل بحوث مخضرم. تثق بالمصادر الأولية (وثائق البائعين، "
"مستودعات GitHub، الإعلانات الرسمية) أكثر من الملخصات الثانوية. "
"تشك في الأرقام المستديرة والتواريخ الحديثة — كلاهما علامات حمراء.",
tools=[web_search],
llm="anthropic/claude-sonnet-4-6",
verbose=True,
allow_delegation=False,
)
# agents/fact_checker.py — استخدم Opus للدقة العالية
fact_checker = Agent(
role="Fact Checker",
goal="تحقق من كل ادعاء رقمي، رقم إصدار، تاريخ، و'الأول/الوحيد/الأكبر'...",
backstory="أنت بارانوي بالمهنة. تفترض كل إحصائية خاطئة حتى تجد مصدراً موثوقاً. "
"تعامل الادعاءات السلبية ('X ليس لديه Y') بشك إضافي — هذه المصدر الأول للأخطاء.",
tools=[web_search],
llm="anthropic/claude-opus-4-7",
verbose=True,
allow_delegation=False,
)
# publisher: استخدم Haiku (رخيص، مهمة ميكانيكية)
publisher = Agent(
role="Publisher",
goal="احفظ المنشور النهائي وادفعه إلى webhook الـ CMS",
llm="anthropic/claude-haiku-4-6",
...
)
اختيار النموذج مقصود:
- الباحث: Sonnet — استدلال واسع + استخدام أدوات
- الكاتب: Sonnet — صياغة عالية الجودة
- مدقق الحقائق: Opus — أعلى دقة، تستحق التكلفة للصحة
- الناشر: Haiku — مهمة ميكانيكية صغيرة، أرخص ~5-6×
مطابقة قوة النموذج لصعوبة المهمة تقلّص التكلفة الإجمالية للفريق بـ ~60% مقابل استخدام Sonnet لكل وكيل.
الجزء 4 — الفريق المُنسِّق (10 دقائق)
pipeline.py يبني 4 مهام مُسلسلة مع Process.sequential. كل مهمة لاحقة تستقبل مخرجات السابقة عبر context=[...]. انظر النسخة الإنجليزية للكود الكامل.
النقاط الرئيسية:
research_task→ يُخرج موجز بحث مع مصادر ومؤشرات ادعاءاتwrite_task→ يستخدمcontext=[research_task]، يصيغ مسودة مع اقتباسات[^N]factcheck_task→context=[research_task, write_task]، يصحح ويُسجل التعديلاتpublish_task→context=[factcheck_task]، يضيف frontmatter ويدفع للـ CMS
الجزء 5 — شغّله (دقيقتان)
python pipeline.py --topic "حالة أطر الوكلاء مفتوحة المصدر في الربع الثاني 2026"
إجمالي وقت التشغيل: 3–6 دقائق. إجمالي التكلفة على Anthropic: $0.40–$0.80 لكل منشور بأسعار 2026.
الجزء 6 — ما يتغير عند تبديل الموضوع
خط الأنبوب محايد موضوعياً:
| التغيير | أين |
|---|---|
| تركيز بحث مختلف | backstory الوكيل + description مهمة البحث |
| طول منشور مختلف | وصف مهمة الكاتب (1500-2000 → 800-1200) |
| CMS مختلف | بدّل publish_to_cms في tools/cms_webhook.py |
| أضف وكيل SEO قبل الناشر | Agent(...) جديد + Task(...) جديد |
| اجعله مهمة مجدولة | غلّف pipeline.py في GitHub Actions cron |
إضافة وكيل خامس ~15 سطر كود — هذه قوة بنية CrewAI.
الجزء 7 — قائمة استكشاف الأخطاء
| العرض | أول شيء تتحقق منه | السبب المعتاد |
|---|---|---|
| الباحث يُرجع 0 نتائج | لوحة Tavily | الطبقة المجانية مستنفدة، أو days=90 مقيد جداً |
| مخرج الكاتب قصير جداً | backstory الكاتب | الهدف مُصاغ كـ "ملخص" بدل "منشور 1500-2000 كلمة" |
| مدقق الحقائق لا يصحح المسودة فعلاً | إصدار CrewAI | الإصدارات الأقدم لا تمرر مخرجات المهام كسياق قابل للتحرير — رقّ إلى 0.95+ |
| الناشر يفشل في webhook | CMS_WEBHOOK_URL | نقطة نهاية خاطئة، ترويسة مصادقة ناقصة |
| كل الوكلاء يستخدمون نفس النموذج | تجاوز env | CREWAI_DEFAULT_MODEL يتفوق على تكوين لكل وكيل |
| الفريق يتعلق للأبد | أوصاف المهام | expected_output غامض يُبقي الوكلاء يكررون |
نقطة تحقق — أنجز هذا قبل ادعاء الشهادة
- شحن الفريق.
python pipeline.py --topic "أي شيء"يمر عبر 4 وكلاء بلا أخطاء. - شحن مسار الكتابة. الـ markdown النهائي في
./output/له frontmatter صحيح ومحتوى حقيقي. - شحن الصيد. شغّل على موضوع من المحتمل أن يهلوس فيه الكاتب إحصائيات. تأكد من أن سجل تغييرات مدقق الحقائق يُظهر تصحيحاً واحداً على الأقل.
- شحن الـ webhook. وجّه
CMS_WEBHOOK_URLإلى نقطة نهاية حقيقية. تأكد من أن الناشر يرسل POST ويسجل الاستجابة. - التقط الفريق يعمل + الـ markdown النهائي + استجابة الـ webhook — كإثبات عملك.
الآن شحنت خط أنبوب متعدد الوكلاء يقوم بعمل تحريري حقيقي على أساس محايد موضوعياً. كل نمط تنسيق من الوحدات الخمس السابقة — تخصص الوكلاء، تسلسل المهام، توجيه الأدوات، مطابقة تكلفة النموذج، حواجز تدقيق الحقائق — يعمل الآن في الإنتاج.
التالي (اختياري): أضف تكامل Slack ليُسقط الفريق ملخصاً يومياً في قناة فريقك، أو اربطه بخلاصة RSS لتُحوّل إعلانات التقنية الجديدة إلى مسودات تلقائياً. :::