ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

Echo Loop 间隔复习调度实现全解析:从6小时到28天,以及FSRS记忆调度基础设施

Echo Loop 间隔复习调度实现全解析:从6小时到28天,以及FSRS记忆调度基础设施 Echo Loop 间隔复习调度实现全解析从6小时到28天以及FSRS记忆调度基础设施【免费下载链接】Echo-LoopEcho Loop 是一款科学、高效的 AI 英语听说训练 App通过精听、跟读、盲听、复述和间隔复习自动驱动学习者把每一段音频真正练懂、练熟、练到会说。项目地址: https://gitcode.com/echo-loop/Echo-LoopEcho Loop 是一款 AI 英语听说训练 App它的核心能力之一就是间隔复习调度一段音频首学完成后系统会自动安排 7 轮复习从 6 小时后一直排到 28 天后与此同时项目还新建了一套基于FSRS 记忆算法的通用记忆调度基础设施为收藏句子、词汇、意群等内容的科学复习打下地基。本文带你从用户视角和源码视角把这两套记忆引擎一次性讲清楚。一、用户视角复习节奏从 6 小时到 28 天1. 七轮复习排期表为什么是6小时→28天Echo Loop 对每段音频的复习节奏是刻意贴合记忆曲线设计的先密后疏节奏。阶段定义位于 lib/database/enums.dart 的LearningStage枚举其中intervalHours表示距上一轮完成后的等待时长轮次阶段距上一轮等待距首次学习的累计时间1review06 小时6 小时2review118 小时1 天3review224 小时2 天4review448 小时4 天5review772 小时7 天6review14168 小时14 天7review28336 小时28 天对应的取值逻辑见 lib/database/enums.dart#L166-L176。可以看到阶段名review1/review2/review4/review7/review14/review28正是首学后第几天的累计里程碑——先密集巩固再逐步拉长间隔直到 28 天完成最后一轮。2. 下次复习时间是怎么算出来的复习调度不需要复杂算法核心就是一个加法nextReviewAt 上一轮完成时间lastStageCompletedAt 当前阶段间隔intervalHours计算逻辑在 lib/models/learning_progress.dart#L202-L214。围绕这个时间点还有三个贴心的细节设计宽限窗口到点后不是错过就逾期。review0 到点后6 小时内、其余各轮到点后24 小时内补做都不算逾期见 learning_progress.dart#L220-L226。手动解锁等不及点击立即解锁即可提前开始当前轮且不会篡改历史完成时间后续轮次仍按实际完成时间顺延。⏸️暂停学习某段音频可以暂停出复习调度进度完整保留随时原地恢复。3. 每一轮复习做什么复习不是简单重听。每一轮复习阶段都会按学习计划派生若干子步骤主要包括难句补练把精听/盲听中卡壳的句子重新练会、盲听不看文本听全文、段落复述用自己的话复述段落。各轮次的子步骤组合由 lib/models/learning_plan.dart 中的LearningPlan.standard统一管理并采用计划版本快照机制——新版 App 调整了复习子步骤顺序比如 v2 把盲听后置、允许跳过存量音频仍保留创建时的旧计划互不干扰。二、源码视角FSRS 记忆调度基础设施全景固定七轮复习解决的是音频学习计划的调度。但收藏的句子、词汇、意群它们的遗忘速度因人而异固定的第 N 天复习并不够聪明。为此Echo Loop 新建了一套与业务解耦的通用记忆调度基础设施位于 lib/features/memory_scheduler/默认接入业界公认的 FSRS 记忆算法。完整的规划文档见 docs/memory-scheduler-infrastructure-plan.md。1. 分层架构第三方库只许待在一个房间里未来业务句子/词汇/意群/音频计划 ↓ MemoryScheduler应用门面接口 ↓ ↓ 调度 Repository 模型注册表 ↓ ↓ Drift DAO MemoryModelAdapter接口 ↓ FsrsMemoryModelAdapter ↓ package:fsrsdomain/纯 Dart 值对象与接口不依赖 Flutter、数据库和 FSRSapplication/编排用例与事务入口是 memory_scheduler.dartdata/Drift DAO 与数据映射adapters/fsrs/全项目唯一允许导入package:fsrs的位置核心是 fsrs_memory_model_adapter.dart。上层业务永远只见应用自有类型MemorySchedule、MemoryRating等UI 与数据库里不会出现任何 FSRS 第三方类型。2. 四个关键设计决策决策做法好处逐项绑定 Profile每条调度记录固定profileId profileVersion升级算法不重排存量数据独立调度表新建memory_schedulesmemory_review_events两张表句子/词汇/意群/音频共用一套 schema快照 事件历史当前状态快照用于日常查询评分事件只追加既快又可审计、可重放Adapter 隔离FSRS 库严格封装在 adapter 内部未来换算法调用方零改动3. FSRS 参数如何被冻结为了避免依赖升级悄悄改变行为基础设施把fsrs包精确锁定在 2.0.1并把默认 Profilefsrs.default1的全部参数逐项写死在 config/memory_profiles.dart 21 个模型权重与 FSRS 5 版默认值一致期望保持率 90%评分 Good 时下一次复习前记住这条内容的预期概率⏱️ 学习步骤 1 分钟 / 10 分钟重学步骤 10 分钟最大间隔 36500 天 开启 fuzzing到期时间加一点随机扰动打散复习峰值4. 四种评分与间隔预览复习时用户给内容打一个分数——忘记 / 困难 / 好 / 简单对应 FSRS 的 Again/Hard/Good/Easy。界面在展示按钮前会一次性调用previewRatings()拿到四种评分各自的下次到期时间用户可以直观看到选简单能拖多少天选忘记要多久后重学。预览是纯只读计算不写数据库。5. 数据可靠性事务、幂等与并发移动端场景下网络抖动、重复点击、多入口并发都是真实风险。评分提交review()的流程设计得相当严谨短读事务内按operationId做幂等检查——同一次评分动作重试会复用原键不会重复计分算法计算在写事务之外完成纯函数写事务内用revision乐观锁条件更新再在同一事务内插入带dueBefore/dueAfter的审计事件任一步失败整体回滚。对应的数据库结构经过 schema v47 → v48 迁移迁移行为由 test/database/v47_to_v48_migration_test.dart 等测试守护。三、两套调度的关系各司其职固定七轮复习FSRS 记忆调度基础设施服务对象音频学习整体句子 / 词汇 / 意群等记忆项节奏6小时→1天→2天→4天→7天→14天→28天按个人表现动态计算间隔输入阶段完成时间忘记/困难/好/简单 四档评分现状已全量上线基础设施已建成逐步接入业务一句话总结固定七轮保证每段音频都能被完整练熟FSRS 基础设施保证每条记忆都在最容易遗忘的时刻被复习。前者是学习节奏后者是记忆科学二者共同构成 Echo Loop 的复习引擎。想体验这套间隔复习流程或参与讨论实现细节欢迎加入 Echo Loop 的学习社区【免费下载链接】Echo-LoopEcho Loop 是一款科学、高效的 AI 英语听说训练 App通过精听、跟读、盲听、复述和间隔复习自动驱动学习者把每一段音频真正练懂、练熟、练到会说。项目地址: https://gitcode.com/echo-loop/Echo-Loop创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表