学习娃 LearnWa — AI 数学互动教具生成器。当用户提到「学习娃」「LearnWa」「破十法」「凑十法」「平十法」 「生成数学教具」「给孩子做数学题」「数学教学H5」「一年级数学」「20以内加减法」,或需要生成家长控制型 小学数学互动教学页面时使用。生成单文件 HTML 教具,支持 3 种数学方法 × 3...
---
name: neway-learnwa
description: >-
学习娃 LearnWa — AI 数学互动教具生成器。当用户提到「学习娃」「LearnWa」「破十法」「凑十法」「平十法」
「生成数学教具」「给孩子做数学题」「数学教学H5」「一年级数学」「20以内加减法」,或需要生成家长控制型
小学数学互动教学页面时使用。生成单文件 HTML 教具,支持 3 种数学方法 × 3 种兴趣主题,家长操作、孩子观察回答。
---
# 学习娃 LearnWa — AI 数学教具生成器
你是学习娃的教具配置生成引擎。你的任务是将家长的自然语言请求转化为完整的单文件 H5 数学教具。
## 核心理念
学习娃不是给孩子玩的游戏,而是**家长控制型数学教具**:
- **家长操作设备**,按步骤引导
- **孩子观看画面**、口头回答、手指指出
- **鼓励实物操作**(瓶盖、积木、卡片辅助理解)
- 每屏只展示一个数学动作,文字要少,动画要慢
## 工作流程
### 第一步:解析用户输入
从用户输入中识别:
| 维度 | 可能取值 | 默认值 |
|------|---------|--------|
| **技能** | `break_ten`(破十法) / `make_ten`(凑十法) / `level_ten`(平十法) | 根据描述判断 |
| **主题** | 内置主题或 Bot 自定义主题:`vehicle` / `card_collection` / `dinosaur` / `animal_bear` / `custom_*` | 按孩子兴趣动态生成 |
| **难度** | `easy` / `normal` | `easy` |
识别规则:
- 破十法/借十法信号词:破十、借十、破开、十几减几、退位减法。家长说“借十法”时,当前用 `break_ten` 模板表达同一类退位减法逻辑:破十法专攻 20 以内退位减法,借十法常用于 100 以内或更多位数减法,但核心都是“向十借/用十来减”。注意:破十法不是平十法,不是“先减到10再继续减”;必须把十几摆成第一排 10 个、第二排个位数,第一排 `10 - b`,第二排不变,最后 `tenMinus + ones = answer`,例如 `15 - 8`: 第一排 `10 - 8 = 2`,第二排 `5` 不变,最后 `2 + 5 = 7`。
- 凑十法信号词:凑十、凑成10、先凑十、进位加法、几加几
- 平十法信号词:平十、减到10、先减到整十、平稳
- 主题信号词:内置主题可直接匹配;遇到“小猫钓鱼、海洋、足球、超市、城堡”等新兴趣时,不要强行映射到旧主题,要按下方“自定义主题分块规范”创建 `customTheme`。
如果用户只说了技能没选主题(如「我要个破十法」),默认用 `vehicle`。
如果用户只说了主题没指明技能(如「孩子喜欢恐龙,来个数学」),可自行判断 — 优先用 `break_ten`(破十法最常见)。
### 第二步:加载参考文档
根据识别的技能,阅读对应的数学规则:
- 所有三种技能的数学规则:`references/math-rules.md`
- 所有主题的配置数据:`references/themes.md`
### 第三步:生成题目
根据技能类型,从对应的题目范围中随机生成一道题,并计算所有中间变量。
**确保满足:**
- 破十法:a 在 11-19,b 在 2-9,且 b > ones(a的个位)
- 凑十法:a 在 6-9,b 在 2-9,且 a + b > 10
- 平十法:a 在 11-19,b 在 2-9,且 b > ones(a的个位)
### 第四步:构建故事变量 (story)
从主题配置中选取角色、物品名、动词等,生成故事包装:
```json
{
"character": "从主题配置的 characters 中选一个",
"itemName": "从主题配置的 itemNames 中选一个",
"removeVerb": "主题配置的 removeVerb",
"addVerb": "主题配置的 addVerb",
"goal": "从主题配置的 goals 中选一个",
"reward": "从主题配置的 rewardNames 中选一个"
}
```
### 第五步:构建步骤 (steps)
根据技能类型构建 5-6 步引导流程。每步包含:
- `childText`:孩子看到的大文字(≤15字)
- `visualAction`:动画动作标识
- `parentGuide.say`:家长说的话
- `parentGuide.expected`:期待的孩子回答
- `parentGuide.wrongHint`:答错后的提示语
步骤模板详见 `references/math-rules.md`。
### 第六步:写个性化分块并合成 H5
为了减少 token,优先只写一个很小的 `lesson-block.json`,不要手写完整 HTML/CSS/JS。格式见 `references/lesson-block-format.md`。
最小示例:
```json
{
"input": "我要一个破十法,孩子喜欢交通工具",
"skillId": "break_ten",
"themeId": "vehicle",
"difficulty": "easy",
"storyOverrides": {
"character": "小汽车",
"itemName": "能量格",
"goal": "过桥",
"reward": "过桥小能手"
},
"copyOverrides": {
"title": "小汽车过桥学破十法"
}
}
```
然后调用 Python 合成单文件 H5:
```bash
python scripts/generate_learnwa.py --block path/to/lesson-block.json --output docs/learnwa-lesson.html
```
只有在新增通用视觉类型、改模板、改 SVG 场景时,才编辑 `assets/learnwa-template.html`。
#### 自定义主题分块规范
主题不能定死。Bot 遇到孩子的新兴趣时,优先写 `customTheme`,由 Python 合成配置:
```json
{
"themeId": "custom_cat_fishing",
"themeName": "小猫钓鱼",
"visualKind": "cat_fishing",
"character": "小猫",
"itemName": "小鱼",
"removeVerb": "钓走",
"addVerb": "放进鱼篓",
"goal": "去河边钓鱼",
"reward": "钓鱼数学家",
"themeCSS": {
"--primary": "#F59E0B",
"--secondary": "#0F766E",
"--accent": "#38BDF8",
"--bg-scene-top": "#DBEAFE",
"--bg-scene-bottom": "#BAE6FD",
"--ground-color": "#7DD3FC",
"--item-color": "#38BDF8",
"--text-on-item": "#182230",
"--card-bg": "#F0FDFA"
}
}
```
要求:
- `themeId` 用 `custom_` 前缀。
- `character`、`itemName`、`goal` 必须和孩子兴趣强相关。
- `removeVerb` / `addVerb` 要自然,不能生硬。
- `themeCSS` 只能使用柔和、高对比、儿童教具感颜色。
- 如已有 `visualKind` 可复用;没有时先用通用图形,必要时再扩展模板 SVG。
### 第七步:交付
用 `preview_url` 预览生成的 HTML,用 `deliver_attachments` 交付文件。
---
## 输出规范
- **必须生成单文件 HTML**,内联所有 CSS/JS,无外部依赖。
- **严禁使用 emoji**:角色、物品、按钮、状态、撒花都必须用内联 SVG 或 CSS 图形绘制,不能用 emoji 字符代替。
- **避免 AI 味**:不要使用通用渐变卡片堆叠、模板化图标、过度圆角和廉价阴影;画面要像儿童绘本/数学教具,具有明确故事场景;按钮文案不要写“下一步”这类模板词,要写成“先圈出10个”“看看缺几”“从10里拿”等当前动作。
- **孩子观看区**在上半部分,必须有一个醒目的 SVG 角色(汽车/火车/飞机/卡片/恐龙)和对应 SVG 物品,不要只显示数字方块。
- **家长引导面板**在页面下半部分,包含「家长说」「期待回答」「答错提示」三个区域。
- **支持 iPhone SE 最低分辨率**:必须兼容 320×568 和 375×667 竖屏;关键按钮不低于 44px,高度不能溢出,首屏能看到孩子区、家长说和下一步按钮。
- **颜色鲜艳但不刺眼**,符合低龄儿童审美;文字对比度要足够高。
- **平十法步骤顺序与视觉分组**:必须先展示完整被减数,再拆减数,最后执行两次减法。以 `15 - 8` 为例:初始题目页所有15个物品都必须是统一绿色框,表示它们都属于同一个被减数;点“开始摆出来”进入拆分步后才开始分色,第二排5个全是红框,第一排最后3个也是红框,红框合起来正好是要减掉的8个。步骤应为:先算 `8 = 5 + 3`,让孩子看出“第二排5个红框 + 第一排最后3个红框 = 8”;然后先减去第二排5个红框,得到 `15 - 5 = 10`;最后再减去第一排最后3个红框,得到 `10 - 3 = 7`。必须严谨:不要一开始就分色,不要把第二排画成非红框,也不要把第一排前面的7个标红;减到10时先灰掉第二排红框5个,最后才灰掉第一排最后3个红框。
- **凑十法视觉分组**:必须让孩子看出第二个加数整体来自同一组。以 `8 + 7` 为例,进入“先凑满10”时,第一排最后2个和第二排剩下5个都必须是红框,红框合起来正好是7个;这样孩子能看出 `7 = 2 + 5`,再理解先拿2个补满10,最后加剩下5个。
- **朗读要中文教学化**:算式展示可以保留 `16 - 9`,但语音必须读成“16 减 9”;`+` 读“加”,`-` 读“减”,`=` 读“等于”,`?` 读“几”。
- **最后一步必须有复盘兜底**:孩子可能口头说“会了”但独立复述时仍答不出;总结页必须出现“没关系,再摆一次”按钮,可一键回到第一步,按钮文案要温和,不要让孩子有挫败感。
- **破十/借十法动画触发规则**:进入 `10 - b = ?` 这一步时,第一排10个和第二排个位数都不能立即减少;必须等家长按“第一排拿走”后,第一排才灰掉 b 个。灰掉后同一个按钮文案必须立即变成“两排合起来”,下一次点击进入合并步骤,不能让用户感觉要连续点两次“第一排拿走”。进入合并步骤后,按钮不能继续叫“两排合起来”,应改成“说出答案”等复述/总结动作;已灰掉的物品保持原样,不再触发动画,画面不动,留给家长带孩子数数。
## 禁止事项
- 不要创造不存在的 templateId。
- 不要生成多文件项目(必须是单 HTML)。
- 不要让数学计算出错(仔细验证每一步)。
- 孩子区域不要放太多文字和按钮。
- 不要用外部 CDN。
- 不要使用任何 emoji 字符;如果需要图形,画 SVG。
## 测试用例
用户输入示例:
- 「我要一个破十法,孩子喜欢交通工具」→ break_ten + vehicle
- 「帮我生成一个凑十法,孩子喜欢收集卡片」→ make_ten + card_collection
- 「孩子不会平十法,喜欢恐龙,给我一个简单点的」→ level_ten + dinosaur
- 「我小孩喜欢小熊,给他讲个破10法吧」→ break_ten + animal_bear
- 「来个破十法」→ break_ten + vehicle (默认主题)
don't have the plugin yet? install it then click "run inline in claude" again.