如何搭建带间隔重复功能的闪卡应用
闪卡应用由卡组、一个会翻转每张卡片的复习界面,以及一个决定今天显示哪些卡片的调度器组成。调度器是区分有用的学习工具与数字版索引卡堆的关键:使用间隔重复时,你熟悉的卡片很少再出现,而你感到吃力的卡片则很快会再次出现。先搭建复习界面和一个简单的调度器,之后再添加导入、图片和音频功能。
闪卡应用需要什么
数据
| 数据表 | 字段 |
|---|---|
| 卡组 | 所有者、名称、描述、公开或私密 |
| 卡片 | 所属卡组、正面、背面、可选的图片或音频、标签、创建日期 |
| 卡片状态 | 用户、卡片、到期日期、间隔、难度或“易度”、重复次数、遗忘次数 |
| 复习记录 | 用户、卡片、时间、评分(重来 / 困难 / 良好 / 简单)、用时 |
请把卡片状态与卡片本身分开保存。如果卡组是共享的,两个同时学习同一张卡片的人,各自都需要自己的到期日期。同时也要保留每一条复习记录:它是你日后改进调度器、展示学习进度图表或切换算法时所需的历史数据。
页面
- 卡组列表:显示每个卡组今天到期的卡片数量。
- 卡片编辑器:快速录入非常重要。正面、背面、保存、下一张。桌面端支持键盘快捷键。
- 复习界面:显示正面,点击显示背面,然后用四个大按钮进行评分。这个界面占了应用使用量的 90%。
- 统计:每天复习的卡片数、记忆保持率、未来的学习量。
- 导入:支持 CSV 或以制表符分隔的文本,这是大多数其他闪卡工具都能导出的格式。
选择调度方法
这里你不需要自己发明任何东西。以下是三种广为人知的方法:
| 方法 | 工作方式 | 适用场景 |
|---|---|---|
| Leitner 盒子 | 答对时卡片升入更高的盒子,答错时退回第 1 盒;每个盒子的复习频率逐级降低 | 最容易实现和解释 |
| SM-2 | 每张卡片都有一个间隔和一个“易度”系数,会随你的评分增大或减小 | 经过验证,被广泛借鉴,易于测试 |
| FSRS | 对你记住每张卡片的可能性建模,并以目标记忆保持率安排复习 | 更精确;Anki 将其作为选项提供 |
对于第一个版本,选择 Leitner 或 SM-2。把规则连同一个有实例的计算示例写进你的提示词,例如:“新卡片评为‘良好’,则一天后到期;然后是 3 天,之后每次评为‘良好’,间隔大约变为上一次的 2.5 倍。评为‘重来’,则 10 分钟后再次到期,间隔重置。”
无论你选择哪种方法,都请让 AI 将调度器放在一个独立的函数中,并为其编写测试。这样以后更换算法时,就无需改动应用的其他部分。
需要做出的决定
“今天”是谁的今天? “今天到期”应当按照用户所在的时区计算,许多学习应用会将一天的分界设在凌晨 4 点左右,这样深夜的学习会计入同一天。
每日上限。 如果不限制每天的新卡片数量,热情的用户可能一次添加 500 张卡片,一周后就要面对无法完成的复习量。默认设置一个适中的数量,并允许用户自行修改。
卡片类型。 先做基础的正面/背面卡片。“反向”卡片(也要求从背面回忆正面)和挖空卡片(在句子中填空)很受欢迎,但每种都会增加规则。等基础版本稳定后再添加。
共享卡组。 教师与班级共享卡组是很好的功能,但也涉及权限问题:学生可以学习卡组但不能编辑,而教师的修改应当同步给所有人,同时不能重置他们的学习进度。
离线使用。 人们会在火车和飞机上学习。渐进式网页应用可以缓存当天的卡片,但同步两台离线设备上的复习记录确实很难。第一个版本只支持在线使用是合理的选择。我们的原生应用与渐进式网页应用指南解释了各种选项。
一个有效的初始提示词
搭建一个优先适配手机的闪卡网页应用。用户登录后可以创建卡组,并为卡片添加正面和背面(文字,可选图片)。每位用户对每张卡片都有自己的复习状态:到期日期、间隔、易度、重复次数和遗忘次数。使用 SM-2 算法:评分包括重来、困难、良好、简单;“重来”会重置间隔,并在 10 分钟后再次显示该卡片。调度器放在独立且经过测试的函数中。复习界面先显示正面,然后是一个大的“显示答案”按钮,再是四个大的评分按钮。“今天到期”按用户所在的时区计算,一天从凌晨 4 点开始。默认每个卡组每天最多 20 张新卡片。记录每一次复习。显示带到期数量的卡组列表,以及一个简单的统计页面,展示每天的复习数量。添加 CSV 导入功能,列为正面和背面。所有数据保存在数据库中。
构建步骤
- 卡组与卡片。 创建两个卡组和二十张卡片。检查添加一张卡片有多快。
- 复习界面。 用手机学习。它应该感觉是即时的;卡片之间哪怕有一点延迟,每天都会被感受到数百次。
- 调度器测试。 给 AI 一张评分序列及其预期间隔的表格,检查结果。然后修改设备时钟,或者要求提供测试模式,以模拟接下来几天的情况。
- 每日上限与时区。 在深夜复习,并确认第二天的队列是正确的。
- 导入。 导入一份包含几百张卡片的真实 CSV,检查特殊字符、卡片内的逗号以及换行。
- 统计。 每天的复习数量和未来的到期数量。图表保持简单。
- 扩展功能。 图片、语言卡片的音频、反向卡片、共享卡组,每次只加一个。
常见错误
- 把到期日期存在卡片上。 它必须是每位用户各自的。
- 丢弃复习历史。 统计以及未来的任何调度器都需要它。
- 没有新卡片数量限制。 用户一周内就会耗尽精力。
- 按钮太小。 评分往往是单手完成的;按钮要大,并且彼此间距足够远,以避免误触。
- 最后一次评分无法撤销。 误触每天都会发生。
- 用服务器时间判断“今天”。 应使用用户所在的时区。
- 编辑卡片时重置进度。 修正一个错别字,不应让一张成熟的卡片回到起点。
什么时候现成的产品是更好的选择
如果你只是想学习,成熟的闪卡应用已经存在,其中不少还是免费的,它们在调度、同步、离线使用和共享卡组方面已经打磨了多年。特别是 Anki,拥有庞大的社区卡组库。直接使用它们就好。
当卡片是更大事物的一部分时,就应该自己搭建:例如你出售的课程,闪卡用来巩固每节课的内容;语言学校为学生提供与教学大纲相配的卡组;公司为员工讲解产品知识;或者某个学科的卡片类型是通用工具处理得不好的。这样你就掌握了内容、设计和学生数据。可以将它与测验应用配合用于考试,或者将其集成到在线课程平台中。
使用 Mythex 搭建
Mythex 将这款应用构建为网页应用,你可以在任何手机上打开,并添加到主屏幕。在聊天中描述应用,在预览的手机尺寸画面中检查复习界面,并在需要时要求添加账户和学习进度保存功能——应用需要时,Mythex 会添加专用的数据库,如果卡片包含图片或音频,还会添加文件存储。在 Pro 版本中,Mythex 还可以把它封装为 Android 和 iPhone 应用,并提交到 Google Play 内部测试和 TestFlight。在信任调度函数之前,可以使用“询问”模式让代理解释其逻辑;应用可用时,发布到 mythex.ai 链接即可。
常见问题
什么是间隔重复?
间隔重复会在你可能快要遗忘某张卡片之前再次展示它。你熟悉的卡片会隔越来越长的时间再出现;你答错的卡片则很快会再次出现。与平均复习所有内容相比,它能让学习时间更有效。
我应该使用哪种间隔重复算法?
对于第一个版本,简单的 Leitner 盒子法或 SM-2 已经足够,而且容易测试。FSRS 是一种更新、更精确的调度算法,Anki 将其作为选项提供;当你积累了足够的复习历史数据以进行调优后,值得考虑使用它。
闪卡网页应用可以离线使用吗?
部分可以。渐进式网页应用可以缓存应用本身以及当天的卡片,使复习在无网络时也能进行,并在重新联网后同步。但如果同一份数据在两台离线设备上都做了复习,同步时就需要谨慎的合并规则,因此许多第一版通常仅支持在线使用。
我可以不写代码就搭建闪卡应用吗?
可以。AI 应用构建工具可以根据描述创建卡组、卡片、复习界面和调度逻辑。请给它提供调度规则的实际示例并检查结果,因为这套逻辑决定了应用能否真正帮助人们学习。