Skill: 870021840/teacher-prep (version 1.0.0)

--- name: teacher-prep description: 教师备课助手，用于小学语文教学备课。支持古诗、现代文、寓言、童话等各类课文。当用户提出备课需求时，自动执行：(1)搜索课文相关资料（原文、作者、背景、生字词、段落分析等），生成markdown备课资料；(2)生成教案PPT；(3)生成Word格式课后练习题及参考答案。适用于小学各年级语文备课场景。 --- # 教师备课助手 本技能用于自动化完成小学语文教学备课的全流程工作，支持古诗、现代文、寓言、童话、说明文等各类课文类型。 ## 工作流程 当用户提出备课需求（如"备课三年级上册《秋天的雨》"或"备课二年级古诗《村居》"）时，按以下步骤执行： ### 第一步：识别课文类型并搜索资料 根据课文名称自动判断类型： - **古诗/古诗词**：有朝代和作者，如《村居》《咏柳》 - **现代文**：散文、记叙文、说明文等，如《秋天的雨》《富饶的西沙群岛》 - **寓言/童话**：如《坐井观天》《卖火柴的小女孩》 使用 Tavily 搜索工具获取： - 课文原文 - 作者介绍 - 创作背景/写作背景 - 生字词（拼音、解释） - 段落大意/诗句解析 - 主题思想/中心思想 - 写作特点/艺术特色 ### 第二步：生成备课资料 根据课文类型生成相应内容： **古诗类：** - 原文（带拼音） - 作者介绍 - 字词注释 - 诗句翻译 - 诗歌赏析 **现代文类：** - 课文原文 - 作者介绍 - 生字词表（拼音、部首、组词） - 段落划分与段意 - 主要内容概括 - 写作特点分析 **寓言/童话类：** - 故事原文 - 出处/作者 - 生字词 - 故事情节梳理 - 寓意/道理 保存为：`备课资料_<课文名>.md` ### 第三步：生成教案 PPT 根据课文类型设计教案结构： **通用教案框架：** 1. 教学目标（知识、能力、情感） 2. 教学重难点 3. 教学准备 4. 教学过程 - 导入（激发兴趣，引入新课） - 新授（初读感知、精读理解） - 巩固（练习、讨论、拓展） - 小结（总结收获） - 作业布置 5. 板书设计 保存为：`教案_<课文名>.pptx` ### 第四步：生成课后练习题 根据课文类型设计分层练习： **基础题：** - 生字词（看拼音写词语、选择正确读音） - 课文内容填空 - 词语解释 **理解题：** - 句子理解 - 段落大意概括 - 中心思想体会 **拓展题：** - 仿写/续写 - 对比阅读 - 创意表达 保存为：`练习题_<课文名>.docx`（含参考答案） ## 输出文件 完成备课任务后，生成以下三个文件： 1. `备课资料_<课文名>.md` - Markdown 格式备课资料 2. `教案_<课文名>.pptx` - PowerPoint 教案 3. `练习题_<课文名>.docx` - Word 格式练习题 ## 依赖工具 - Tavily 搜索（需 TAVILY_API_KEY 环境变量） - python-pptx（生成 PPT） - python-docx（生成 Word 文档） ## 使用示例 **古诗备课：** - 用户说："备课二年级下册古诗《村居》" - 识别为古诗 → 搜索古诗资料 → 生成古诗类型备课资料 **现代文备课：** - 用户说："备课三年级上册《秋天的雨》" - 识别为现代散文 → 搜索课文资料 → 生成现代文类型备课资料 **寓言备课：** - 用户说："备课二年级《坐井观天》" - 识别为寓言故事 → 搜索寓言资料 → 生成寓言类型备课资料

path: scripts/generate_docx.py
content: #!/usr/bin/env python3
"""
生成课后练习题 Word 文档 - 支持多种课文类型
用法: python generate_docx.py <课文名> <课文类型> [备课资料文件路径]
"""

import sys
from docx import Document
from docx.shared import Pt, Inches, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.oxml.ns import qn

def set_chinese_font(run, font_name='SimSun', size=12, bold=False):
    """设置中文字体"""
    font = run.font
    font.name = font_name
    font.size = Pt(size)
    font.bold = bold
    run._element.rPr.rFonts.set(qn('w:eastAsia'), font_name)

def create_exercises_poem(lesson_name, doc):
    """生成古诗类练习题"""
    
    # 一、基础积累
    heading = doc.add_heading('一、基础积累', level=1)
    for run in heading.runs:
        set_chinese_font(run, 'SimHei', 14, True)
    
    p = doc.add_paragraph()
    run = p.add_run(f'1. 默写《{lesson_name}》')
    set_chinese_font(run, 'SimSun', 12)
    
    p = doc.add_paragraph()
    run = p.add_run('（请在此处默写全诗）')
    set_chinese_font(run, 'SimSun', 11)
    p.paragraph_format.left_indent = Inches(0.3)
    
    p = doc.add_paragraph()
    run = p.add_run('2. 给下列加点字注音')
    set_chinese_font(run, 'SimSun', 12)
    
    p = doc.add_paragraph()
    run = p.add_run('（    ）（    ）（    ）（    ）')
    set_chinese_font(run, 'SimSun', 11)
    p.paragraph_format.left_indent = Inches(0.3)
    
    p = doc.add_paragraph()
    run = p.add_run('3. 看拼音写词语')
    set_chinese_font(run, 'SimSun', 12)
    
    p = doc.add_paragraph()
    run = p.add_run('（      ）（      ）（      ）')
    set_chinese_font(run, 'SimSun', 11)
    p.paragraph_format.left_indent = Inches(0.3)
    
    # 二、理解感悟
    heading = doc.add_heading('二、理解感悟', level=1)
    for run in heading.runs:
        set_chinese_font(run, 'SimHei', 14, True)
    
    p = doc.add_paragraph()
    run = p.add_run('4. 解释下列词语的意思')
    set_chinese_font(run, 'SimSun', 12)
    
    for i in range(1, 4):
        p = doc.add_paragraph()
        run = p.add_run(f'（{i}）______________________________')
        set_chinese_font(run, 'SimSun', 11)
        p.paragraph_format.left_indent = Inches(0.3)
    
    p = doc.add_paragraph()
    run = p.add_run('5. 写出诗句的意思')
    set_chinese_font(run, 'SimSun', 12)
    
    for i in range(1, 3):
        p = doc.add_paragraph()
        run = p.add_run(f'（{i}）______________________________________________')
        set_chinese_font(run, 'SimSun', 11)
        p.paragraph_format.left_indent = Inches(0.3)
    
    p = doc.add_paragraph()
    run = p.add_run('6. 这首诗表达了诗人怎样的情感？')
    set_chinese_font(run, 'SimSun', 12)
    
    p = doc.add_paragraph()
    run = p.add_run('________________________________________________________________')
    set_chinese_font(run, 'SimSun', 11)
    p.paragraph_format.left_indent = Inches(0.3)

def create_exercises_modern(lesson_name, doc):
    """生成现代文类练习题"""
    
    # 一、基础积累
    heading = doc.add_heading('一、基础积累', level=1)
    for run in heading.runs:
        set_chinese_font(run, 'SimHei', 14, True)
    
    p = doc.add_paragraph()
    run = p.add_run('1. 看拼音写词语')
    set_chinese_font(run, 'SimSun', 12)
    
    for i in range(1, 4):
        p = doc.add_paragraph()
        run = p.add_run(f'（{i}）（      ）（      ）（      ）')
        set_chinese_font(run, 'SimSun', 11)
        p.paragraph_format.left_indent = Inches(0.3)
    
    p = doc.add_paragraph()
    run = p.add_run('2. 给加点字选择正确的读音，打"√"')
    set_chinese_font(run, 'SimSun', 12)
    
    p = doc.add_paragraph()
    run = p.add_run('（    ）  （    ）  （    ）  （    ）')
    set_chinese_font(run, 'SimSun', 11)
    p.paragraph_format.left_indent = Inches(0.3)
    
    p = doc.add_paragraph()
    run = p.add_run('3. 比一比，再组词')
    set_chinese_font(run, 'SimSun', 12)
    
    p = doc.add_paragraph()
    run = p.add_run('（    ）——（    ）  （    ）——（    ）')
    set_chinese_font(run, 'SimSun', 11)
    p.paragraph_format.left_indent = Inches(0.3)
    
    # 二、理解感悟
    heading = doc.add_heading('二、理解感悟', level=1)
    for run in heading.runs:
        set_chinese_font(run, 'SimHei', 14, True)
    
    p = doc.add_paragraph()
    run = p.add_run('4. 根据课文内容填空')
    set_chinese_font(run, 'SimSun', 12)
    
    for i in range(1, 4):
        p = doc.add_paragraph()
        run = p.add_run(f'（{i}）______________________________________________')
        set_chinese_font(run, 'SimSun', 11)
        p.paragraph_format.left_indent = Inches(0.3)
    
    p = doc.add_paragraph()
    run = p.add_run('5. 读句子，回答问题')
    set_chinese_font(run, 'SimSun', 12)
    
    p = doc.add_paragraph()
    run = p.add_run('（1）________________________________________________________________')
    set_chinese_font(run, 'SimSun', 11)
    p.paragraph_format.left_indent = Inches(0.3)
    
    p = doc.add_paragraph()
    run = p.add_run('________________________________________________________________')
    set_chinese_font(run, 'SimSun', 11)
    p.paragraph_format.left_indent = Inches(0.3)
    
    p = doc.add_paragraph()
    run = p.add_run('6. 概括课文主要内容')
    set_chinese_font(run, 'SimSun', 12)
    
    p = doc.add_paragraph()
    run = p.add_run('________________________________________________________________')
    set_chinese_font(run, 'SimSun', 11)
    p.paragraph_format.left_indent = Inches(0.3)
    
    p = doc.add_paragraph()
    run = p.add_run('________________________________________________________________')
    set_chinese_font(run, 'SimSun', 11)
    p.paragraph_format.left_indent = Inches(0.3)

def create_exercises_fable(lesson_name, doc):
    """生成寓言/童话类练习题"""
    
    # 一、基础积累
    heading = doc.add_heading('一、基础积累', level=1)
    for run in heading.runs:
        set_chinese_font(run, 'SimHei', 14, True)
    
    p = doc.add_paragraph()
    run = p.add_run('1. 看拼音写词语')
    set_chinese_font(run, 'SimSun', 12)
    
    p = doc.add_paragraph()
    run = p.add_run('（      ）（      ）（      ）（      ）')
    set_chinese_font(run, 'SimSun', 11)
    p.paragraph_format.left_indent = Inches(0.3)
    
    p = doc.add_paragraph()
    run = p.add_run('2. 给下列词语选择正确的解释')
    set_chinese_font(run, 'SimSun', 12)
    
    for i in range(1, 4):
        p = doc.add_paragraph()
        run = p.add_run(f'（{i}）__________________（    ）')
        set_chinese_font(run, 'SimSun', 11)
        p.paragraph_format.left_indent = Inches(0.3)
    
    # 二、理解感悟
    heading = doc.add_heading('二、理解感悟', level=1)
    for run in heading.runs:
        set_chinese_font(run, 'SimHei', 14, True)
    
    p = doc.add_paragraph()
    run = p.add_run('3. 根据故事内容填空')
    set_chinese_font(run, 'SimSun', 12)
    
    p = doc.add_paragraph()
    run = p.add_run('故事的起因：______________________________________________')
    set_chinese_font(run, 'SimSun', 11)
    p.paragraph_format.left_indent = Inches(0.3)
    
    p = doc.add_paragraph()
    run = p.add_run('故事的经过：______________________________________________')
    set_chinese_font(run, 'SimSun', 11)
    p.paragraph_format.left_indent = Inches(0.3)
    
    p = doc.add_paragraph()
    run = p.add_run('故事的结果：______________________________________________')
    set_chinese_font(run, 'SimSun', 11)
    p.paragraph_format.left_indent = Inches(0.3)
    
    p = doc.add_paragraph()
    run = p.add_run('4. 这个故事告诉我们什么道理？')
    set_chinese_font(run, 'SimSun', 12)
    
    p = doc.add_paragraph()
    run = p.add_run('________________________________________________________________')
    set_chinese_font(run, 'SimSun', 11)
    p.paragraph_format.left_indent = Inches(0.3)
    
    p = doc.add_paragraph()
    run = p.add_run('5. 你喜欢故事中的谁？为什么？')
    set_chinese_font(run, 'SimSun', 12)
    
    p = doc.add_paragraph()
    run = p.add_run('________________________________________________________________')
    set_chinese_font(run, 'SimSun', 11)
    p.paragraph_format.left_indent = Inches(0.3)

def create_exercises(lesson_name, lesson_type, content_file=None):
    """生成课后练习题 Word 文档"""
    
    doc = Document()
    
    # 设置文档默认字体
    style = doc.styles['Normal']
    style.font.name = 'SimSun'
    style._element.rPr.rFonts.set(qn('w:eastAsia'), 'SimSun')
    
    # 标题
    title = doc.add_heading(f'《{lesson_name}》课后练习', level=0)
    title.alignment = WD_ALIGN_PARAGRAPH.CENTER
    for run in title.runs:
        set_chinese_font(run, 'SimHei', 18, True)
    
    # 根据课文类型生成不同练习题
    if lesson_type in ['古诗', '古诗词']:
        create_exercises_poem(lesson_name, doc)
    elif lesson_type in ['寓言', '童话']:
        create_exercises_fable(lesson_name, doc)
    else:
        create_exercises_modern(lesson_name, doc)
    
    # 三、拓展提升（通用）
    heading = doc.add_heading('三、拓展提升', level=1)
    for run in heading.runs:
        set_chinese_font(run, 'SimHei', 14, True)
    
    p = doc.add_paragraph()
    run = p.add_run('7. 联系生活实际，谈谈你的感受或收获')
    set_chinese_font(run, 'SimSun', 12)
    
    p = doc.add_paragraph()
    run = p.add_run('________________________________________________________________')
    set_chinese_font(run, 'SimSun', 11)
    p.paragraph_format.left_indent = Inches(0.3)
    
    p = doc.add_paragraph()
    run = p.add_run('________________________________________________________________')
    set_chinese_font(run, 'SimSun', 11)
    p.paragraph_format.left_indent = Inches(0.3)
    
    p = doc.add_paragraph()
    run = p.add_run('8. 创意表达（画一画、写一写、演一演）')
    set_chinese_font(run, 'SimSun', 12)
    
    p = doc.add_paragraph()
    run = p.add_run('________________________________________________________________')
    set_chinese_font(run, 'SimSun', 11)
    p.paragraph_format.left_indent = Inches(0.3)
    
    # 分页：参考答案
    doc.add_page_break()
    
    title = doc.add_heading(f'《{lesson_name}》参考答案', level=0)
    title.alignment = WD_ALIGN_PARAGRAPH.CENTER
    for run in title.runs:
        set_chinese_font(run, 'SimHei', 18, True)
    
    p = doc.add_paragraph()
    run = p.add_run('（教师根据实际教学情况填写参考答案）')
    set_chinese_font(run, 'SimSun', 12)
    
    # 保存
    output_file = f"练习题_{lesson_name}.docx"
    doc.save(output_file)
    print(f"练习题已生成: {output_file}")
    return output_file

if __name__ == "__main__":
    if len(sys.argv) < 3:
        print("用法: python generate_docx.py <课文名> <课文类型> [备课资料文件路径]")
        print("课文类型: 古诗/现代文/寓言/童话/说明文")
        sys.exit(1)
    
    lesson_name = sys.argv[1]
    lesson_type = sys.argv[2]
    content_file = sys.argv[3] if len(sys.argv) > 3 else None
    
    create_exercises(lesson_name, lesson_type, content_file)


path: scripts/generate_ppt.py
content: #!/usr/bin/env python3
"""
生成教案 PPT - 支持多种课文类型
用法: python generate_ppt.py <课文名> <年级> <课文类型> [备课资料文件路径]
"""

import sys
from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.enum.text import PP_ALIGN, MSO_ANCHOR
from pptx.enum.shapes import MSO_SHAPE
from pptx.dml.color import RGBColor

def create_ppt(lesson_name, grade, lesson_type, content_file=None):
    """基于备课资料生成教案 PPT"""
    
    prs = Presentation()
    prs.slide_width = Inches(13.333)
    prs.slide_height = Inches(7.5)
    
    # 根据课文类型调整副标题
    type_names = {
        '古诗': '古诗教学',
        '古诗词': '古诗教学',
        '现代文': '现代文教学',
        '散文': '散文教学',
        '寓言': '寓言教学',
        '童话': '童话教学',
        '说明文': '说明文教学'
    }
    type_display = type_names.get(lesson_type, '语文教学')
    
    # 第1页：标题页
    slide_layout = prs.slide_layouts[6]  # 空白布局
    slide = prs.slides.add_slide(slide_layout)
    
    # 添加标题背景
    shape = slide.shapes.add_shape(MSO_SHAPE.RECTANGLE, Inches(0), Inches(0), 
                                    prs.slide_width, prs.slide_height)
    shape.fill.solid()
    shape.fill.fore_color.rgb = RGBColor(70, 130, 180)
    shape.line.fill.background()
    
    # 添加标题
    title_box = slide.shapes.add_textbox(Inches(0.5), Inches(2.5), Inches(12.333), Inches(1.5))
    tf = title_box.text_frame
    p = tf.paragraphs[0]
    p.text = f"《{lesson_name}》"
    p.font.size = Pt(54)
    p.font.bold = True
    p.font.color.rgb = RGBColor(255, 255, 255)
    p.alignment = PP_ALIGN.CENTER
    
    # 副标题
    p2 = tf.add_paragraph()
    p2.text = f"{grade} {type_display}教案"
    p2.font.size = Pt(32)
    p2.font.color.rgb = RGBColor(255, 223, 186)
    p2.alignment = PP_ALIGN.CENTER
    p2.space_before = Pt(20)
    
    # 第2页：教学目标
    slide = prs.slides.add_slide(prs.slide_layouts[1])
    slide.shapes.title.text = "教学目标"
    content_shape = slide.placeholders[1]
    tf = content_shape.text_frame
    tf.text = "知识目标："
    p = tf.add_paragraph()
    p.text = "• 认识本课生字，正确、流利地朗读课文"
    p.level = 1
    p = tf.add_paragraph()
    p.text = "• 理解课文内容，掌握重点词语"
    p.level = 1
    p = tf.add_paragraph()
    p.text = "能力目标："
    p = tf.add_paragraph()
    p.text = "• 培养阅读理解能力和语言表达能力"
    p.level = 1
    p = tf.add_paragraph()
    p.text = "情感目标："
    p = tf.add_paragraph()
    p.text = "• 体会课文情感，激发学习兴趣"
    p.level = 1
    
    # 第3页：教学重难点
    slide = prs.slides.add_slide(prs.slide_layouts[1])
    slide.shapes.title.text = "教学重难点"
    content_shape = slide.placeholders[1]
    tf = content_shape.text_frame
    tf.text = "教学重点："
    p = tf.add_paragraph()
    p.text = "• 理解课文主要内容"
    p.level = 1
    p = tf.add_paragraph()
    p.text = "• 掌握重点字词，正确流利朗读"
    p.level = 1
    p = tf.add_paragraph()
    p.text = "教学难点："
    p = tf.add_paragraph()
    p.text = "• 体会课文表达的思想感情"
    p.level = 1
    p = tf.add_paragraph()
    p.text = "• 学习作者的表达方法"
    p.level = 1
    
    # 第4页：教学过程-导入
    slide = prs.slides.add_slide(prs.slide_layouts[1])
    slide.shapes.title.text = "教学过程 - 导入新课"
    content_shape = slide.placeholders[1]
    tf = content_shape.text_frame
    tf.text = "一、创设情境，导入新课（5分钟）"
    p = tf.add_paragraph()
    p.text = "• 谈话导入，激发兴趣"
    p.level = 1
    p = tf.add_paragraph()
    p.text = "• 揭示课题，齐读课题"
    p.level = 1
    p = tf.add_paragraph()
    p.text = "• 简介作者/背景（如需要）"
    p.level = 1
    
    # 第5页：教学过程-初读
    slide = prs.slides.add_slide(prs.slide_layouts[1])
    slide.shapes.title.text = "教学过程 - 初读感知"
    content_shape = slide.placeholders[1]
    tf = content_shape.text_frame
    tf.text = "二、初读课文，整体感知（10分钟）"
    p = tf.add_paragraph()
    p.text = "• 自由朗读课文，标出生字词"
    p.level = 1
    p = tf.add_paragraph()
    p.text = "• 检查生字词认读情况"
    p.level = 1
    p = tf.add_paragraph()
    p.text = "• 指名分段朗读课文"
    p.level = 1
    p = tf.add_paragraph()
    p.text = "• 思考：课文主要讲了什么？"
    p.level = 1
    
    # 第6页：教学过程-精读
    slide = prs.slides.add_slide(prs.slide_layouts[1])
    slide.shapes.title.text = "教学过程 - 精读理解"
    content_shape = slide.placeholders[1]
    tf = content_shape.text_frame
    tf.text = "三、精读课文，深入理解（15分钟）"
    p = tf.add_paragraph()
    p.text = "• 品读重点段落，理解关键词句"
    p.level = 1
    p = tf.add_paragraph()
    p.text = "• 讨论交流，体会情感"
    p.level = 1
    p = tf.add_paragraph()
    p.text = "• 指导有感情地朗读"
    p.level = 1
    p = tf.add_paragraph()
    p.text = "• 学习写作方法（如适用）"
    p.level = 1
    
    # 第7页：教学过程-巩固
    slide = prs.slides.add_slide(prs.slide_layouts[1])
    slide.shapes.title.text = "教学过程 - 巩固拓展"
    content_shape = slide.placeholders[1]
    tf = content_shape.text_frame
    tf.text = "四、总结提升，拓展延伸（10分钟）"
    p = tf.add_paragraph()
    p.text = "• 回顾课文主要内容"
    p.level = 1
    p = tf.add_paragraph()
    p.text = "• 总结学习收获"
    p.level = 1
    p = tf.add_paragraph()
    p.text = "• 拓展阅读/相关练习"
    p.level = 1
    p = tf.add_paragraph()
    p.text = "• 布置课后作业"
    p.level = 1
    
    # 第8页：板书设计
    slide = prs.slides.add_slide(prs.slide_layouts[1])
    slide.shapes.title.text = "板书设计"
    content_shape = slide.placeholders[1]
    tf = content_shape.text_frame
    tf.text = f"《{lesson_name}》"
    p = tf.add_paragraph()
    p.text = ""
    p = tf.add_paragraph()
    p.text = "【主要内容】"
    p = tf.add_paragraph()
    p.text = ""
    p = tf.add_paragraph()
    p.text = "【重点字词】"
    p = tf.add_paragraph()
    p.text = ""
    p = tf.add_paragraph()
    p.text = "【中心思想】"
    
    # 第9页：作业布置
    slide = prs.slides.add_slide(prs.slide_layouts[1])
    slide.shapes.title.text = "作业布置"
    content_shape = slide.placeholders[1]
    tf = content_shape.text_frame
    tf.text = "1. 熟读课文，背诵重点段落（如需要）"
    p = tf.add_paragraph()
    p.text = "2. 抄写生字词，完成课后习题"
    p = tf.add_paragraph()
    p.text = "3. 预习下一课内容"
    p = tf.add_paragraph()
    if lesson_type in ['古诗', '古诗词']:
        p = tf.add_paragraph()
        p.text = "4. 搜集其他相关古诗，读一读"
    else:
        p = tf.add_paragraph()
        p.text = "4. 观察生活中的相关现象，写几句话"
    
    # 保存
    output_file = f"教案_{lesson_name}.pptx"
    prs.save(output_file)
    print(f"PPT 已生成: {output_file}")
    return output_file

if __name__ == "__main__":
    if len(sys.argv) < 4:
        print("用法: python generate_ppt.py <课文名> <年级> <课文类型> [备课资料文件路径]")
        print("课文类型: 古诗/现代文/寓言/童话/说明文")
        sys.exit(1)
    
    lesson_name = sys.argv[1]
    grade = sys.argv[2]
    lesson_type = sys.argv[3]
    content_file = sys.argv[4] if len(sys.argv) > 4 else None
    
    create_ppt(lesson_name, grade, lesson_type, content_file)


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (MEDIUM)