File size: 2,070 Bytes
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 | from crewai import Agent, Task, Crew, Process, LLM
import os
import json
from modules import llm
from schemas import ExpandedTopicsList
# ---------------------------
# === Agent 2: Expander to 20 Topics ===
# ---------------------------
def structure_agent():
model = llm()
return Agent(
role="Expander to 20 Topics Agent (Structure & Relations)",
goal=(
"استلم قائمة المحاور المبدئية من Agent1. راجعها لإزالة التكرار ودمج المتقارب منها، "
"ثم أكمل ووسع القائمة لتصل إلى **بالضبط 20 محورًا** مترابطًا. "
"لكل محور اكتب وصفًا تفصيليًا 3-5 سطور يشرح محتوى المحور، ولماذا هو مهم، "
"واذكر علاقات واضحة بين المحاور (مثال: 'مرتبط بـ X لأن...'، أو 'يأتي بعد Y لأنه...'). "
"لا تقسم الوحدات بعد — فقط اضمن اتساق وترابط المحاور الـ20."
),
backstory=(
"أنت مصمم تعليمي بارع في بناء التسلسل المنطقي بين الموضوعات. مهمتك تحويل قائمة أولية "
"إلى خريطة معرفية من 20 محورًا."
),
llm=model,
allow_delegation=False,
verbose=True,
)
def structure_task(structure_agent):
return Task(
description="تنظيف القائمة السابقة وتوسيعها لتصل إلى 20 محورًا مترابطًا مع وصف مفصل.",
expected_output=(
"A JSON list of exactly 20 items:\n"
"[\n"
' { "title": "string (topic title)",\n'
' "description": "string (3–5 lines)",\n'
' "relation": "string (e.g., related to X because...)" }\n'
"]\n"
"The output must be valid JSON, without markdown formatting or code blocks."
),
output_json=ExpandedTopicsList,
# output_file=os.path.join(output_dir, "expanded_20_topics.json"),
agent=structure_agent,
)
|