早上好,我是まさきん。
家里有学龄前的孩子,买平假名练习题的机会不少。但市面上卖的练习册,往往会把「这孩子已经会写的字」也一并纳入出题范围。
所以我做了一个机制,让AI自动生成只反复出「做错过的字」的练习题。这次把出题池的管理方式、批改数据的结构,都具体介绍一下。
起因是「连会写的字也每次都要写」
市面上的练习册,大多是按照五十音顺序依次练习的结构。已经会写的字和不会写的字,出现的次数是一样的。
对孩子来说,练习已经会写的字很无聊。明明想把更多时间花在不会写的字上,但练习册的结构不允许这样做。
于是我做了一个机制,记录做错的字,等快忘记的时候再重新出题。
把出题分成多个板块
一张练习题里,我组合了几种性质不同的练习。
- 描红:沿着浅色的示范字描摹,练习运笔本身的板块
- 看图写假名:看图写出单词开头的那个字,用来锻炼声音和文字的对应关系
- 形近字辨析:区分「さ・ち」「ぬ・ね」这类外形相似的平假名
- 写词语:先沿着浅色示范描摹2到3个字的单词,再自己重新抄写一遍
各个板块的出题数量,我设计成类似环境变量的形式来调整。比如「描红4题、形近字2题、写词语4题」,只需要改配置文件里的数字,就能调整各板块的题量。出题数设为0的板块不会画进练习题里,标题的编号会在实际显示的板块之间重新排列。
增减出题只需要改池子里的数字
各板块的候选题目,我统一放在代码开头一个叫做「池」的字典里管理。想新增文字或单词时,只需要在这个字典里加一行。
# 出题池示例(实际的key和单词做了简化处理)
POOL_TRACE = {
"a1": {"char": "あ", "word": "あひる"},
"a2": {"char": "い", "word": "いぬ"},
# ...
}
POOL_WORD = {
"w1": {"word": "くつ", "len": 2},
"w2": {"word": "さかな", "len": 3},
# ...
}
只要保证每个id唯一,剩下的工作就是跟复习清单对照,出题就能自动拼好。想扩大出题范围时,也不需要改动整段代码。
机制的核心是「遗忘曲线」
做的事情核心,是把做错的字分阶段管理。每答对一次,等级就上升一级,下一次出题的间隔也随之拉长。
| 等级 | 到下次出题的间隔 |
|---|---|
| 0(首次做错) | 第二天 |
| 1 | 3天后 |
| 2 | 1周后 |
| 3 | 2周后 |
| 4 | 「毕业」,之后不再出题 |
答对一次等级就升1级,答错则回到0级。到达4级的字,就不会再出现在练习题里了。
这个状态,我用一份简单的JSON来保存。
{
"あ": {"stage": 2, "due": "2026-09-20"},
"ぬ": {"stage": 0, "due": "2026-09-13"},
"ね": {"stage": 4, "due": null}
}
每天生成练习题时,只会把due,也就是下次出题日期,落在今天或之前的字,提取出来作为「今天的复习对象」。就算需要复习的字的总数变多,实际出题的也只会锁定在「现在该出的字」,练习题不会因此变得无限长。
在命令行上,我用以下操作来更新状态。
# 生成今天的练习题
python3 daily_hiragana_drill.py generate
# 把答对的字的等级提升(出题间隔拉长)
python3 daily_hiragana_drill.py mark-correct あ い
# 把答错的字重置为0级(第二天重新出题)
python3 daily_hiragana_drill.py mark-miss の は
# 查看当前的复习对象、毕业情况一览
python3 daily_hiragana_drill.py srs-status
这个机制的好处,是「当天正好该复习的字」会被自动选出来。家长不需要自己去想「这个字也该复习一下了吧」。
家庭收支里,也有一些放着不管就容易忘记重新审视的东西。手机资费也许就是其中之一。
批改标准依然是「只看勾选」
练习题的批改,也统一了标准。只根据每题左侧的勾选栏是否被涂黑,来判断对错。
哪怕字形写得不太工整,只要勾选栏是空白的,就算正确。学龄前孩子的字,形状还不稳定。评价标准太严格的话,会让孩子对练习本身产生排斥感。
拍照让AI读取批改完的练习题时,我会先把勾选栏那一列裁切出来放大,再进行判断。如果整体保持缩小状态,涂黑的部分有时候会糊成一团看不清楚。
板块一多,同一个字有可能在不同板块里被读取成一次「正确」和一次「错误」。这种情况下,我会优先采用「错误」,只反映一次。与「以为做对了」而漏看相比,谨慎处理更安全。
另外,作为对错判断依据的标准答案,我没有给孩子看。我希望孩子先自己试着写,而不是照着答案抄。
孩子出现抵触情绪时的应对
在实际运行中,有一种进阶题型让孩子表现出强烈的排斥。硬让孩子做下去,可能会让她对整个练习产生抵触情绪。
于是我把这个题型的出题数设成了0,暂停使用。空出来的题量,分配给了其他更容易练习的板块。因为池子和逻辑本身都保留着,想恢复的时候,只需要把出题数的设置改回去就行。
我优先选择的是「不让孩子讨厌练习本身」,而不是「不打乱既定的课程安排」。我觉得这个机制本来就应该一边观察孩子的状态一边调整。
生成的练习题里有什么
把发给AI的指示通用化后介绍一下。
请制作一张学龄前儿童用的平假名练习题。
- 出题的文字和单词,只能从给定的「复习对象清单」中选择
- 各板块的出题数量,按指定的数值执行
- 需要同时准备描红用的浅色示范文字,以及孩子自己书写的空栏
- 为了方便掌握文字比例,格线要设置得大一些
复习对象清单,是从前面提到的等级管理里自动生成的。练习题本身,我会输出成可以直接打印使用的格式,批改用的答案表则单独输出成另一个文件。答案表不会给孩子看,只提供给批改的人使用。
尝试后的感受
最大的变化是练习的密度提高了。不再需要反复写已经会的字,可以把精力集中在不擅长的字上。
另一方面,我并没有想强行增加坐在桌前的时间。哪怕时间短,只要能练到想练的字,我觉得就足够了。
适合这样的人
- 觉得市面上的练习册「不太适合自家孩子」的人
- 想把遗忘曲线这类思路,引入到家庭学习中的人
- 对用代码管理出题池这种轻量实现不排斥的人
总结
我做了一个机制,把做错的字分阶段管理,在快忘记的时候安排复习。市面上练习册没有的「专属这个孩子」的出题方式,我觉得是最大的好处。
遇到不顺利的部分,不硬撑着推进,而是调整出题内容。所谓机制化,我觉得重要的其实是一边观察孩子的状态一边持续调整。
不只是练习题,家里的各种机制,我都是这样一点点重新审视的。像手机资费这类每月的固定支出,也同样容易被放着不管。偶尔把整个机制重新审视一下,或许也不错。
本文包含联盟营销广告。如果您通过本站链接申请相关商品或服务,我们可能会从合作企业获得报酬。此外,运营者是乐天集团的员工,也可能通过员工推荐计划获得报酬。文章内容与评价均基于运营者的真实体验与调查完成,与是否存在广告无关,但请您在阅读前了解上述关系。详情请参阅免责声明与联盟营销说明。 免责声明与联盟营销说明
本文包含机器翻译内容。正式条件请以乐天移动官方网站的多语言页面为准。
如果您对乐天移动的通信区域·信号状况有疑问,可以通过官方的 电波改善调查申请表 进行咨询。