ContiAI / agents /books /units_structure.py
alaa wael
alaa update project
d5c9e32
Raw
History Blame Contribute Delete
4.12 kB
from crewai import Agent, Task
from modules import llm_open_4m
from schemas import CourseSchema
def course_structuring_agent():
model = llm_open_4m()
return Agent(
name="CourseStructuringAgent",
role="Educational Content Structuring Expert",
goal=(
"تحليل تصور فني (أو أكثر) لكتاب/حقيبة تدريبية "
"وتحويله إلى هيكل تدريبي JSON واضح ومنضبط بدون كتابة محتوى."
),
backstory=(
"أنت خبير تصميم مناهج وحقائب تدريبية. "
"تجيد التعامل مع ملفات غير منظمة، ومحتوى متكرر أو موزع على أكثر من مستند. "
"مهمتك استخراج الهيكل العلمي فقط: وحدات + عناوين فرعية + نواتج تعلم. "
"تلتزم التزامًا صارمًا بعدم تغيير أي عنوان ورد كما هو."
),
llm=model,
verbose=False,
memory=False,
allow_delegation=False,
)
def course_structuring_task(course_structuring_agent):
return Task(
agent=course_structuring_agent,
output_json=CourseSchema,
description="""
أنت خبير في تصميم المناهج وبناء الحقائب التدريبية الاحترافية.
سيتم تزويدك بـ:
- نص واحد أو أكثر (قد يكونوا من ملفين مختلفين) يمثلون:
• تصور فني للكتاب
• وصف الكتاب
• نواتج التعلم
• الفئة المستهدفة
• تقسيم الفصول والعناوين
⚠️ ملاحظات مهمة عن النص:
- النص قد يحتوي على:
- شعارات، أسماء جهات، ترويسات تصميمية
- تكرار أو اختلاف في الصياغة
- هذه العناصر غير التعليمية يجب تجاهلها تمامًا
- اعتبر كل النصوص كأنها تمثل كتابًا واحدًا
========================
النصوص المُدخلة:
========================
{merged_book_text}
========================
البيانات الإضافية (قد تكون فارغة):
========================
- course_name: {course_name}
- course_audience: {course_audience}
- course_description: {course_description}
- learning_outcomes (إن وُجدت): {learning_outcomes}
========================
🎯 المطلوب منك:
========================
1) هيكلة المحتوى:
- كل فصل = Unit واحد
- عنوان الفصل = unit_name
- العناوين أو النقاط داخل الفصل = topics
- تجاهل المقدمة والخاتمة ككيانات مستقلة
- ❗ يُمنع منعًا باتًا:
- إعادة صياغة العناوين
- تحسين لغوي
- دمج أو تقسيم العناوين
2) Learning Outcomes:
- استخدم learning_outcomes المُدخلة كما هي إن وُجدت
- إذا لم تكن موجودة:
- أنشئ Learning Outcomes عامة للكورس
- بصياغة تعليمية احترافية (يكون المتدرب قادرًا على...)
- لا تكرر عناوين الوحدات حرفيًا
3) course_description:
- إذا كانت موجودة → لا تغيّرها
- إذا كانت فارغة → أنشئ وصفًا احترافيًا بناءً على المحتوى
4) course_audience:
- إذا كانت موجودة → لا تغيّرها
- إذا كانت فارغة → استنتج الفئة الأنسب بدقة
5) وحدات التدريب:
- لكل Unit:
- unit_name: اسم الفصل كما ورد
- topics: قائمة بالعناوين الفرعية فقط
- outcome: ناتج تعلم خاص بهذه الوحدة (جملة واحدة)
========================
📦 الإخراج النهائي:
========================
- JSON فقط
- مطابق تمامًا لـ CourseSchema
- بدون أي شرح أو نص خارج JSON
⚠️ أي حقل غير موجود في الـ Schema = مرفوض
""",
expected_output="Strict JSON matching CourseSchema schema.",
async_execution=False,
)