
刚刚Anki 用户吵翻了新一代间隔重复算法 FSRS 到底开不开【免费下载链接】ankiAnki is a smart spaced repetition flashcard program项目地址: https://gitcode.com/GitHub_Trending/an/ankiAnki 的牌组选项页里有一个开关能让老用户犹豫很久是否启用 FSRS。一边是以复习量更少、遗忘更可控为论据的拥趸另一边是我复习了五年凭什么现在改算法的保守派。争论的焦点从来不是FSRS 好不好而是三件很实际的事它和 SM-2 到底差在哪、切换之后我积累的复习历史会不会被浪费、我该怎么根据自己的数据做决定。这篇文章把这三件事拆开讲。所有结论都基于 Anki 仓库中的真实源码核心调度逻辑全部用 Rust 实现于rslib/src/scheduler/和官方手册docs-site/manual/不引用任何无法验证的听说。FSRS 是什么DSR 三状态模型对易度因子的取代先说清楚老算法在做什么。Anki 至今保留着基于 SuperMemo 2SM-2的完整实现其核心逻辑在 rslib/src/scheduler/states/review.rs 里一目了然卡片毕业进入复习阶段后拿到一个初始易度因子INITIAL_EASE_FACTOR: f32 2.5按按钮线性增减——pub const INITIAL_EASE_FACTOR: f32 2.5; pub const MINIMUM_EASE_FACTOR: f32 1.3; pub const EASE_FACTOR_AGAIN_DELTA: f32 -0.2; pub const EASE_FACTOR_HARD_DELTA: f32 -0.15; pub const EASE_FACTOR_EASY_DELTA: f32 0.15;Good 的下次间隔就是当前间隔 × 易度因子见同文件passing_nonearly_review_intervals。整个模型只有一个自由度ease。它无法回答这张卡到底什么时候会忘只能靠一个缓慢漂移的系数去近似。FSRS 则建立在官方文档 docs-site/faqs/what-spaced-repetition-algorithm.mdx 所述Three Component Model of Memory之上每张卡片维护一组DSR 记忆状态SStability稳定性可提取性从 100% 衰减到 90% 所需的天数DDifficulty难度这张卡本身有多难决定了复习后稳定性增长的快慢RRetrievability可提取性此刻能回忆起来的概率由 S 和距上次复习的时间推得每天变化而 D、S 只在每次作答后更新。在源码里这组状态直接挂在卡片对象上rslib/src/scheduler/answering/review.rs 中每次作答后self.card.memory_state next.memory_state;把新的 S、D 写回卡片。作答按钮的效果也完全改变——不再是加减 ease而是按 what-spaced-repetition-algorithm.mdx 的描述Again 使稳定性骤降、难度骤升Easy 使稳定性大幅上升、难度下降。工程上有两个细节值得注意它们直接解释了迁移成本参数是优化出来的不是设计出来的。Anki 通过 workspace 依赖引入社区维护的fsrscrate见根目录 Cargo.toml[workspace.dependencies.fsrs] version 6.6.2并内置优化器rslib/src/scheduler/fsrs/params.rs 会训练后做健康检查health_check_passed当训练集超过 300 条记录时才返回评估结果。也就是说FSRS 的准来自对你个人 revlog 的机器学习拟合——没有足够复习数据的人FSRS 只有默认参数没有个性化优势。历史记忆状态是算出来的不是搬过来的。开启 FSRS 时rslib/src/scheduler/fsrs/memory_state.rs 的set_memory_state会优先回放完整 revlog 推导初始 S、D如果 revlog 被截断常见于导入的旧卡组或清理过历史的集合则退而用fsrs.memory_state_from_sm2(ease_factor, interval, historical_retention)从 SM-2 的 ease 和间隔反推一个近似起点。这段代码意味着你的五年复习历史没有被扔掉而是被翻译进了 DSR 模型——这也是官方敢于在 23.10 把 FSRS 集成为内置算法的底气见 docs-site/releases/changes/changes/23.10.mdx当时还要求清掉自定义调度里的旧 FSRS 代码。为什么现在吵三个真实的迁移顾虑社区里对 FSRS 的分歧本质上是这三个问题每一个都能在仓库里找到对应的证据顾虑一复习量会不会突然爆炸官方手册 docs-site/manual/deck-options.mdx 明确说开启 FSRS 时Reschedule Cards on Change默认是关闭的——future reviews will use the new scheduling, but there will be no immediate change to your workload并特意警告从 SM-2 首次切换时不建议打开重排期因为它会让大量卡片立刻到期且给每张卡都追加一条 revlog、撑大集合体积。但注意不重排期也意味着你短期内看不到 FSRS 的任何效果——旧间隔还要按旧日期到期。所以开了没感觉和开了爆炸是同一枚硬币的两面这正是论坛里各执一词的根源。顾虑二我的使用习惯会不会被算法惩罚手册写得很直白FSRS 无法适应一种习惯——忘答时按 Hard 而不是 Again。因为 Hard 是及格分按 Hard 会让所有间隔变得unreasonably high。此外官方 FAQ docs-site/faqs/frequently-asked-questions-about-fsrs.mdx 的健康检查一节列举了 FSRS 失效的典型原因复习量太少少于几百条、Hard 误用、忘答不按 Again。也就是说FSRS 对作答纪律的依赖比 SM-2 更强数据不干净的人开 FSRS 反而更糟。顾虑三生态兼容性与客户端版本。手册Before Enabling清单要求Anki 23.10、AnkiMobile 23.10、AnkiWeb、AnkiDroid 2.17 全端支持且曾使用自定义调度版 FSRS 的必须先清空自定义调度同时提醒任何会修改间隔和调度的插件都不建议与 FSRS 同用。对重度插件用户来说这是实打实的迁移摩擦。另外 docs-site/manual/deck-options.mdx 还要求把学习/重学习步骤全部设到 1 天以内否则可能出现 Hard 按钮显示的间隔比 Good 更长这类反直觉现象。还有一个常被忽略但源码里写死的约束FSRS 是全局开关。rslib/src/deckconfig/update.rs 中self.get_config_bool(BoolKey::Fsrs) ! req.fsrs判断后写入的是集合级配置BoolKey::Fsrs而非预设级——你无法日语预设用 FSRS、地理预设用 SM-2。这直接排除了先小范围试点的路线要么全有要么全无。到底开不开按你的复习数据给判断框架把上面的约束收敛成决策树其实只需要回答四个问题。第一问你的复习历史有多长、多干净FSRS 优化器以 revlog 为训练数据。历史短几百条以内、或作答混乱忘答按 Hard的用户得到的只能是一套与默认值差异不大的参数个性化红利为零迁移成本却照付。这类情况建议先保持 SM-2把作答纪律修正一两个月再切。反过来revlog 完整且作答规范的用户memory_state_from_sm2的回退路径都不会触发S、D 全部由真实历史回放得出是收益最大的一批人。第二问你想用哪个旋钮控制复习强度这是两个算法最根本的体验差异。SM-2 里你调的是起始易度、易度增益、间隔乘数这类间接参数FSRS 里只有一个核心旋钮——期望保留率desired retention源码里的默认值就是desired_retention: 0.9见 rslib/src/deckconfig/mod.rs。官方给的压力曲线非常直观手册的措辞是超过 90% 后工作量迅速攀升超过 97% 会压垮人。如果你希望把记住多少变成一个可以直接设定和验证的目标配合Ascending retrievability排序和 rslib/src/stats/graphs/retrievability.rs 中的可提取性统计来验证FSRS 的模型明显更贴合这种诉求。第三问你能接受首次间隔变长吗官方 FAQ 第一条就承认FSRS 的 Good 首次间隔普遍比 SM-2 长SM-2 毕业固定 1 天→6 天的节奏不再成立但对成熟卡片恰恰相反——FSRS 更保守。对新卡占比较高的卡组语言学习常见切换后前两周的体感往往是怎么都不回来对以成熟卡为主的卡组则更可能是复习量下降。两种体验都正常提前知道预期就不会误判。第四问你的多端环境和插件生态允许吗任何一端旧客户端不支持FSRS 数据同步就会出问题依赖改间隔类插件官方点名if an add-on affects intervals and scheduling in some way, it shouldnt be used with FSRS的需要先做减法。综合建议复习量 ≥ 数千条、作答习惯干净、以成熟卡为主、全端已是新版——开且不勾Reschedule Cards on Change按一个月重新优化一次参数的节奏走刚起步或习惯混乱——先不急着开把数据攒干净FSRS 的优势本质上是用数据换精度没有数据就没有优势。SM-2 不会从 Anki 里消失两条路径至今并存于 rslib/src/scheduler/states/review.rs 的ctx.fsrs_next_states分支判断中这个开关的意义不是新取代旧而是让你自己决定愿意用多少迁移成本换多少调度精度。【免费下载链接】ankiAnki is a smart spaced repetition flashcard program项目地址: https://gitcode.com/GitHub_Trending/an/anki创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考