File size: 4,584 Bytes
325b94c ee25d96 325b94c ee25d96 325b94c | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | from crewai import Agent, Task
import os
import json
from modules import llm_open_4m
from schemas import CourseContent
# -------------------------
# 1. تعريف Agent: Curriculum Designer
# -------------------------
def curriculum_designer():
model = llm_open_4m()
return Agent(
role="مصمم مناهج تعليمية",
goal=(
# "أنت مصمم مناهج تعليمية. مهمتك هي تحويل بيانات المقرر إلى خريطة تعلمية مفصلة."
"أنت مصمم مناهج ذو خبرة عالية. مهمتك تحويل بيانات المقرر إلى خريطة تعلمية مفصلة تشمل وحدات، موضوعات، ونقاط فرعية (subtopics)"
"يمكن شرحها مباشرة من قبل مدرب للمتدربين. رتب المحتوى من المفاهيم الأساسية إلى التطبيق العملي، مع مراعاة وضوح كل نقطة وغرضها التعليمي للفئة المستهدفة."
"المُدخلات:"
"- course_name: {course_name}"
"- course_audience: {course_audience}"
"- course_description: {course_description}"
"- learning_outcomes: {learning_outcomes}"
"- units: {units}"
"مرجع: استخدم المثال التالي كنموذج لإنتاج محتوى مفصل:"
"{example_reference}"
"لكل وحدة في units:"
" - لكل موضوع أصلي، أنشئ 2-5 نقاط فرعية (subtopics) مفصلة."
" - لكل subtopic:"
" - title: عبارة قصيرة."
" - description: 1-2 جمل تشرح الفكرة والغرض التعليمي."
" - رتب النقاط من الأساسيات للتطبيق العملي."
" - ركز على جعل المحتوى مناسبًا للفئة المستهدفة المحددة في course_audience."
"تحويل بيانات المقرر إلى بنية مفصلة تشمل وحدات وموضوعات ونقاط فرعية، "
"مناسبة لأي فئة مستهدفة، مع الالتزام بنمط المثال المرجعي."
),
backstory=(
"أنت مصمم مناهج ذو خبرة عالية. مهمتك هي ان تتعلم من المثال المرجعي لإنشاء محتوى عملي و تحليل بيانات المقرر وإنتاج خريطة تعلمية تفصيلية تشمل وحدات،"
"موضوعات، ونقاط فرعية (subtopics) يمكن شرحها مباشرة من قِبل مدرب لمتدربين،"
"مع ترتيبها من الأساسيات إلى التطبيق العملي، مع مراعاة {course_audience}الفئة المستهدفة."
# "أنت مصمم مناهج ذو خبرة عالية، تتعلم من المثال المرجعي لإنشاء محتوى عملي، "
# "متدرج، وعملي لأي audience."
),
verbose=True,
memory=True,
llm=model,
allow_delegation=False,
)
# -------------------------
# 2. Task: إنشاء نواتج JSON مفصلة
# -------------------------
def generate_course_structure_task(curriculum_designer):
return Task(
description=(
"تحويل بيانات المقرر (course_name, course_audience, units) إلى JSON مفصل يشمل expanded_units. "
"لكل موضوع، أنشئ 2-5 subtopics، كل subtopic يحتوي على title و description قصيرة تشرح الفكرة والغرض التعليمي. "
# "مع مراعاة أن تكون قابلة للشرح من قبل مدرب للمتدربين. رتب النقاط من المفاهيم الأساسية إلى التطبيق العملي."
"تأكد أن كل subtopic يمكن شرحه مباشرة من قبل مدرب للمتدربين. "
"رتب النقاط من المفاهيم الأساسية إلى التطبيق العملي، وأضف أمثلة عملية إذا أمكن."
),
# description=(
# "تحويل بيانات المقرر (course_name, course_audience, units) إلى JSON مفصل "
# "يشمل expanded_units. لكل موضوع، أنشئ 2-5 subtopics، كل subtopic يحتوي على title و description."
# ),
expected_output=(
"CourseContent JSON: fields: course_name, course_audience, expanded_units"
),
agent=curriculum_designer,
output_json=CourseContent,
async_execution=False,
# output_file=os.path.join(output_dir, "تحليل البيانات.json"),
)
|