Spaces:
Sleeping
Sleeping
| """ | |
| نظام إدارة المشاريع باستخدام CrewAI | |
| مدير ذكي يتواصل مع المستخدم ويدير فريق من الوكلاء المتخصصين | |
| """ | |
| import os | |
| from typing import List, Dict, Any, Optional | |
| from crewai import Agent, Task, Crew, Process | |
| from crewai_tools import ( | |
| FileReadTool, | |
| DirectorySearchTool, | |
| CodeDocsSearchTool | |
| ) | |
| from langchain_openai import ChatOpenAI | |
| import json | |
| class ProjectManagerCrew: | |
| """فريق الوكلاء المتكامل لإدارة المشاريع الذكية""" | |
| def __init__(self, project_path: str): | |
| self.project_path = project_path | |
| self.conversation_history: List[Dict] = [] | |
| self.setup_tools() | |
| self.setup_llm() | |
| self.setup_agents() | |
| def setup_tools(self): | |
| """إعداد أدوات الوكلاء""" | |
| self.project_analyzer = DirectorySearchTool( | |
| root_dir=self.project_path, | |
| description="تحليل بنية المشروع والملفات" | |
| ) | |
| self.code_reader = FileReadTool( | |
| root_dir=self.project_path, | |
| description="قراءة وتحليل ملفات الكود" | |
| ) | |
| self.docs_searcher = CodeDocsSearchTool( | |
| root_dir=self.project_path, | |
| description="البحث في توثيق الكود" | |
| ) | |
| def setup_llm(self): | |
| """إعداد النماذج اللغوية باستخدام Hugging Face فقط""" | |
| hf_token = os.getenv("HF_TOKEN") | |
| if not hf_token: | |
| raise ValueError("❌ HF_TOKEN غير موجود. يرجى إضافته في إعدادات السرية (Secrets).") | |
| # نستخدم ChatOpenAI مع قاعدة Hugging Face | |
| self.llm = ChatOpenAI( | |
| model="Qwen/Qwen2.5-Coder-32B-Instruct", | |
| temperature=0.7, | |
| openai_api_key=hf_token, | |
| openai_api_base="https://router.huggingface.co/hf-inference/v1", | |
| max_tokens=2048, | |
| ) | |
| def setup_agents(self): | |
| """إعداد فريق الوكلاء""" | |
| # أدوات المدير | |
| manager_tools = [self.project_analyzer, self.code_reader] | |
| # 1. الوكيل الرئيسي (المتحدث مع المستخدم) | |
| self.project_manager = Agent( | |
| role="مدير المشروع والمتحدث الرئيسي", | |
| goal="التواصل مع المستخدم وفهم احتياجاته، ثم توجيه الفريق لتحقيق الأهداف", | |
| backstory=""" | |
| أنا المدير المسؤول عن الفريق. خبرتي تمتد لأكثر من 10 سنوات في إدارة مشاريع البرمجيات. | |
| مهمتي الأساسية هي فهم متطلبات المستخدم بدقة، تحليلها، وتحويلها إلى خطة عمل واضحة. | |
| أتحدث بلغة واضحة مع المستخدم وأوجه الفريق لتنفيذ المهام بفعالية. | |
| """, | |
| tools=manager_tools, | |
| verbose=True, | |
| allow_delegation=True, | |
| max_iter=10, | |
| llm=self.llm | |
| ) | |
| # 2. وكيل التخطيط التقني | |
| self.technical_planner = Agent( | |
| role="المخطط التقني", | |
| goal="تحليل المشروع الحالي وتصميم خطة تطوير تقنية متكاملة", | |
| backstory=""" | |
| أنا خبير في تحليل أنظمة البرمجيات وأصولها. حاصل على درجة الماجستير في هندسة البرمجيات. | |
| أقوم بدراسة المشروع الحالي، تحديد نقاط القوة والضعف، وتصميم خطة تطوير تقنية مفصلة. | |
| أهتم بالمعمارية البرمجية وقابلية التوسع والأداء. | |
| """, | |
| tools=[self.project_analyzer, self.code_reader, self.docs_searcher], | |
| verbose=True, | |
| llm=self.llm | |
| ) | |
| # 3. وكيل البرمجة | |
| self.coder = Agent( | |
| role="المبرمج الرئيسي", | |
| goal="تنفيذ التغييرات المطلوبة على الكود بجودة عالية", | |
| backstory=""" | |
| أنا مبرمج محترف متخصص في تطوير البرمجيات مع خبرة 8 سنوات. | |
| أتبع أفضل الممارسات (best practices) وأكتب كوداً نظيفاً وفعالاً وقابلاً للصيانة. | |
| أتقن العديد من لغات البرمجة وأطر العمل الحديثة. | |
| """, | |
| tools=[self.code_reader, self.docs_searcher], | |
| verbose=True, | |
| llm=self.llm | |
| ) | |
| # 4. وكيل المراجعة والجودة | |
| self.reviewer = Agent( | |
| role="مراجع الجودة", | |
| goal="مراجعة العمل وضمان الجودة والامتثال للمعايير", | |
| backstory=""" | |
| أنا مراجع دقيق مع خبرة 7 سنوات في ضمان جودة البرمجيات. | |
| أحرص على ضمان جودة العمل المنجز واكتشاف الأخطاء مبكراً. | |
| أهتم بالأمان، الأداء، وقابلية الاستخدام. | |
| """, | |
| tools=[self.code_reader], | |
| verbose=True, | |
| llm=self.llm | |
| ) | |
| def add_to_history(self, role: str, content: str): | |
| """إضافة رسالة إلى سجل المحادثة""" | |
| self.conversation_history.append({ | |
| "role": role, | |
| "content": content, | |
| "timestamp": json.dumps({"time": "now"}) | |
| }) | |
| def create_development_plan(self, user_request: str): | |
| """إنشاء خطة تطوير بناءً على طلب المستخدم""" | |
| # إضافة طلب المستخدم إلى السجل | |
| self.add_to_history("user", user_request) | |
| # المهمة 1: فهم وتحليل الطلب | |
| analysis_task = Task( | |
| description=f""" | |
| ## طلب المستخدم: | |
| {user_request} | |
| ## المطلوب: | |
| 1. تحليل المتطلبات الأساسية والمقاصد الخفية | |
| 2. تحديد الأولويات والمواعيد النهائية المتوقعة | |
| 3. تحليل التحديات والمخاطر المحتملة | |
| 4. تقدير الموارد والتكاليف المطلوبة | |
| 5. تحديد المعايير اللازمة لنجاح المشروع | |
| ## تعليمات: | |
| - كن دقيقاً وشاملاً في التحليل | |
| - اطرح أسئلة توضيحية إذا لزم الأمر | |
| - قم بتقسيم المشكلة إلى أجزاء صغيرة | |
| - ضع في الاعتبار القيود التقنية للمشروع الحالي | |
| """, | |
| agent=self.project_manager, | |
| expected_output="تقرير تحليل متطلبات المستخدم مع خطة أولية" | |
| ) | |
| # المهمة 2: تخطيط تقني | |
| planning_task = Task( | |
| description=""" | |
| ## المطلوب: | |
| بناءً على تحليل المدير، قم بـ: | |
| 1. دراسة المشروع الحالي وتحليله (الهيكل، التقنيات، الاعتمادات) | |
| 2. تصميم خطة تقنية مفصلة للتنفيذ | |
| 3. تحديد المهام التقنية المطلوبة وترتيب أولوياتها | |
| 4. تقدير الوقت والجهود المطلوبة لكل مهمة | |
| 5. تحديد المتطلبات التقنية الجديدة (مكتبات، واجهات برمجة، إلخ) | |
| ## تعليمات: | |
| - ركز على الجانب التقني العملي | |
| - اقترح بدائل وحلول تقنية | |
| - ضع خطة للمراحل (Milestones) | |
| - حدد نقاط المراجعة والاختبار | |
| """, | |
| agent=self.technical_planner, | |
| expected_output="خطة تطوير تقنية مفصلة مع جدول زمني", | |
| context=[analysis_task] | |
| ) | |
| # المهمة 3: التنفيذ | |
| execution_task = Task( | |
| description=""" | |
| ## المطلوب: | |
| بناءً على الخطة التقنية، قم بـ: | |
| 1. تنفيذ التغييرات المطلوبة على الكود | |
| 2. كتابة الكود الجديد مع اتباع أفضل الممارسات | |
| 3. تعديل الملفات الحالية بعناية | |
| 4. كتابة اختبارات للكود الجديد | |
| 5. التأكد من توافق التغييرات مع النظام الحالي | |
| ## تعليمات: | |
| - استخدم تعليقات توضيحية في الكود | |
| - اتبع معايير الترميز للمشروع | |
| - ركز على الكفاءة والأمان | |
| - تأكد من عدم كسر أي وظائف موجودة | |
| """, | |
| agent=self.coder, | |
| expected_output="كود مطور مع شرح التغييرات ونتائج الاختبارات", | |
| context=[planning_task] | |
| ) | |
| # المهمة 4: المراجعة | |
| review_task = Task( | |
| description=""" | |
| ## المطلوب: | |
| مراجعة العمل المنجز من المبرمج: | |
| 1. تحقق من جودة الكود واتباع المعايير | |
| 2. اكتشف الأخطاء والمشاكل المحتملة | |
| 3. اختبار الوظائف والتأكد من عملها بشكل صحيح | |
| 4. اقترح تحسينات للأداء والأمان | |
| 5. تأكد من تحقيق جميع المتطلبات | |
| ## تعليمات: | |
| - كن دقيقاً في المراجعة | |
| - ابحث عن الثغرات الأمنية المحتملة | |
| - تحقق من قابلية التوسع والصيانة | |
| - قدم تقريراً مفصلاً عن النتائج | |
| """, | |
| agent=self.reviewer, | |
| expected_output="تقرير مراجعة شامل مع قائمة التحسينات", | |
| context=[execution_task] | |
| ) | |
| # إنشاء الفريق وتشغيله | |
| crew = Crew( | |
| agents=[ | |
| self.project_manager, | |
| self.technical_planner, | |
| self.coder, | |
| self.reviewer | |
| ], | |
| tasks=[ | |
| analysis_task, | |
| planning_task, | |
| execution_task, | |
| review_task | |
| ], | |
| process=Process.sequential, | |
| verbose=True, | |
| memory=True | |
| ) | |
| result = crew.kickoff() | |
| # إضافة النتيجة إلى السجل | |
| self.add_to_history("system", str(result)) | |
| return result | |
| def chat_with_manager(self, message: str, conversation_history: Optional[List[Dict]] = None): | |
| """الدردشة مع المدير الرئيسي""" | |
| # استخدام السجل المقدم أو السجل الداخلي | |
| history_to_use = conversation_history if conversation_history else self.conversation_history | |
| # إضافة رسالة المستخدم إلى السجل | |
| self.add_to_history("user", message) | |
| chat_task = Task( | |
| description=f""" | |
| ## تاريخ المحادثة (آخر 5 رسائل): | |
| {json.dumps(history_to_use[-5:], ensure_ascii=False) if history_to_use else 'بداية المحادثة'} | |
| ## رسالة المستخدم الجديدة: | |
| {message} | |
| ## تعليمات: | |
| 1. رد بطريقة ودية واحترافية كمشرف مشروع | |
| 2. كن مفيداً ودقيقاً في الإجابة | |
| 3. إذا كان السؤال يحتاج إلى تحليل المشروع، استخدم الأدوات المتاحة | |
| 4. اطرح أسئلة توضيحية إذا كان الطلب غير واضح | |
| 5. قدم اقتراحات عملية وقابلة للتنفيذ | |
| ## معلومات المشروع: | |
| - المسار: {self.project_path} | |
| - عدد الرسائل السابقة: {len(history_to_use)} | |
| """, | |
| agent=self.project_manager, | |
| expected_output="رد مفصل وواضح ومفيد للمستخدم" | |
| ) | |
| crew = Crew( | |
| agents=[self.project_manager], | |
| tasks=[chat_task], | |
| process=Process.sequential, | |
| verbose=False, | |
| memory=True | |
| ) | |
| response = crew.kickoff() | |
| # إضافة رد المدير إلى السجل | |
| self.add_to_history("manager", str(response)) | |
| return response |