用AI开发者空间做一个间隔重复闪卡工具:算法简化与二次发布避坑记录
一、需求:把碎片时间用在复习上
背单词和记知识点最怕“学了就忘”。间隔重复(Spaced Repetition)的思路是:快忘的时候再复习一次,记得越牢,下次间隔越长。Anki 是这类工具的代表,但对只想在手机浏览器里随手刷几张卡的场景来说偏重。于是我在华为云 AI 开发者空间体验版里,用 AI Shell 做了一个纯前端的小工具“碎片背卡”。
二、需求描述
- 卡片翻转:点击正面查看答案;
- 三档评分:记住 / 模糊 / 忘记,自动安排下次复习时间;
- 卡片组增删改,支持 JSON 导入导出;
- 统计今日待复习数量、连续打卡天数、累计复习次数;
- 数据存 localStorage,深浅色自适应,适配手机;
- 纯前端单页,不依赖后端和第三方 CDN;只在项目目录内读写文件,不调用任何云资源。
三、调度算法:从 FSRS 到“够用就好”
需求里写的是“FSRS 简化版”。完整的 FSRS 需要记忆稳定性、难度、可提取性等参数和训练过的权重,对一个单页小工具来说太重。AI 在思考过程中权衡后,落地成了接近 SM-2 的简化方案,每张卡只维护两个量:间隔 interval(天)和难度系数 ease(初始 2.5)。
- 记住:ease 增加 0.1(上限 3.5),interval = interval × ease;
- 模糊:ease 减少 0.15(下限 1.3),interval = interval × 1.3;
- 忘记:ease 减少 0.2(下限 1.3),interval 重置为 1,明天再复习。
首次复习后间隔 1 天,第二次 3 天,之后按难度系数倍增。评分按钮上会实时预测“下次复习时间”,点之前就知道这次选择的后果。对个人刷卡来说,这个精度已经足够;如果以后要做大规模卡片库,再换成真正的 FSRS 参数模型也不迟。
四、生成结果
AI 生成了 index.html、style.css、app.js 和中文 README.md 四个文件。卡片翻转用 CSS 3D rotateY 实现,也支持空格 / 回车键翻转;深浅色跟随系统 prefers-color-scheme,并可手动切换记忆。首次打开会自动创建一个“大学英语高频词”示例卡片组,可以直接体验。最后用 python3 -m http.server 5500 启动预览,curl 确认三个资源都返回 HTTP 200。
五、二次发布:这次提前把坑填上
这是我第二次用展览馆的发布 Skill(huawei-cloud-publish-work-to-gallery)上架作品。上次踩过几个坑,这次直接写进了给 AI 的指令里:
- 先建 .gitignore 再 git init。发布 Skill 会安装到项目下的 .agents/ 目录并生成 skills-lock.json。上次是提交之后才发现,只好用 orphan 分支重建历史。这次先写好 .gitignore,首个提交就只有 5 个项目文件。
- 凭证不落进对话记录。上次智能体直接 cat 了 GitCode 的 auth.toml,token 明文出现在对话里。这次明确要求只能通过脚本从文件读取凭证。它用 Python 的 tomllib 解析文件,只打印字段结构和用户名,token 本身从未输出。
- 复用已有的 IAM 委托。首次发布会创建 SELF_VERIFY 自委托用于生成短期 STS 凭证,这次说明“已存在、直接复用”,没有新建任何 IAM 资源。
- 保留体验隧道。上次发布成功后 Skill 顺手删除了 DevBridge 隧道,作品页的在线体验随即失效。这次要求保留隧道。
- 人工关卡不让 AI 代劳。GitCode OAuth 授权链接 300 秒有效,必须本人在浏览器打开;选择投稿活动时让它列出选项后停下等我确认,并按活动 ID 映射核对名称,避免序号对错。
六、几点体会
- 需求里写“某某算法简化版”时,AI 会自己做取舍,最好让它在结果里说明实际用的是什么,避免名不副实。
- 同一个流程第二次走,最大的价值是把第一次的教训变成指令里的硬约束。约束写得越具体,AI 越不容易“好心办坏事”。
- 体验版容器有时长限制、到期释放,代码要及时推送到 Git 仓库;在线体验地址依赖容器,长期展示最好部署到固定环境。
项目代码已开源在 GitCode:hid86006757/study-flashcard;作品已上架开发者作品展览馆,作品 ID 007858b922c00000。
- 点赞
- 收藏
- 关注作者
评论(0)