| from crewai import Agent, Task, Crew, Process, LLM |
| import os |
| import json |
| from modules import bloom_taxonomy_2, objectives_dimensions, llm_g |
| from schemas import LearningObjectivesOutput |
|
|
|
|
| def get_bloom_verb(level: str) -> str: |
| """Returns verbs from the given Bloom's taxonomy level.""" |
|
|
| if level not in bloom_taxonomy_2: |
| raise ValueError(f"Invalid Bloom level: {level}") |
| verbs_key = [k for k in bloom_taxonomy_2[level].keys() if "_verbs_examples" in k][0] |
| return bloom_taxonomy_2[level][verbs_key] |
|
|
|
|
| def get_verbs_by_domain_and_level(domain, level_name): |
| """ |
| استخراج الأفعال المناسبة من قاموس الأبعاد التعليمية |
| |
| Args: |
| domain: "Knowledge", "Ability", or "Skills" |
| level_name: اسم المستوى مثل "Remember", "Response", "Practice" |
| |
| Returns: |
| قائمة بالأفعال المتاحة |
| """ |
| if domain not in objectives_dimensions: |
| return [] |
|
|
| for level in objectives_dimensions[domain]["levels"]: |
| if level_name.lower() in level["level_name"].lower(): |
| return level["verbs_examples"] |
|
|
| return [] |
|
|
|
|
| def objectives_generator(): |
| model=llm_g() |
| return Agent( |
| role="Expert Learning Objectives Designer (Instructional Design Specialist)", |
| goal=( |
| "Design a comprehensive list of clear, measurable, and achievable learning objectives in Arabic " |
| "for each subtopic in the training curriculum. Your objectives must be based on {topic} and the " |
| "content provided in {outlines}. " |
| "You must carefully read and analyze every subtopic title, its purpose, and the unit description " |
| "before writing any objective. " |
| "Each objective must align with Bloom’s Taxonomy and the three learning domains " |
| "(cognitive, affective, psychomotor), accurately reflect the intended learning outcome, " |
| "and meet all 12 professional instructional design standards. " |
| "**Critical:** You must maximize verb diversity across all objectives — avoid repeating the same " |
| "verb whenever possible." |
| ), |
| |
| backstory=( |
| "You are an expert instructional designer with deep experience in creating professional training programs. " |
| "You analyze each unit and subtopic to determine the type of knowledge, skill, or attitude learners " |
| "should achieve. " |
| "Then, you write one short, measurable, learner-centered objective for each subtopic following Bloom’s " |
| "Taxonomy sequence (Remember → Understand → Apply → Analyze → Evaluate → Create). " |
| "**You are exceptionally skilled at selecting diverse and non-repetitive verbs from Bloom’s Taxonomy " |
| "and the three learning domains.** " |
| "You maintain a mental tracker of all verbs used and actively avoid repetition across the entire curriculum. " |
| "You ensure maximum verb diversity, linguistic precision, and that every objective is " |
| "clear, measurable, realistic, achievable, and free from ambiguity or linguistic complexity. " |
| "Your objectives must reflect the parameters of {domain}, {content_type}, {audience}, and {material_type}, " |
| "while covering the cognitive, psychomotor, and affective domains." |
| ), |
| llm=model, |
| verbose=True, |
| max_iter=100, |
| ) |
|
|
|
|
| def objectives_task(objectives_agent): |
| return Task( |
| description=( |
| "You have a complete and well-structured training curriculum provided in outlines: {outlines} and units details: {units}. " |
| "Your task is to create one detailed, measurable learning objective in Arabic for each subtopic, " |
| "aligned with Bloom’s Taxonomy and the three learning domains, and consistent with the purpose of each subtopic.\n\n" |
| "### Step-by-Step Process\n" |
| "1. Read the curriculum overview to understand the full learning journey.\n" |
| "2. **Before you begin, review the complete list of Bloom’s action verbs and the three domains for each level to plan maximum diversity.**\n" |
| "3. **Create a mental or written record of verbs as you use them to avoid repetition.**\n" |
| "4. For each unit:\n" |
| " a. Analyze the unit description to understand the learning scope and intended outcomes.\n" |
| " b. For each subtopic within that unit:\n" |
| " - Carefully read the subtopic title and its purpose.\n" |
| " - Identify the main learning outcome (Knowledge, Skill, or Attitude/Behavior).\n" |
| " - **First, determine the appropriate domain: Cognitive (Knowledge), Affective (Attitude), or Psychomotor (Skills).**\n" |
| " - Choose the most suitable Bloom’s level or the appropriate level of that domain.\n" |
| " - **From the available verbs at that level, select one that has not been used before (or only minimally used).**\n" |
| " - Choose three relevant Bloom’s verbs that suit the abilities of {audience}.\n" |
| " - Write one measurable learning objective in Arabic that accurately reflects the subtopic’s purpose.\n" |
| " - **Track the chosen verb to prevent reusing it in later objectives.**\n\n" |
| "### Requirements for the Three Learning Domains\n" |
| "**Objectives must cover the three domains in a balanced way:**\n\n" |
| f"**1. Cognitive Domain (Knowledge):**\n" |
| f"{objectives_dimensions['Knowledge']['description']}\n" |
| "**Levels:**\n" |
| + "\n".join( |
| [ |
| f" - {level['level_name']}: {level['description']}\n Verbs: {', '.join(level['verbs_examples'])}" |
| for level in objectives_dimensions["Knowledge"]["levels"] |
| ] |
| ) |
| + "\n\n" |
| f"**2. Affective Domain (Attitude/Ability):**\n" |
| f"{objectives_dimensions['Ability']['description']}\n" |
| "**Levels:**\n" |
| + "\n".join( |
| [ |
| f" - {level['level_name']}: {level['description']}\n Verbs: {', '.join(level['verbs_examples'])}" |
| for level in objectives_dimensions["Ability"]["levels"] |
| ] |
| ) |
| + "\n\n" |
| f"**3. Psychomotor Domain (Skills):**\n" |
| f"{objectives_dimensions['Skills']['description']}\n" |
| "**Levels:**\n" |
| + "\n".join( |
| [ |
| f" - {level['level_name']}: {level['description']}\n Verbs: {', '.join(level['verbs_examples'])}" |
| for level in objectives_dimensions["Skills"]["levels"] |
| ] |
| ) |
| + "\n\n" |
| "### Critical Requirement: Verb Diversity \n" |
| "**This is a top-priority rule that must be followed precisely:**\n\n" |
| "**Verb Non-Repetition Rules:**\n" |
| "1. **Maximize verb diversity** — each objective should ideally use a different verb than all previous ones.\n" |
| "2. **Before selecting a verb, check:** Have I used this verb before? If yes, choose another.\n" |
| "3. **Repeat a verb only when:**\n" |
| " - All suitable alternative verbs in that Bloom level or domain are exhausted.\n" |
| " - The subtopic’s content explicitly requires that verb for accuracy.\n" |
| " - You can justify why no other verb fits.\n" |
| "4. **Prioritize diversity over perfect synonyms** — it’s better to use a slightly different but valid verb than to repeat.\n" |
| "5. **Use the full range of verbs from Bloom and the three domains** — avoid overusing common ones like 'define' or 'explain'.\n" |
| "6. **Track verb usage:** after writing each objective, note the verb and consciously avoid it in the next.\n" |
| "7. **If repetition is necessary:**\n" |
| " - Space it out by at least 3–5 objectives.\n" |
| " - Add a justification note in your internal reasoning.\n" |
| " - Try using it in a different context or content area.\n\n" |
| "### The 12 Mandatory Design Standards — Each Objective Must Meet All\n" |
| "**Based on the detailed objectives reference document:**\n\n" |
| "1. **Linked to the general goal:**\n" |
| " - Every objective must connect to the course’s overall goal.\n" |
| " - Example: If the general goal is 'Understand the concept of e-learning', " |
| "the specific objective could be 'The trainee accurately defines e-learning.'\n\n" |
| "2. **Measurable:**\n" |
| " - Objectives must be assessable using measurable performance indicators or outcomes.\n" |
| " - Correct: 'The trainee compares synchronous and asynchronous learning accurately.'\n" |
| " - Incorrect: 'The trainee understands e-learning.' (Not measurable)\n\n" |
| "3. **Achievable:**\n" |
| " - Realistic, suitable for learner ability and course duration.\n" |
| " - Correct: 'The trainee applies the steps to create a learning management account.'\n" |
| " - Incorrect: 'The trainee develops a full e-learning system in one hour.' (Unrealistic)\n\n" |
| "4. **Covers all three domains (Cognitive, Psychomotor, Affective):**\n" |
| " - Cognitive: 'The trainee defines e-learning accurately.'\n" |
| " - Psychomotor: 'The trainee practices using LMS assessment tools.'\n" |
| " - Affective: 'The trainee demonstrates interest in participating in e-learning activities.'\n\n" |
| "5. **Aligned with Bloom’s hierarchy:**\n" |
| " - Objectives must progress logically from lower to higher levels (Remember → Create).\n\n" |
| "6. **Clarity and precision:** Objective must be completely clear and specific.\n\n" |
| "7. **Free from ambiguity:** No vague or overly complex phrasing.\n\n" |
| "8. **Vocabulary clarity:** All terms must be understandable to {audience}.\n\n" |
| "9. **Single, focused goal:** Each objective expresses only one learning outcome.\n" |
| " - Correct: 'The trainee identifies the components of a virtual classroom.'\n" |
| " - Incorrect: 'The trainee identifies and applies virtual classroom components.'\n\n" |
| "10. **Realistic and feasible:** Achievable within program time and resources.\n\n" |
| "11. **Consistent with program outcomes:** Must align with the general and specific learning outcomes.\n\n" |
| "12. **Content-linked:** Directly related to the unit or module content.\n\n" |
| "### Objective Writing Rules\n" |
| "- One objective per subtopic — no more, no less.\n" |
| "- Each must directly and precisely reflect the subtopic’s purpose.\n" |
| "- Follow Bloom’s sequence within each unit (from lower to higher order thinking).\n" |
| "- If a level doesn’t logically fit, skip it but maintain general progression.\n" |
| "- You may combine two levels (e.g., Understand + Apply) if justified by subtopic purpose.\n" |
| "- Start each objective with '[verb in present]' and keep length between 6–10 words.\n" |
| "- Use verbs suitable for {audience} — e.g., children cannot 'evaluate' or 'analyze' like professionals.\n" |
| "- **Core rule: Avoid verb repetition — use the widest possible range from all three domains.**\n" |
| "- Ensure objectives are **measurable** and **achievable**.\n" |
| "- Maintain linguistic clarity — no vague or double meanings.\n" |
| "- Each objective must express only one precise learning outcome.\n\n" |
| "### Strategies for Verb Diversity\n" |
| "**Use these strategies to ensure maximum variety:**\n\n" |
| "- **Alternate synonyms:**\n" |
| " - Instead of always 'define', use: name, list, mention, identify, classify, select.\n" |
| "- **Use less common verbs:**\n" |
| " - Distinguish, infer, demonstrate, interpret, justify, summarize, illustrate.\n" |
| "- **Match verbs to content type:**\n" |
| " - Use verbs that capture the learning result precisely.\n" |
| "- **Consult the full domain verb lists** (above) with 5–7 verbs per level.\n" |
| "- **Distribute objectives across the three domains** — avoid focusing only on the cognitive domain.\n\n" |
| "### Examples of Correct and Incorrect Objectives\n\n" |
| "**Correct Examples (Good verb diversity and domain balance):**\n" |
| "1. (Cognitive - Remember): The trainee lists five types of e-learning platforms.\n" |
| "2. (Cognitive - Understand): The trainee distinguishes between various digital assessment tools.\n" |
| "3. (Cognitive - Apply): The trainee applies active learning strategies in the classroom.\n" |
| "4. (Cognitive - Understand): The trainee infers the main benefits of blended learning.\n" |
| "5. (Psychomotor - Practice): The trainee practices designing an interactive learning activity.\n" |
| "6. (Affective - Respond): The trainee actively participates in collaborative learning discussions.\n" |
| "7. (Cognitive - Analyze): The trainee compares different instructional design models.\n" |
| "8. (Psychomotor - Adapt): The trainee adjusts learning activities to meet learner needs.\n\n" |
| "**Incorrect Examples (Verb repetition — avoid this):**\n" |
| "1. The trainee defines the types of e-learning platforms.\n" |
| "2. The trainee defines digital assessment tools.\n" |
| "3. The trainee defines active learning strategies.\n" |
| "4. The trainee defines blended learning benefits.\n" |
| "5. The trainee defines steps of activity design.\n\n" |
| "**Unclear or Unmeasurable Objectives:**\n" |
| "- 'The trainee understands e-learning.' (Vague, not measurable)\n" |
| "- 'The trainee learns how to use tools.' (Unclear — which tools?)\n" |
| "- 'The trainee becomes an expert in instructional design.' (Unrealistic, not measurable)\n\n" |
| "**Improved Versions:**\n" |
| "- 'The trainee accurately defines e-learning.'\n" |
| "- 'The trainee effectively uses LMS tools.'\n" |
| "- 'The trainee applies instructional design principles to create a learning unit.'\n\n" |
| "### Critical Quality Checklist — Verify Before Finalizing Each Objective:\n" |
| "1. ✓ Is it clear and accurately expresses the intended outcome?\n" |
| "2. ✓ Does it align with a Bloom’s level or learning domain?\n" |
| "3. ✓ Is it free from ambiguity?\n" |
| "4. ✓ Is all vocabulary appropriate for {audience}?\n" |
| "5. ✓ Does it express only one learning outcome?\n" |
| "6. ✓ Is it measurable through observable performance?\n" |
| "7. ✓ Is it realistic and achievable?\n" |
| "8. ✓ Does it align with the overall outcomes?\n" |
| "9. ✓ Is it directly linked to the subtopic content?\n" |
| "10. ✓ Is it sequenced logically (simple → complex)?\n" |
| "11. ✓ Is it suitable for the learners’ level?\n" |
| "12. ✓ Do all objectives collectively cover knowledge, skills, and attitudes?\n" |
| "**13. Verb Check: Have you reused this verb? If yes, can you replace it?**\n" |
| "**14. Domain Check: Are the objectives balanced across all three domains?**\n\n" |
| "### Self-Reflection Requirement\n" |
| "After generating all objectives for a unit, pause and evaluate:\n" |
| "- Do objectives progress logically through Bloom’s levels?\n" |
| "- **How many unique verbs did you use? Any repetition?**\n" |
| "- **Can any repeated verbs be replaced with alternatives?**\n" |
| "- Are verbs diverse and contextually appropriate?\n" |
| "- **Do objectives cover all three domains evenly?**\n" |
| "- Can an external evaluator assess each objective clearly?\n" |
| "- Are all objectives realistic for {audience} and course duration?\n\n" |
| "### Final Verification: Verb Diversity & Domain Balance\n" |
| "**Before submitting your final output:**\n" |
| "1. Count how many times each verb appears.\n" |
| "2. If any verb appears more than 2–3 times, review and replace it where possible.\n" |
| "3. Aim for at least 70–80% unique verbs across the entire curriculum.\n" |
| "4. Keep a mental record of verb use for ongoing awareness.\n" |
| "5. **Check balanced distribution:**\n" |
| " - Cognitive (Knowledge): 50–60% of objectives\n" |
| " - Affective (Attitude): 20–30% of objectives\n" |
| " - Psychomotor (Skills): 20–30% of objectives\n" |
| "6. If imbalance occurs, revisit and adjust classifications.\n\n" |
| "### Domain-Specific Guidelines\n\n" |
| "**When writing Cognitive (Knowledge) objectives:**\n" |
| "- Use for topics focused on information, understanding, applying, analyzing, evaluating, or creating.\n" |
| "- Examples: 'The trainee defines...', 'The trainee compares...', 'The trainee designs...'.\n\n" |
| "**When writing Affective (Attitude) objectives:**\n" |
| "- Use for topics involving values, emotions, interests, or behaviors.\n" |
| "- Examples: 'The trainee demonstrates interest in...', 'The trainee participates actively...', 'The trainee commits to...'.\n\n" |
| "**When writing Psychomotor (Skills) objectives:**\n" |
| "- Use for topics requiring physical, technical, or procedural performance.\n" |
| "- Examples: 'The trainee practices...', 'The trainee performs...', 'The trainee innovates...'.\n\n" |
| "### Final Important Notes\n" |
| "- **Top Priority:** Verb diversity and balanced domain distribution.\n" |
| "- **Quality over quantity:** One well-crafted, diverse objective is better than several repetitive ones.\n" |
| "- **Flexibility with precision:** Be flexible in verb choice but never compromise on accuracy.\n" |
| "- **Continuous review:** Revisit objectives regularly for diversity and balance.\n" |
| "- **Context matters:** Always choose the verb that best reflects what the learner should achieve in that specific subtopic.\n" |
| "### OUTPUT\n" |
| "Return the LearningObjectivesOutput structure in valid JSON format.\n\n" |
| ), |
| expected_output="""JSON object with this structure: |
| { |
| "objectives": [ |
| { |
| "unit": "Unit title", |
| "unit_description": "Brief summary of the unit scope", |
| "subtopic": "subtopic title", |
| "module_description": "Brief summary of what this subtopic covers", |
| "level": "Bloom's level assigned based on subtopic analysis", |
| "verbs": ["verb1", "verb2", "verb3"], |
| "objective": "One measurable Arabic objective" |
| } |
| ] |
| }""", |
| output_json=LearningObjectivesOutput, |
| agent=objectives_agent, |
| human_input=False, |
| ) |
|
|