| from crewai import Agent, Task, Crew |
| from modules import llm_g |
| from schemas import QuizOutput |
|
|
| 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, |
| |
| ) |
|
|