这周主要完成了四种教案生成的分类逻辑,以及prompt的设计。
prompt的设计非常有考究,对于不同种类,不同年龄段的孩子来说都要个性化处理。
教案生成的分类逻辑
1. 纯文本教案生成
纯文本教案生成适用于需要简洁、无格式的教案内容。通过设置plain_text参数为True,系统会生成纯文本格式的教案,去除所有格式标记,如Markdown语法、加粗、斜体、标题、代码块等。
2. 富文本教案生成
富文本教案生成适用于需要结构化、格式化的教案内容。通过设置isRichText参数为True,系统会自动处理Markdown表格、标题、符号等,生成格式化的教案。
3. 语音输入教案生成
语音输入教案生成适用于用户通过语音输入教案需求的情况。系统会根据语音输入的内容,自动补全并生成一份详细的教案,包含教学目标、重点难点、教学方法等字段。
4. 模板教案生成
模板教案生成适用于需要快速生成教案的场景。系统会根据预设的模板,结合用户输入的基本信息,生成结构化的教案内容。
Prompt的设计
Prompt的设计是教案生成的核心,需要根据不同种类和不同年龄段的孩子进行个性化处理。以下是Prompt设计的关键点:
1. 纯文本Prompt
纯文本Prompt要求AI只输出纯文本内容,不要任何格式标记,确保内容简洁明了。
"请严格按照以下要求生成教案:\n"
"- 只输出纯文本内容,不要任何格式标记\n"
"- 不要markdown语法,不要加粗、斜体、标题、代码块等\n"
"- 不要任何符号修饰,只保留自然段落和序号\n"
"- 只输出内容本身,不要输出'markdown'或其它格式说明\n"
"1. 只输出纯文本,不要任何Markdown、不要加粗、不要编号、不要表格、不要任何格式符号。\n"
"2. 每个部分用自然语言分段,标题直接写'一、教学目标'、'二、教学重点与难点'等,不要加#、*、-等符号。\n"
"3. 不要输出任何代码块、不要用任何特殊符号修饰内容。\n"
"4. 多项内容用分号或换行分隔。\n"
"5. 不要输出任何多余的格式或解释。\n"
f"学科:{lesson_data.get('subject', '')}\n"
f"年级:{lesson_data.get('grade', '')}\n"
f"课题:{lesson_data.get('topic', '')}\n"
f"课时长度:{lesson_data.get('duration', 45)}分钟\n"
f"教学目标:{chr(10).join([f'- {obj}' for obj in lesson_data.get('objectives', [])])}\n"
f"重点难点:{lesson_data.get('keyPoints', '')}\n"
f"教学材料:{lesson_data.get('materials', '')}\n"
f"教学方法:{', '.join([self._get_method_label(m) for m in lesson_data.get('methods', [])])}\n"
f"教学步骤框架:{self._format_steps(lesson_data.get('steps', []))}\n"
f"作业布置:{lesson_data.get('homework', '')}\n"
f"教学反思:{lesson_data.get('reflection', '')}\n"
)
2. 富文本Prompt
富文本Prompt要求AI生成结构化、格式化的教案内容,包括Markdown表格、标题、符号等,确保内容清晰可辨。
ystem_prompt = """你是一个专业的教学设计专家。请根据用户提供的教案基础信息,生成详细、专业的教案内容。\n\n请按照以下结构生成教案:\n\n## 一、教学目标\n- 知识目标:学生应掌握的具体知识点和概念\n- 能力目标:学生应培养的技能和能力\n- 情感目标:学生应形成的态度、价值观和情感体验\n\n## 二、教学重点与难点\n- 教学重点:本课需要重点讲解和掌握的内容\n- 教学难点:学生理解和掌握的困难点,需要重点突破的内容\n\n## 三、教学方法与策略\n- 教学方法:采用的具体教学方法(如讲授法、讨论法、实验法等)\n- 教学策略:教学组织形式和实施策略\n- 信息技术应用:多媒体、网络等技术手段的运用\n\n## 四、教学准备\n- 教师准备:教案、课件、教具等\n- 学生准备:预习要求、学具准备等\n- 环境准备:教室布置、设备调试等\n\n## 五、教学过程(详细步骤)\n请按照以下环节设计,每个环节包含具体的教学活动、时间分配、师生互动:\n\n### 1. 导入环节(X分钟)\n- 导入方式和内容\n- 激发学习兴趣的具体方法\n- 引出课题的过渡语\n\n### 2. 新课讲授(X分钟)\n- 知识点的呈现顺序和方式\n- 重点内容的讲解方法\n- 难点的突破策略\n- 师生互动设计\n\n### 3. 巩固练习(X分钟)\n- 练习题目的设计\n- 学生活动的组织\n- 反馈和指导方法\n\n### 4. 总结提升(X分钟)\n- 知识梳理和总结\n- 能力提升和拓展\n- 情感升华\n\n## 六、板书设计\n- 板书的整体布局\n- 重点内容的突出方式\n- 板书的逻辑结构\n\n## 七、作业设计\n- 基础作业:巩固基本知识和技能\n- 拓展作业:提高和发展性作业\n- 实践作业:联系实际的应用性作业\n\n## 八、教学反思\n- 教学效果预期\n- 可能出现的问题及对策\n- 改进建议\n\n要求:\n1. 内容要符合教育教学规律和学科特点\n2. 教学目标要具体、明确、可测量\n3. 教学过程要详细、具体、可操作\n4. 语言要专业、规范、生动\n5. 体现新课程理念和素质教育要求\n6. 适合指定的年级和学科特点\n7. 注重学生的主体地位和教师的主导作用\n8. 体现因材施教和分层教学理念\n\n请以结构化的方式返回内容,使用Markdown格式,确保各部分内容清晰可辨。"""
messages = [
{"role": "system", "content": system_prompt},
{"role": "user", "content": user_content}
]
logger.info("开始调用DeepSeek API生成教案内容...")
response = self.client.chat.completions.create(
model="deepseek-reasoner",
messages=messages,
temperature=0.2,
max_tokens=4096,
timeout=120
)
logger.error("AI接口调用完成")
logger.error(f"AI原始响应类型: {type(response)}")
logger.error(f"AI原始响应内容: {getattr(response, '__dict__', str(response))}")
if not response.choices or len(response.choices) == 0:
logger.error(f"AI原始响应(choices为空): {getattr(response, '__dict__', str(response))}")
enhanced_data = lesson_data.copy()
enhanced_data['ai_enhanced_content'] = ''
enhanced_data['ai_generation_success'] = False
enhanced_data['ai_error'] = 'AI生成内容为空,请检查输入内容或稍后重试'
return enhanced_data
generated_content = response.choices[0].message.content
if not generated_content:
logger.warning("AI生成内容为空,可能是输入内容无效或API异常")
enhanced_data = lesson_data.copy()
enhanced_data['ai_enhanced_content'] = ''
enhanced_data['ai_generation_success'] = False
enhanced_data['ai_error'] = 'AI生成内容为空,请检查输入内容或稍后重试'
return enhanced_data
3. 语音输入Prompt
语音输入Prompt要求AI根据用户提供的主题或关键词,自动补全并生成一份详细的教案,确保内容全面且符合教学需求。
f"请根据以下主题或关键词,自动补全并生成一份详细、完整、结构化的小学/中学/大学教案。\n"
f"即使信息不全,也要根据常识和经验合理推断和补全所有字段,不能输出'无法确定''请补充信息'等提示性内容。\n"
f"教案必须包含以下字段,每个字段内容详细展开,不少于3句话:\n"
f"【教学课题】\n"
f"【授课教师】\n"
f"【授课课型】\n"
f"【授课时间】\n"
f"【知识与技能】\n"
f"【过程与方法】\n"
f"【情感态度与价值观】\n"
f"【教学重点】\n"
f"【教学难点】\n"
f"【教学方法】\n"
f"【教学准备】\n"
f"【教学过程】\n"
f"【作业设计】\n"
f"【板书设计】\n"
f"【教学反思】\n"
f"所有字段标题必须严格用【字段名】(如【教学目标】)单独一行,不能用其他任何标题格式(如#、##、一、等)。\n"
f"每个字段用【字段名】单独一行作为标题,下一行紧跟内容。\n"
f"不要加粗、不要编号、不要markdown符号、不要输出'详细说明'或'请补充信息'等提示性内容。\n"
f"多项内容用分号或换行分隔。\n"
f"主题或关键词:{lesson_data.get('topic', '')}\n"
4. 模板Prompt
模板Prompt要求AI根据预设的模板,结合用户输入的基本信息,生成结构化的教案内容,确保内容符合教育教学规律和学科特点。
这部分比较复杂,我将在下一个博客中写出