SmartRecall 中的 SM-2 演算法詳解

SM-2 間隔重複演算法的完整實現:初始間隔、ease factor 更新、lapse 規則,以及 SmartRecall 的實操調整,附完整算例。
4月 29, 2026

SmartRecall 中的 SM-2 演算法詳解

SM-2 是 Piotr Wozniak 在 1987 年的 SuperMemo 論文 裡發表的間隔重複演算法,也是 Anki 和 Mnemosyne 背後的演算法。本頁面把 SmartRecall 的實現講透 —— 每一個常數、每一個狀態轉移,附完整算例。

一句話原理

每複習一次,給本次回憶打分:

  • Again(0) —— 失敗,沒回憶起來
  • Hard(3) —— 想起來了,但很費勁
  • Good(4) —— 正常想起來
  • Easy(5) —— 一秒回憶

SM-2 用這個評分更新兩個數:

  1. 間隔(I —— 距離下一次複習的天數
  2. 難度係數(EF,Ease Factor) —— 控制間隔增長速度的乘數

評分越高 → EF 越大 → 間隔增長越快;評分越低 → EF 越小 → 間隔越緊。失敗會把間隔重置,但 EF 只是被略微下調。

SmartRecall 使用的精確規則

新卡片初始值:
  I  = 0       (首次複習時設定)
  EF = 2.5
  reps = 0     (連續成功複習次數)

每次複習,質量分 q (0–5):

  if q < 3:                  // 失敗 lapse
    reps = 0
    I    = 1                 // 間隔回到 1 天
    // EF 下面繼續更新

  else:                      // 成功
    if reps == 0: I = 1
    elif reps == 1: I = 6
    else:          I = round(I_prev * EF)
    reps = reps + 1

  EF = max(1.3, EF + (0.1 - (5 - q) * (0.08 + (5 - q) * 0.02)))

EF 公式在每個評分點折成易記的數:

評分qEF 變化
Again0−0.80
Hard3−0.14
Good40.00
Easy5+0.10

EF 下限被夾在 1.3 —— 不論失敗多少次,間隔都不會比這更慢地增長。

完整算例

一張新卡:"什麼是間隔效應?"

第幾次複習評分q複習後 reps複習後 EF複習後 I下次複習
1Good412.501 天明天
2Good422.506 天+6 天
3Easy532.6016 天+16 天
4Hard342.4639 天+39 天
5Again001.661 天明天(lapse)
6Good411.661 天+1 天
7Good421.666 天+6 天

需要注意的幾點:

  • 前兩次的間隔(1 天 → 6 天)是寫死的,不走乘法。SM-2 之所以這麼設計,是為了避免新卡因為高 EF 一下子飛到 30 天後才複習。
  • 第 4 次後的間隔是 round(16 * EF) = round(16 * 2.46) = 39
  • 第 5 次是 lapse —— reps 歸零,I 歸 1,但 EF 只下調 0.80(沒回到 2.5)。卡片是"受傷",不是"清零"。
  • lapse 之後,排程不會重複 1 → 6 的遞增;第 6 次成功之後 reps 升到 1,第 7 次直接走 6 天間隔。

SmartRecall 在 SM-2 之上做的三個調整

SM-2 是底線,不是天花板。我們做了三處務實改動:

  1. Hard 三連軟 lapse。 如果你連續三次給同一張卡評 Hard,下一次的間隔會被夾在 I_prev,不再繼續乘 EF。純 SM-2 會繼續放大間隔,讓你跟它越打越遠。
  2. Leech(釘子卡)識別。 一張卡一共 lapse 8 次後,會被打上 leech 標籤並出現在你的 Dashboard 上,提示你重寫這張卡。一張爛卡是工作流問題,不是演算法問題。
  3. 生成時間種子化的初始擴散。 AI 一次生成 200 張卡時,我們不會全部放在第一天覆習 —— 用卡片 ID 的確定性雜湊把首次 I = 1 的複習鋪到接下來 5 天裡,讓你的每日複習量保持平穩。

其餘部分 —— EF 公式、1/6 天階梯、1.3 下限、lapse 語義 —— 都和 1987 年的論文完全一致。

為什麼暫時不用 FSRS?

FSRS 是一個更新的排程器,會從使用者的複習歷史裡學習個性化遺忘曲線。在累計 ~1000 次複習之後,它的表現可測量地優於 SM-2。我們正在把 FSRS 作為可選排程器開發中 —— 進展看 更新日誌

延伸閱讀