from crewai import Agent, Task, Crew from modules import llm_g from schemas import QuizOutput # فيه الـ Pydantic model بتاعك def generate_quiz_agent(): model = llm_g() return Agent( role="مصمم أسئلة تدريبية", goal=( "إنشاء 20 سؤالًا تدريبيًا عالي الجودة مبنية على المحتوى التعليمي المقدم. " "يجب أن تشمل الأسئلة مزيجًا من أسئلة مباشرة تتحقق من قراءة المتدرب للمحتوى، " "وأسئلة تحليلية تتطلب فهمًا عميقًا واستنتاجًا. " "المطلوب إنتاج أسئلة اختيار من متعدد وصح/خطأ باللغة العربية." ), backstory=( "أنت خبير تربوي متخصص في القياس والتقويم، تعمل منذ 15 عاماً في تصميم الاختبارات الأكاديمية. " "تتميز بقدرتك على صياغة أسئلة دقيقة تكشف مستوى استيعاب المتعلم، " "وتدمج بين الأسئلة المباشرة وأسئلة الفهم العميق." ), verbose=True, memory=False, llm=model, allow_delegation=False, ) def generate_quiz_task(generate_quiz_agent): return Task( description=( "أنشئ 20 سؤالًا تدريبيًا بناءً على المعلومات التالية:\n" "- course_name: {course_name}\n" "- course_audience: {course_audience}\n" "- unit_name: {unit_name}\n" "- unit_outcome: {unit_outcome}\n" "- topics: {topics}\n" "هيكل الأسئلة المطلوب:\n" " - 5 أسئلة مباشرة للتحقق من قراءة المتدرب للمحتوى (مسموح باستخدام معلومات ظاهرية من النص).\n" " - 10 أسئلة اختيار من متعدد متدرجة من المتوسطة إلى الصعبة تعتمد على التحليل والفهم.\n" " - 5 أسئلة صح/خطأ تعتمد على الاستنتاج وربط المفاهيم.\n\n" "## معايير الجودة الإلزامية:\n" "✅ لا تستخدم أبداً صيغ مثل: 'وفقاً للنص'، 'ذُكر في المحتوى'، 'كما ورد او اي كلمات تدل على المحتوى في الاسئله'\n" "✅ استخدم أمثلة وسياقات لم تُذكر مباشرة في المحتوى\n" "✅ تجنب الخيارات الواضحة الخطأ مثل 'كل ما سبق' أو 'لا شيء مما سبق'\n" "✅ اجعل المُشتتات (الخيارات الخاطئة) مبنية على أخطاء مفاهيمية شائعة\n" "✅ وايضاح ال topic الذي اعمد عليه السؤال كل سؤال يجب أن يكون مصحوباً بشرح تفصيلي للإجابة الصحيحة\n" "✅ تأكد من أن الإجابة على كل سؤال موجودة فعلاً في المحتوى المقدم\n\n" "قواعد عامة:\n" "✔️ الأسئلة المباشرة يجب أن تعتمد على معلومة واضحة موجودة داخل المحتوى.\n" "✔️ الأسئلة التحليلية يجب أن تعتمد على الفهم العميق وليس النسخ المباشر.\n" "✔️ تجنّب الأسئلة البديهية أو التي لا تحتاج قراءة المحتوى.\n" "✔️ يجب توزيع الأسئلة بالتساوي على جميع المواضيع.\n" "❌ ممنوع العبارات الصحيحة/الخاطئة المنقولة حرفياً من المحتوى\n" "❌ ممنوع الأسئلة التي يمكن حلها بالمنطق العام دون قراءة المحتوى\n" "يجب اختيار درجة الصعوبة من متوسط وصعب وصعب جدا وكتابتها فى الdifficulty\n\n " "⚠️ كل سؤال يجب أن يحتوي على الحقل التالي:" "- topic_question_related_to: اسم الموضوع الفرعي المستخدم في السؤال\n" "أخرج JSON مطابق لنموذج QuizOutput." "Output must be as QuizOutput schema" ), expected_output="QuizOutput JSON", output_json=QuizOutput, agent=generate_quiz_agent, async_execution=False, # output_file=os.path.join(output_dir, "generated_quiz.json"), )