幼小衔接数学系统学习 (Preschool Math Bridge)
Overview
为 4-7 岁、尚未识字或识字有限的幼儿提供一套层层递进的数学学习方案。核心特点是语音朗读驱动——每一道题目、每一条指令、每一次反馈都由浏览器原生中文语音合成 (Web Speech API SpeechSynthesis) 朗读出来,幼儿只需"听题—看图—操作",无需家长逐题转述。学习内容按认知发展规律分为 7 个阶段,前一阶段熟练后再进入下一阶段。
何时使用
触发场景包括但不限于:
- "给我家孩子出点数学题"、"教小朋友认数字"、"幼小衔接数学练习"
- "出 10 以内加减法"、"语音读数学题给小孩做"
- "教小孩写数字"、"幼儿园数学"
- "循序渐进的数学练习"、"系统学数学"
核心设计原则
- 语音优先:所有题目文字必须同步语音朗读,TTS 失败时降级为家长可读的大字提示。幼儿不应被要求自己读题。
- 层层递进:严格遵循 7 阶段 28 子级别顺序(见
references/curriculum.md),每子级别通过率达 80% 方可解锁下一级。 - 视觉化:数字与数量一一对应,用 emoji 水果/动物表示数量,降低抽象门槛。
- 即时反馈:答对立即语音鼓励,答错语音温和提示并允许重试,不显示红叉等负面标识。
- 短时高频:每次练习 5-10 题,避免幼儿注意力流失。
工作流程
步骤 1:了解幼儿当前水平
向家长简短询问(1-2 个问题即可,避免追问):
- 孩子年龄 / 幼儿园阶段(小班/中班/大班/幼升小)
- 已掌握到哪一步(如"会数 1-10""会 10 以内加法")
若家长不确定,默认从阶段 1 子级别 1.1 开始,通过首课快速测一题判断是否跳级。
步骤 2:确定本次学习目标
依据 references/curriculum.md 选择本次练习的子级别。原则:
- 每次只练 一个子级别,不混合。
- 新内容先"学"(演示+跟读)再"练"(做题)。
- 复习课可混合前一阶段的 2-3 个子级别巩固。
步骤 3:生成练习题
使用 scripts/generate_exercises.py 按目标子级别生成题目集:
C:/Users/chaow/.workbuddy/binaries/python/versions/3.13.12/python.exe scripts/generate_exercises.py --stage 5 --level 2 --count 8 --seed 42
参数说明:
- --stage 阶段编号 1-7
- --level 子级别编号(各阶段不同,见 curriculum.md)
- --count 题目数量(默认 8,建议 5-10)
- --seed 随机种子(同一 seed 生成相同题目,便于复盘)
- --out 输出 JSON 路径(默认 stdout)
输出为 JSON 数组,每题含 type/question/speak/options/answer/visual 等字段,直接喂给 HTML 模板。
步骤 4:渲染互动学习页
读取 assets/lesson_template.html 模板,将步骤 3 生成的题目 JSON 注入到模板的 EXERCISES 变量中(替换 __EXERCISES_PLACEHOLDER__ 占位符),并把 LESSON_TITLE、LESSON_SUBTITLE、CHILD_NAME(可选,用于语音鼓励"小明真棒")也填入对应占位符。
生成的最终 HTML 保存到当前工作目录,例如 math_lesson_s5_l2.html,然后用 present_files 展示给用户。WorkBuddy 内置浏览器面板会打开该 HTML,幼儿即可开始练习。
> 关键:模板已内置中文 TTS 引擎、自动朗读、点击重读、答对/答错语音反馈、进度条、星星奖励。不要重写 TTS 逻辑,详见 references/tts_guide.md。
步骤 5:课后小结
练习结束后(家长反馈"做完了"或幼儿完成所有题),向家长简报:
- 本次正确率、用时
- 掌握情况评估(熟练/基本掌握/需巩固)
- 建议下一节课的子级别
- 若正确率 < 60%,建议本周再练一次同级别;> 90% 可尝试下一级
HTML 模板定制要点
assets/lesson_template.html 是自包含单文件(无外部依赖),支持以下题型,由题目 JSON 的 type 字段决定渲染方式:
| type 值 | 题型 | 适用阶段 |
|---|---|---|
recognize |
看图选数字(识数) | 阶段 1 |
listen_pick |
听数字选数字(读数) | 阶段 2 |
trace |
数字描红(写数) | 阶段 3 |
count |
数物品选数量(数量对应) | 阶段 4 |
compare |
比多少 | 阶段 4 |
add |
加法(带视觉辅助) | 阶段 5 |
sub |
减法(带视觉辅助) | 阶段 6 |
mixed |
加减混合 | 阶段 7 |
每题 JSON 结构示例(加法):
{
"type": "add",
"speak": "3 加 2 等于多少?",
"text": "3 + 2 = ?",
"visual": {"left": 3, "right": 2, "emoji": "🍎"},
"options": [3, 4, 5, 6],
"answer": 5,
"hint": "数一数一共有几个苹果"
}
字段说明:
- speak(必填):TTS 朗读的中文文本,要口语化、短句。
- text(可选):屏幕显示的题目文字,大字呈现。
- visual(可选):视觉辅助数据,模板据此渲染 emoji 计数图。
- options(选择题必填):选项数组,顺序即显示顺序。
- answer(必填):正确答案。
- hint(可选):答错时的语音提示。
TTS 实现要点(详见 references/tts_guide.md)
- 使用浏览器原生
window.speechSynthesis+SpeechSynthesisUtterance,无需任何外部服务或 API key。 - 优先选择
zh-CN语音,启动时枚举可用语音并缓存zh-CN/zh-HK/zh-TW中第一个。 - 语速
rate: 0.85(比正常慢,适合幼儿听清);音调pitch: 1.1(略亮,更亲切)。 - 每题加载后 自动朗读;提供"🔊 再听一遍"大按钮供幼儿重听。
- TTS 不被支持时(极旧浏览器),降级为顶部大字提示框,提示家长读题。
复用资源索引
| 文件 | 用途 | 何时加载 |
|---|---|---|
references/curriculum.md |
7 阶段 28 子级别完整课程表 | 选择本次学习目标时 |
references/tts_guide.md |
中文 TTS 实现细节与降级方案 | 调试语音问题时 |
assets/lesson_template.html |
互动学习页模板 | 每次生成练习时(必读) |
scripts/generate_exercises.py |
题目生成器 | 生成题目时 |
常见场景示例
场景 A:家长说"教我家 5 岁孩子认数字"
1. 确认孩子会数到几 → 默认从阶段 1.1(认识 1-5)开始
2. 运行 generate_exercises.py --stage 1 --level 1 --count 6
3. 注入模板生成 HTML,present_files 展示
4. 模板自动朗读"请找出数字 3",孩子点击对应数字
场景 B:家长说"出 10 以内加法,要能读出来"
1. 确认孩子已掌握阶段 4(数量对应)→ 进入阶段 5.2(10 以内加法)
2. generate_exercises.py --stage 5 --level 2 --count 8
3. 生成 HTML,模板自动朗读"4 加 3 等于几?"并显示 🍎🍎🍎🍎 + 🍎🍎🍎
场景 C:家长说"孩子写字难看,练练写数字"
1. 进入阶段 3.1(描红 0-9)
2. 生成描红题,模板提供 canvas 描红功能,TTS 朗读"沿着虚线写数字 5"
注意事项
- 不要让幼儿自己读题——本技能的核心价值就是语音朗读,务必确保每题都朗读。
- 不要一次出超过 10 题,幼儿注意力有限。
- 减法阶段务必先用视觉辅助(拿走几个苹果),避免抽象运算。
- 描红/书写题需要触屏或鼠标,桌面端可正常使用。
- 生成的 HTML 文件保存到当前工作目录(非技能目录),方便家长日后重开。