支持湘教版和湘科版《信息科技》教材的一站式备课解决方案。结合《义务教育信息科技课程标准(2022年版)》核心素养理念,自动生成完整备课资料包(五件套)。
默认版本:湘教版。首次使用时询问用户确认;一旦用户在任意会话中说过"湘教版"或"湘科版",将选择永久记录到 USER.md,后续所有会话不再询问,直接使用已记录的版本。
✅ 全 Node.js 实现,可打包共享到 SkillHub。
> 湘教版 vs 湘科版 区别:
> | 项目 | 湘教版 | 湘科版 |
> |------|--------|--------|
> | 每册单元数 | 3个单元 | 4个单元 |
> | 每单元课数 | 4课(共12课) | 4活动(共16活动) |
> | 课程称谓 | "第X课" | "第X活动"(活动=课) |
| 文件 | 格式 | 说明 |
|---|---|---|
| ------ | ------ | ------ |
课件.pptx | PPT | 图文并茂,15页标准结构,深蓝科技风格(pptxgenjs) |
教学设计.docx | Word | 含九章节完整结构(docx,v2深蓝格式,推荐) |
学生任务单.docx | Word | 含预习任务、课堂任务、课后练习(docx) |
互动教学工具.html | HTML | 知识学习+拖拽分类+随堂测验三模块 |
(可选)思维导图.html | HTML | 课程知识结构可视化 |
激活时,先检查 USER.md 中是否已记录 教材版本 偏好:
step 1: 读取 C:\Users\Administrator\.workbuddy\USER.md
step 2: 查找"教材版本"字段
step 3:
- 已记录(如"湘教版")→ 直接使用,不询问
- 未记录(真正首次)→ 询问用户,确认后写入 USER.md 永久保存
首次使用询问模板:
您好!我是信息科技备课助手,支持以下两个教材版本:
1. 湘教版(3单元×4课=12课/册)
2. 湘科版(4单元×4活动=16活动/册)
请问您使用的是哪个版本?
(确认后我会记住您的选择,以后不再询问)
确认后写入 USER.md:
在 USER.md 的## 教学设计偏好章节下新增一行:
- **教材版本**:湘教版(已确认,无需重复询问)
后续会话行为:
每册教材结构:3个单元,每单元4课,共12课。
当用户说"X年X下第N课"时,自动转换为单元+课次:
单元计算:unit = ceil(N / 4) → 第unit单元
课次计算:lesson = N - (unit-1)*4 → 第unit单元第lesson课
| 用户说 | 自动识别为 |
|---|---|
| -------- | ------------ |
| 六下第1课 | 六年级下册 第一单元第1课 |
| 六下第2课 | 六年级下册 第一单元第2课 |
| 六下第3课 | 六年级下册 第一单元第3课 |
| 六下第4课 | 六年级下册 第一单元第4课 |
| 六下第5课 | 六年级下册 第二单元第1课 |
| 六下第6课 | 六年级下册 第二单元第2课 |
| 六下第7课 | 六年级下册 第二单元第3课 |
| 六下第8课 | 六年级下册 第二单元第4课 |
| 六下第9课 | 六年级下册 第三单元第1课 |
| 六下第10课 | 六年级下册 第三单元第2课 |
| 六下第11课 | 六年级下册 第三单元第3课 |
| 六下第12课 | 六年级下册 第三单元第4课 |
同理适用于:三上/三下/四上/四下/五上/五下/六上/六下 等所有册次。
每册教材结构:4个单元,每单元4活动,共16活动。
(湘科版教材中"活动"即"课",两者含义相同)
当用户说"X年X下第N活动"时,自动转换为单元+活动次:
单元计算:unit = ceil(N / 4) → 第unit单元
活动计算:activity = N - (unit-1)*4 → 第unit单元第activity活动
| 用户说 | 自动识别为 |
|---|---|
| -------- | ------------ |
| 六下第1活动 | 六年级下册 第一单元第1活动 |
| 六下第2活动 | 六年级下册 第一单元第2活动 |
| 六下第3活动 | 六年级下册 第一单元第3活动 |
| 六下第4活动 | 六年级下册 第一单元第4活动 |
| 六下第5活动 | 六年级下册 第二单元第1活动 |
| 六下第6活动 | 六年级下册 第二单元第2活动 |
| 六下第7活动 | 六年级下册 第二单元第3活动 |
| 六下第8活动 | 六年级下册 第二单元第4活动 |
| 六下第9活动 | 六年级下册 第三单元第1活动 |
| 六下第10活动 | 六年级下册 第三单元第2活动 |
| 六下第11活动 | 六年级下册 第三单元第3活动 |
| 六下第12活动 | 六年级下册 第三单元第4活动 |
| 六下第13活动 | 六年级下册 第四单元第1活动 |
| 六下第14活动 | 六年级下册 第四单元第2活动 |
| 六下第15活动 | 六年级下册 第四单元第3活动 |
| 六下第16活动 | 六年级下册 第四单元第4活动 |
同理适用于:三上/三下/四上/四下/五上/五下/六上/六下 等所有册次。
收到课次/活动简写后,必须先向用户确认识别结果,例如:
> 湘教版:"好的,我理解为:六年级下册 第二单元第1课,是这个吗?"
> 湘科版:"好的,我理解为:六年级下册 第二单元第1活动,是这个吗?"
确认后再读取对应版本的课程大纲匹配具体课题。
scripts/
├── generate_ppt.js # PPT生成工具(pptxgenjs,15页深蓝科技风格)
├── generate_teaching_design_v2.js # 教案生成工具(docx,v2深蓝九章节格式)
├── generate_html.js # 互动HTML工具生成器(三模块)
├── generate_doc.js # Word文档入口(学生任务单)
├── doc_builder.js # 底层Word组件库(docx)
├── html_builder.js # 底层HTML组件库
└── templates/ # 模板目录(预留)
依赖(已安装):
node_modules/
├── pptxgenjs/ # PPT生成(npm install pptxgenjs)
└── docx/ # Word生成(npm install docx@9)
参考资料目录:
references/
├── 湘教版信息科技教材课程大纲_含目标内容.md # 湘教版大纲(含教学目标,优先用于湘教版)
├── 湘科版信息科技教材课程大纲.md # 湘科版大纲(每册4单元×4活动=16活动)
├── 信息科技备课教案模板.docx # 空白教案模板
└── 教案示例_推荐算法.docx # 已生成示例(参考)
⚡ 全套默认生成规则(核心行为,v3.3.0 新增):
当用户要求制作某节课的任何一份资料(教案/课件/任务单/互动HTML)时:
检查文件存在性的方法(Node.js):
const fs = require('fs');
const topic = '课题名'; // 如 '推荐算法'
const grade = '五年级下册'; // 如 '五年级下册'
const prefix = `${grade}${topic}`; // 如 '五年级下册推荐算法'
const needed = ['课件', '教学设计', '学生任务单', '互动工具'];
const extensions = ['.pptx', '_教案.docx', '_学生任务单.docx', '_互动工具.html'];
const toGenerate = [];
for (let i = 0; i < needed.length; i++) {
if (!fs.existsSync(prefix + extensions[i])) {
toGenerate.push(needed[i]);
}
}
if (toGenerate.length === 0) {
console.log('所有文件已存在,无需重复生成!');
} else {
console.log('需要生成:', toGenerate.join('、'));
}
版本判断 + 课次计算:
unit=ceil(N/4), lesson=N-(unit-1)*4unit=ceil(N/4), activity=N-(unit-1)*4> 术语注意:湘科版称"活动",不称"课",但两者含义相同,计算逻辑一致。
根据已确认的教材版本,选择对应的大纲文件:
| 版本 | 大纲文件 |
|---|---|
| ------ | ---------- |
| 湘教版(默认) | references/湘教版信息科技教材课程大纲_含目标内容.md |
| 湘科版 | references/湘科版信息科技教材课程大纲.md |
const fs = require('fs');
const path = require('path');
const skillDir = 'C:\\Users\\Administrator\\.workbuddy\\skills\\信息科技备课助手';
// 根据版本选择大纲文件
const version = '湘教版'; // 或 '湘科版',根据用户输入确定
const outlineFile = version === '湘科版'
? '湘科版信息科技教材课程大纲.md'
: '湘教版信息科技教材课程大纲_含目标内容.md';
const outline = fs.readFileSync(
path.join(skillDir, 'references', outlineFile),
'utf-8'
);
// 搜索对应课题内容(年级+单元+课次/活动次)
使用 generate_ppt.js 中的 PPTGenerator 类,pptxgenjs,深蓝科技风格,15页标准结构:
const { PPTGenerator } = require('./scripts/generate_ppt.js');
const path = require('path');
const config = {
topic: '课题名',
grade: '六年级下册',
unit: '第二单元第1课 课题名',
duration: '1课时(40分钟)',
objectives: [
['知识与技能', '了解xxx概念\n掌握xxx方法', 'BLUE'],
['过程与方法', '通过实践探究\n培养解决问题的能力', 'TEAL'],
['情感与素养', '体会技术价值\n培养信息科技核心素养', 'ORANGE'],
],
intro: '情境导入文字(思考题/生活情境)',
sections: [
{ title: '知识点1标题', content: '概念说明', points: ['要点1', '要点2', '要点3'] },
{ title: '知识点2标题', content: '概念说明', points: ['要点1', '要点2'] },
// 最多5个知识点
],
activity: {
title: '实验/活动标题',
materials: ['材料1', '材料2', '材料3'],
steps: ['步骤1', '步骤2', '步骤3', '步骤4'],
},
summary: '方法总结文字',
expand: ['拓展应用1', '拓展应用2', '拓展应用3'],
exercises: [
['选择题', '1. 下列说法正确的是:\n A. 选项1 B. 选项2 C. 选项3', 'BLUE'],
['判断题', '2. 判断正误:\n ( )', 'TEAL'],
['应用题', '3. 请设计一个解决方案', 'ORANGE'],
],
board: '板书设计文字',
gains: [
['收获1', '描述1', 'BLUE'],
['收获2', '描述2', 'TEAL'],
['收获3', '描述3', 'GREEN'],
['收获4', '描述4', 'ORANGE'],
],
homework: {
required: ['必做任务1', '必做任务2'],
optional: ['选做任务1', '选做任务2'],
},
};
const outputPath = path.join(process.cwd(), '课题名_课件.pptx');
const gen = new PPTGenerator();
gen.generate(config, outputPath);
PPT结构(15页):
4-8. 新知讲解 - 每页一个知识点(最多5页)
使用 generate_teaching_design_v2.js,docx 库,深蓝主题(#1F6BB7),九章节完整结构:
const { generateTeachingDesign, makeConfig } = require('./scripts/generate_teaching_design_v2.js');
const path = require('path');
const cfg = makeConfig({
title: '课题名',
grade: '六年级下册',
unit: '第二单元第1课 课题名',
period: '1课时(40分钟)',
class_type: '新授课',
curriculum_points: '课标要点说明...',
student_analysis: {
knowledge: '已有知识技能基础...',
habits: '学生学习习惯与认知特点...',
experience: '相关生活经验...',
difficulty: '预期学习难点...',
},
objectives: {
knowledge: ['知识技能目标1', '知识技能目标2'],
process: ['过程方法目标1', '过程方法目标2'],
emotion: ['情感素养目标1', '情感素养目标2'],
},
key_points: ['重点1', '重点2'],
difficult_points: ['难点1', '难点2'],
preparation: {
teacher: ['教师准备1', '教师准备2', '教师准备3'],
student: ['学生准备1', '学生准备2'],
},
process_summary: [
{ 环节: '情境导入', 时长: '约3′', 教师活动: '...', 学生活动: '...', 设计意图: '...' },
{ 环节: '新知讲解', 时长: '约15′', 教师活动: '...', 学生活动: '...', 设计意图: '...' },
{ 环节: '实践探究', 时长: '约15′', 教师活动: '...', 学生活动: '...', 设计意图: '...' },
{ 环节: '总结评价', 时长: '约7′', 教师活动: '...', 学生活动: '...', 设计意图: '...' },
],
process_details: {
'环节1 情境导入(3分钟)': [
{ type: 'text', text: '【教师活动】教师播放...' },
{ type: 'text', text: '【教师提问】同学们,...' },
{ type: 'text', text: '【预设回答】学生回答...' },
{ type: 'text', text: '【教师小结】...' },
],
},
assignments: {
basic: ['基础任务1', '基础任务2'],
advanced: ['提升任务1', '提升任务2'],
},
board_design: [
['课题名', '副标题'],
['一、核心概念:', true],
['具体内容...', false],
],
reflection: [
['目标达成情况', '评价问题...'],
['课堂亮点', '描述...'],
['待改进之处', '描述...'],
['下次改进计划', '描述...'],
],
});
const outputPath = path.join(process.cwd(), '课题名_教案.docx');
await generateTeachingDesign(cfg, outputPath);
九章节教案结构:
| 章节 | 内容要求 |
|---|---|
| ------ | ---------- |
| 一、基本信息 | 教材版本、年级学期、单元课题、课时、课型、课标要点 |
| 二、学情分析 | 已有知识技能、学习习惯认知特点、生活经验、预期学习难点 |
| 三、三维教学目标 | 知识与技能、过程与方法、情感态度与核心素养 |
| 四、教学重点与难点 | 重点3条左右、难点2条左右 |
| 五、教学准备 | 教师准备4条左右、学生准备3条左右 |
| 六、教学过程 | 简表(五列)+ 详案(分环节详述) |
| 七、分层作业 | 基础任务(全体)+ 提升任务(学有余力) |
| 八、板书设计 | 核心概念框架图 |
| 九、教学反思 | 四维度反思框架 |
使用 doc_builder.js 中的 generateTaskSheet() 函数,docx,A4竖版,标准五段结构:
const { generateTaskSheet } = require('./scripts/doc_builder.js');
const path = require('path');
const taskInfo = {
title: '课题名',
grade: '六年级下册',
objectives: [
'能说出xxx的概念和特点',
'能使用xxx方法完成实践活动',
'体验信息技术的价值与趣味',
],
preview: [
['思考探索', '生活中哪些地方用到了xxx技术?请举3个例子'],
['预习填空', '___是指___,它的主要特点是___'],
],
explore: [
['活动一:认识xxx', '参考教材第xx页,完成以下步骤:\n1. ...\n2. ...\n3. ...',
['编号', '现象/结果', '原因分析'], 4],
],
knowledge: [
'xxx的定义:___是指___',
'xxx的特点:① ___ ② ___ ③ ___',
],
exercises: [
['选择题', '下列关于xxx说法正确的是( )', ['A. 说法1', 'B. 说法2']],
['判断题', '( )xxx一定比yyy更好', null],
],
extension: '和家长讨论后写下你的想法',
};
const outputPath = path.join(process.cwd(), '课题名_学生任务单.docx');
await generateTaskSheet(taskInfo, outputPath);
任务单结构(五段):
使用 generate_html.js 中的 HTMLGenerator 类,三模块互动工具:
const { HTMLGenerator } = require('./scripts/generate_html.js');
const path = require('path');
const htmlConfig = {
topic: '课题名',
knowledge_title: '本节核心知识',
knowledge_content: '知识点介绍文字(支持换行)',
quiz: [
{ q: '问题1?', options: ['A. 选项1', 'B. 选项2', 'C. 选项3', 'D. 选项4'], answer: 0 },
{ q: '问题2?', options: ['A. 选项1', 'B. 选项2', 'C. 选项3'], answer: 2 },
],
drag_items: [
{ text: '概念A', category: '类别1' },
{ text: '概念B', category: '类别2' },
{ text: '概念C', category: '类别1' },
],
categories: ['类别1名称', '类别2名称'],
};
const outputPath = path.join(process.cwd(), '课题名_互动工具.html');
const gen = new HTMLGenerator(htmlConfig);
gen.generate(outputPath);
HTML工具三模块:
当用户提到模糊关键词(如"小夜灯"、"系统组成"):
| 素养维度 | 说明 |
|---|---|
| --------- | ------ |
| 信息意识 | 感受信息重要性,能识别有用信息 |
| 计算思维 | 抽象、分解、建模、算法思维 |
| 数字化学习 | 用数字工具解决问题 |
| 信息社会责任 | 安全、隐私、伦理、版权意识 |
每次完成备课资料生成后,在回复末尾附上以下提示:
> 💡 信息科技备课助手使用方法(v3.4.0 Node.js版)
>
> ⚡ 全套默认生成:
> - 用户要求制作某节课的任何一份资料时,自动生成全套四件套
> - 已存在的文件自动跳过,不重复生成
> - 如只需某一份,请明确说明"只需要教案"
>
> 教材版本(已记忆,不再重复询问):
> - 首次使用时确认版本,确认后永久记录在 USER.md
> - 后续所有会话直接使用已记录版本,不再询问
> - 如需切换版本,请主动说明,如:湘科版 六下第5活动
> - 湘教版:3单元×4课=12课/册;湘科版:4单元×4活动=16活动/册
> - 湘科版称"活动"不称"课",两者含义相同
>
> 触发方式(任选一种):
> - 湘教版说课次:六下第5课、五下第3课(自动识别单元)
> - 湘科版说活动:六下第5活动(自动识别单元)
> - 说课题名:帮我做推荐算法的课件
> - 选择功能:做六下第7课的教案、生成五下第2课的任务单
>
> 支持生成的内容:
> | 内容 | 触发关键词 |
> |------|-----------|
> | PPT课件 | 课件、PPT、幻灯片 |
> | 教学设计/教案 | 教案、教学设计、备课 |
> | 学生任务单 | 任务单、导学案 |
> | 互动HTML工具 | 互动工具、HTML、互动页面 |
> | 全套四件套 | 全套、四件套、完整备课 |
>
> 课次/活动速查规则:
>
> 湘教版(3单元×4课=12课):
> - 第1-4课 → 第一单元第1-4课
> - 第5-8课 → 第二单元第1-4课
> - 第9-12课 → 第三单元第1-4课
>
> 湘科版(4单元×4活动=16活动):
> - 第1-4活动 → 第一单元第1-4活动
> - 第5-8活动 → 第二单元第1-4活动
> - 第9-12活动 → 第三单元第1-4活动
> - 第13-16活动 → 第四单元第1-4活动
>
> ✅ Node.js 全量实现,可共享到 SkillHub
共 3 个版本