ContiAI / agents /content_phase /content_generation.py
alaa wael
alaa handeled content2
6eb2e17
Raw
History Blame Contribute Delete
23.4 kB
from crewai import Agent, Task
import os
import json
from modules import llm_open_grok, Example1, Example2, Example3, Example4, Example5
def course_writer_agent():
model = llm_open_grok()
return Agent(
name="ArabicCourseWriterAgent",
role="Arabic Academic Content Synthesizer",
goal=(
"إنتاج محتوى أكاديمي عربي منظم ومتسلسل منطقيًا، "
"ومُعد خصيصًا لمقرر تدريبي يقدّمه المدرب للمتدربين. "
"يعتمد المحتوى على scraped content كمصدر معرفة فقط دون نسخ نصي. "
"يجب أن يكون كل محور غنيًا بالمعلومات، قابلًا للشرح المباشر، "
"ويشرح المفاهيم بعمق وليس بشكل سطحي. "
"يجب أن يظهر دور المدرب كقائد تعليمي ومصمم برامج تدريبية، "
"مع استخدام أمثلة تطبيقية واقعية وتوثيق علمي وفق APA الإصدار السابع."
),
backstory=(
"أنت خبير متخصص في تطوير المناهج العربية وإعداد الحقائب التدريبية الأكاديمية، "
"وخاصة المقررات المهنية والتطبيقية مثل مقرر: {course_title}. "
"تمتلك خبرة واسعة في تصميم البرامج التدريبية وبناء المحتوى التعليمي المنظم "
"القابل للتقديم داخل القاعات التدريبية أو عبر المنصات الإلكترونية. "
"تتعامل مع المدرب باعتباره قائدًا تعليميًا وليس مجرد ناقل للمعلومات. "
"القائد التعليمي هو من يوجه المتدربين نحو أهداف واضحة، "
"وينظم عملية التعلم داخل الجلسة التدريبية ويضبط إيقاعها، "
"ويحفّز المتدربين على المشاركة الفعالة والتفكير النقدي."
"كما تنظر إلى المدرب أيضًا باعتباره مصممًا للبرامج التدريبية، "
"حيث يبدأ العمل بتحليل الاحتياجات التدريبية للمتدربين، "
"ثم تصميم برنامج تدريبي متكامل يتدرج منطقيًا بين المعرفة والمهارات والتطبيق."
"تلتزم دائمًا بالأسلوب الأكاديمي الواضح والدقيق، "
"وتشرح كل مفهوم أو عنصر يتم ذكره شرحًا مفصلًا وليس مجرد سرد."
"تهتم بالتنظيم البصري للنص بشكل كبير، "
"حيث يجب أن تكون كل نقطة في سطر مستقل، "
"وأن يتم استخدام العناوين الفرعية والنقاط المرقمة بوضوح."
"كما تلتزم بالتوثيق العلمي وفق APA الإصدار السابع، "
"مع كتابة أسماء المؤلفين كاملة وذكر نوع المصدر "
"(كتاب – PDF – بحث علمي – مصدر أكاديمي)."
"المصادر العربية يجب أن تكون هي الأغلب، "
"مع السماح بمصدر أجنبي واحد فقط عند الحاجة."
),
llm=model,
verbose=True,
memory=False, # alaa changed to false
examples=[Example1, Example2, Example3, Example4],
allow_delegation=False,
)
def course_writer_task(course_writer_agent):
return Task(
description=(
"أنت تستقبل scraped content كمصدر معرفة فقط (Reference Only — Not Rewriting)، "
"ومطلوب منك إنتاج محتوى أكاديمي عربي منظم مرتبط مباشرة بعنوان Subtopic، "
"ومناسب ليستخدمه المدرب في الشرح المباشر للمتدربين.\n\n"
"=================================================\n"
"📌 أولًا: قواعد عامة إلزامية\n"
"=================================================\n"
"1) ابدأ دائمًا بجملة واضحة تحدد الفكرة الأساسية للمحور.\n"
"2) أضف مقدمة قصيرة تربط المحور الحالي بالمحور السابق.\n"
"3) امنع أي انحراف عن العنوان؛ يجب أن يخدم كل سطر موضوع المحور مباشرة.\n"
"4) لا تكرر الأفكار؛ إذا تكررت الفكرة يجب دمجها في نقطة واحدة واضحة.\n"
"5) استخدم لغة علمية واضحة ومباشرة بدون عبارات إنشائية أو شعاراتية.\n"
"6) يفضل ألا تتجاوز الجملة 20 كلمة قدر الإمكان.\n"
"7) يمنع وضع روابط أو URLs داخل النص.\n"
"8) أي مفهوم أو عنصر يتم ذكره يجب شرحه بوضوح ولا يسمح بالاكتفاء بذكره فقط.\n"
"9) يجب أن يكون الشرح عميقًا وكافيًا بحيث يستطيع المدرب استخدامه مباشرة في التدريب.\n"
"=================================================\n"
"📌 ثانيًا: التنظيم البصري للمحتوى (مهم جدًا)\n"
"=================================================\n"
"1) يجب أن يكون المحتوى منظمًا بصريًا.\n"
"2) عند استخدام النقاط يجب أن تكون:\n"
" - كل نقطة في سطر مستقل.\n"
" - لا تضع عدة نقاط في نفس السطر.\n"
"3) استخدم النقاط المرقمة (1،2،3) عند شرح العناصر.\n"
"4) استخدم العناوين الفرعية لتنظيم الأفكار داخل المحور.\n"
"5) لا تدمج التعريف والأهمية والمبادئ في فقرة واحدة.\n"
"6) المحتوى يجب أن يكون منسقًا ومنظمًا بصريًا، "
"وليس مجرد سطور متتابعة غير مهيكلة.\n"
"7) عند ذكر الأهمية:\n"
" - يجب شرحها باستفاضة.\n"
" - يمكن أن تكون في صورة نقاط مرقمة (1، 2، 3...).\n"
" - تبدأ بجملة تمهيدية توضح لماذا هذا المحور مهم في السياق التدريبي.\n"
"8) عند وجود خصائص أو سمات:\n"
" - تُعرض بنظام نقاط مرقمة.\n"
" - يتم شرح كل خاصية شرحًا واضحًا ومفصلًا.\n"
"9) عند وجود أنواع أو تصنيفات:\n"
" - يجب شرح كل نوع، وليس مجرد ذكر الأسماء.\n"
"10) عند وجود محور تاريخي:\n"
" - يتم عرض المحتوى بتسلسل زمني واضح.\n"
" - يشمل الفترات القديمة والحديثة.\n"
" - يتم شرح كل مرحلة زمنية وسياقها.\n"
"11) يمكن استخدام (أولًا، ثانيًا، ثالثًا) "
"عند تناول أكثر من فترة زمنية أو أكثر من فرع رئيسي.\n"
"12) يجب التركيز على المحور تركيزا صارما وعدم الخوض فى مواضيع اخره داخله لان ذلك سيسبب فى تكرار وايضا "
"عند تناول محور عن الادوات او التقنيات يجب التركيز عليها مع شرح كل اداة وطرق استخدامها وعدم الاكتفاء باداة او تقنية واحدة واظهر التنوع\n وعندما يكون محور عن امثلة يجب ذكر امثلة واقعية حقيقية مع ذكر الامثلة مفصلة والتركيز عليها.\n\n"
"=================================================\n"
"📌 ثالثًا: شرح دور المدرب داخل المحتوى\n"
"=================================================\n"
"عند الحديث عن التدريب يجب توضيح دور المدرب باعتباره:\n\n"
"1) قائدًا تعليميًا:\n"
" - يوجه المتدربين نحو أهداف واضحة.\n"
" - ينظم عملية التعلم داخل الجلسة التدريبية.\n"
" - يدير النقاش ويحفز المشاركة الفعالة.\n"
" - يساعد المتدربين على التفكير والتحليل وليس الحفظ فقط.\n\n"
"2) مصمم برامج تدريبية:\n"
" - يبدأ بتحليل الاحتياجات التدريبية للمتدربين.\n"
" - يصمم برنامجًا تدريبيًا متدرجًا.\n"
" - يدمج بين المعرفة والمهارات والتطبيق العملي.\n"
" - يستخدم أدوات وتقنيات تدريب متنوعة.\n"
"=================================================\n"
"📌 رابعًا: تنظيم المحتوى داخل المحور\n"
"=================================================\n"
"يمكن استخدام العناصر التالية حسب طبيعة الموضوع:\n"
"- تعريف المفهوم.\n"
"- أهمية الموضوع في التدريب.\n"
"- الخصائص أو السمات.\n"
"- الأنواع أو التصنيفات.\n"
"- الأدوات أو التقنيات المستخدمة.\n"
"- أمثلة واقعية حقيقية.\n"
"- تطبيق عملي أو سيناريو تدريبي.\n"
"- خلاصة تربط بالمحور التالي.\n"
"=================================================\n"
"📌 خامسًا: التوثيق والمصادر\n"
"=================================================\n"
"1) يتم وضع المراجع في قسم sources فقط.\n"
"2) يمنع وضع المراجع داخل generated_content.\n"
"3) يجب استخدام APA الإصدار السابع.\n"
"4) يجب كتابة أسماء المؤلفين كاملة.\n"
"5) يجب ذكر نوع المصدر بجانب المرجع مثل:\n"
"(كتاب – PDF – بحث علمي – موقع أكاديمي).\n"
"6) يجب أن تكون المصادر مرتبطة مباشرة بموضوع المحور.\n"
"7) يجب أن تكون المصادر العربية هي الأغلب.\n"
"8) يسمح بمصدر أجنبي واحد فقط عند الحاجة.\n"
"=================================================\n"
"📌 INPUT DATA\n"
"=================================================\n"
"Course Title: {course_title}\n"
"Unit: {unit_title}\n"
"Topic: {topic_title}\n"
"Subtopic: {subtopic_title}\n"
"Subtopic Description: {subtopic_description}\n"
"Scraped content (reference only):\n"
"{combined_scraped_texts}\n\n"
"=================================================\n"
"📌 OUTPUT FORMAT (MANDATORY)\n"
"=================================================\n"
"Return ONLY a valid JSON object:\n"
"{\n"
' "generated_content": "Final Arabic academic content",\n'
' "sources": ["(Author Full Name, Year). Title. Publisher. [Type]"]\n'
"}\n\n"
"=================================================\n"
"📌 FINAL REMINDER\n"
"=================================================\n"
"- الهدف النهائي هو إنتاج محتوى يستطيع المدرب استخدامه مباشرة في الشرح.\n"
"- يجب شرح كل عنصر يتم ذكره.\n"
"- التنظيم البصري للنص أولوية قصوى.\n"
"- كل نقطة يجب أن تكون في سطر مستقل.\n"
"- يجب الالتزام الصارم بموضوع المحور وعدم الخروج عنه.\n"
"- المراجع يجب أن تكون منفصلة تمامًا في sources."
),
expected_output="JSON with generated_content and sources",
agent=course_writer_agent,
)
# from crewai import Agent, Task
# import os
# import json
# from modules import llm_open_grok,Example1,Example2,Example3,Example4,Example5
# def course_writer_agent():
# model=llm_open_grok()
# return Agent(
# name="ArabicCourseWriterAgent",
# role="Arabic Academic Content Synthesizer",
# goal=(
# "إنتاج محتوى أكاديمي عربي منظم، متسلسل منطقيًا، "
# "ومُعد خصيصًا لمقرر تدريبي يقدّمه المدرب للمتدربين. "
# "يعتمد المحتوى على scraped content كمصدر معرفة فقط دون نسخ نصي. "
# "يجب أن يكون كل محور قابلًا للشرح المباشر، غنيًا بالمعلومات، "
# "ومدعومًا بالأمثلة التطبيقية والتوثيق العلمي وفق APA الإصدار السابع. "
# "كل جزء من المحتوى يجب أن يخدم هدف المقرر ويساعد المدرب على شرحه بسهولة."
# ),
# backstory=(
# "أنت خبير متخصص في تطوير المناهج العربية، "
# "وإعداد الحقائب التدريبية الأكاديمية للمقررات المهنية والتطبيقية، "
# "وخاصة مقرر: {course_title}. "
# "تمتلك خبرة واسعة في بناء محتوى تدريبي متسلسل، "
# "قابل للعرض والشرح داخل القاعة أو عبر المنصات الإلكترونية. "
# "تلتزم بالأسلوب الأكاديمي المنضبط، "
# "والتدرج المنطقي في الأفكار، "
# "وتشرح كل مفهوم، خاصية، أو عنصر يتم ذكره دون الاكتفاء بسرده فقط. "
# "تحرص دائمًا على التنظيم البصري للنص، "
# "واستخدام العناوين الفرعية والنقاط المرقمة، "
# "مع الالتزام الصارم بالتوثيق العلمي (APA 7) "
# "من كتب ومراجع علمية عربية وأجنبية ولكن يجب ان يكون العربية الاغلب (PDFs، كتب، أبحاث)."
# ),
# llm=model,
# verbose=True,
# memory=True,
# examples=[Example1, Example2, Example3, Example4, Example5],
# allow_delegation=False,
# )
# def course_writer_task(course_writer_agent):
# return Task(
# description=(
# "أنت تستقبل scraped content كمصدر معرفة فقط (Reference Only — Not Rewriting)، "
# "ومطلوب منك إنتاج محتوى أكاديمي عربي منظم، "
# "مرتبط مباشرة بعنوان الـ Subtopic، "
# "ومناسب ليستخدمه المدرب في الشرح المباشر للمتدربين.\n\n"
# "=================================================\n"
# "📌 أولًا: قواعد عامة إلزامية (لا يُسمح بتجاهلها)\n"
# "=================================================\n"
# "1) ابدأ دائمًا بجملة واضحة تُحدد الفكرة الأساسية للمحور.\n"
# "2) أضف مقدمة تمهيدية قصيرة تربط المحور الحالي بالمحور السابق.\n"
# "3) امنع أي انحراف عن العنوان؛ أي محتوى جانبي يتم توظيفه فقط لخدمة السياق.\n"
# "4) لا تكرر الأفكار؛ الفقرات المتشابهة تُدمج في نقطة واحدة متماسكة.\n"
# "5) استخدم لغة واقعية مباشرة، بدون عبارات شعاراتية أو إنشائية.\n"
# "6) الجملة الواحدة لا تتجاوز 20 كلمة قدر الإمكان.\n"
# "7) لا تضع روابط أو URLs داخل النص نهائيًا.\n"
# "8) أي عنصر يتم ذكره (مفهوم، خاصية، نوع، مبدأ) يجب شرحه، "
# "ولا يُسمح بالاكتفاء بذكره فقط.\n\n"
# "=================================================\n"
# "📌 ثانيًا: تنظيم وبناء المحتوى داخل كل محور\n"
# "=================================================\n"
# "1) المحتوى يجب أن يكون منسقًا ومنظمًا بصريًا، "
# "وليس مجرد سطور متتابعة غير مهيكلة.\n"
# "2) لا تدمج التعريف، الأهمية، والمبادئ في فقرة واحدة.\n"
# "3) عند ذكر الأهمية:\n"
# " - يجب شرحها باستفاضة.\n"
# " - يمكن أن تكون في صورة نقاط مرقمة (1، 2، 3...).\n"
# " - تبدأ بجملة تمهيدية توضح لماذا هذا المحور مهم في السياق التدريبي.\n"
# "4) عند وجود خصائص أو سمات:\n"
# " - تُعرض بنظام نقاط مرقمة.\n"
# " - يتم شرح كل خاصية شرحًا واضحًا ومفصلًا.\n"
# "5) عند وجود أنواع أو تصنيفات:\n"
# " - يجب شرح كل نوع، وليس مجرد ذكر الأسماء.\n"
# "6) عند وجود محور تاريخي:\n"
# " - يتم عرض المحتوى بتسلسل زمني واضح.\n"
# " - يشمل الفترات القديمة والحديثة.\n"
# " - يتم شرح كل مرحلة زمنية وسياقها.\n"
# "7) يمكن استخدام (أولًا، ثانيًا، ثالثًا) "
# "عند تناول أكثر من فترة زمنية أو أكثر من فرع رئيسي.\n"
# "8) يجب التركيز على المحور تركيزا صارما وعدم الخوض فى مواضيع اخره داخله لان ذلك سيسبب فى تكرار وايضا "
# "عند تناول محور عن الادوات او التقنيات يجب التركيز عليها مع شرح كل اداة وطرق استخدامها وعدم الاكتفاء باداة او تقنية واحدة واظهر التنوع\n وعندما يكون محور عن امثلة يجب ذكر امثلة واقعية حقيقية مع ذكر الامثلة مفصلة والتركيز عليها.\n\n"
# "=================================================\n"
# "📌 ثالثًا: الأساليب الممكن استخدامها (حسب الحاجة)\n"
# "=================================================\n"
# "- تعريف المفهوم أو المهارة.\n"
# "- أهمية الموضوع في السياق التدريبي.\n"
# "- المبادئ أو الأسس النظرية المرتبطة بالمحور.\n"
# "- تطبيق عملي واحد على الأقل (سيناريو أو حالة واقعية قصيرة).\n"
# "- خلاصة تربط المحور بالمحور أو المهارة التالية.\n"
# "- يُستخدم هذا الترتيب فقط عندما يخدم طبيعة المحور.\n\n"
# "=================================================\n"
# "📌 رابعًا: التوثيق والمصادر\n"
# "=================================================\n"
# "1) توثيق جميع الأفكار يكون في نهاية المحور فقط.\n"
# "2) استخدام نمط APA الإصدار السابع حصريًا.\n"
# "3) المصادر يجب أن تكون:\n"
# " - كتب علمية أو مراجع أكاديمية.\n"
# " - ملفات PDF وأبحاث علمية.\n"
# " - مصادر عربية وأجنبية (مسموح بالاثنين).\n"
# " - مسموح بمصدر واحد انجليزيا على الاكثر والاغلب عربية.\n"
# "4) يُمنع استخدام مواقع عامة كمصدر وحيد دون أصل علمي.\n"
# "5) يمنع وضع المراجع فى generated_content.\n"
# "6) يجب أن تذكر المصدر هل هو كتاب او pdf او موقع اكاديمى لازم تكتب جنب كل مصدر نوعه.\n"
# "6) يجب أن تكون المصادر مرتبطة مباشرة بمحتوى المحور.\n\n"
# "=================================================\n"
# "📌 INPUT DATA\n"
# "=================================================\n"
# "Course Title: {course_title}\n"
# "Unit: {unit_title}\n"
# "Topic: {topic_title}\n"
# "Subtopic: {subtopic_title}\n"
# "Subtopic Description: {subtopic_description}\n"
# "Scraped content (reference only):\n"
# "{combined_scraped_texts}\n\n"
# "=================================================\n"
# "📌 OUTPUT FORMAT (MANDATORY)\n"
# "=================================================\n"
# "Return ONLY a valid JSON object (parsable by json.loads):\n"
# "{\n"
# ' "generated_content": "Final well-structured Arabic academic content",\n'
# ' "sources": ["(Author, Year). Title. Publisher.", "(Author, Year). Title. Source."]\n'
# "}\n\n"
# "=================================================\n"
# "📌 FINAL REMINDER\n"
# "=================================================\n"
# "- الهدف النهائي: محتوى يستطيع المدرب استخدامه مباشرة في الشرح.\n"
# "- أي عنصر مذكور يجب شرحه بوضوح.\n"
# "- التنظيم والتنسيق أولوية قصوى.\n"
# "- يجب التركيز على المحور وعدم الخروج عن موضوعه وتنظيم الكلام عنه وشرحه باستفاضة.\n"
# "- عدم وضع المصادر والمراجع مع الكونتنت يجب ان يكونوا منفصلين فى sources."
# # "اعتمد في تسلسل المحتوى على ما تم شرحه في المحور السابق: {previous_context} لتجنب التكرار وتحقيق الترابط المنطقي."
# ),
# expected_output="JSON with generated_content and sources",
# agent=course_writer_agent,
# )