Skip to content

错题复习决策方案

codebrick 的错题复习在后台自动排期:你做错的题,系统会决定它隔几天回到你面前。排期逻辑: FSRS 遗忘曲线加考前峰值调度,公式和参数都在文里。


1. 三个问题,决定一道题的命运

依据:

  1. 它会进复习吗? —— 错题驱动,做错的题才进。
  2. 它隔多久回来? —— 按你对这道题的记忆强度算,越接近考试排得越密。
  3. 它什么时候不再回来? —— 连续做对两次,自动出本。

2. 哪些题进复习:错题驱动

做对,系统默认不再安排复习;只有做错或点「不会」的题,才会进错题本、排进复习队列。

取舍。考研时间有限,把已经会的题反复推到你面前,省下来的注意力不如花在还没掌握的地方。代价是:那些「这次蒙对了、其实没真懂」的题,系统看不出来,不会主动帮你回炉——这部分得靠点「收藏」或主动重做。


3. 隔多久回来:先把遗忘曲线讲清楚

「隔多久」,核心是一条遗忘曲线。 FSRS 模型(Free Spaced Repetition Scheduler),它给每道题维护一个数字 —— 稳定性 S(单位:天),表示这道题在你脑子里能撑多久。

距离上次复习过了 t 天,你还能回忆起来的概率 R(t) 是:

R(t)=(1+FACTORtS)0.5,FACTOR=19810.234

这条公式的设计让 t=SR=0.9 —— 也就是说,稳定性 S 就是「记忆衰减到九成」所需的天数S 越大,曲线掉得越慢。

拿一道稳定性 S=7 天的题举例,它的回忆概率随天数是这样掉的:

距上次复习1 天3.5 天7 天14 天30 天60 天
回忆概率 R98%95%90%83%71%58%

知道了曲线,「隔多久回来」就好办了:设一个目标回忆率,反推它衰减到那个值要几天。 比如目标定在 90%,那这道 S=7 的题就排 7 天后;目标定得更高,就排得更早。反推公式是:

间隔=SFACTOR(R目标21)

每次你复习一道题,S 也会跟着更新:当时差点想不起来、却还是答对了,说明这次复习「含金量高」,S 涨得多;要是答错了,S 会大幅回落,这道题就回到「需要频繁见面」的状态。难度高的题 S 涨得慢,难度低的涨得快。这套更新规则是 FSRS 的核心,参数用的是社区拟合出的一组通用权重。


4. 越接近考试,排得越密:考前峰值调度

普通的间隔重复,目标是「无限期地把东西记住」。但考研不是无限期 —— 它有一个确定的截止日:12 月第三个周末。我们把目标改成一句更直接的话:让每道题在考试那天的回忆概率最高。

做法是让上一节里的「目标回忆率」随距考试天数往上爬:

距考试目标回忆率 R目标
60 天以上0.90
30–60 天0.92
14–30 天0.95
14 天以内0.98

离考试远的时候,目标低一点,间隔拉长,少陪练已经记得八九不离十的题,把时间留给新内容;临近考试,目标拔高,同一道题会被排得越来越密,把记忆顶到峰值。

还是那道 S=7 天的题,在不同时间点它的下次复习间隔:

距考试目标回忆率下次复习间隔
60 天以上0.90≈ 7.0 天
30–60 天0.92≈ 5.4 天
14–30 天0.95≈ 3.2 天
14 天以内0.98≈ 1.2 天

同样的记忆强度,离考试两个月时一周见一次,考前两周几乎天天见。

还有一条硬规则:任何复习都不会被排到考试日之后。 算出来的时间要是越过了考试日,就钳回考试当天 —— 排到考完才复习没有意义。


5. 什么时候出本:连对两次

一道错题,在复习里连续做对 两次,就自动移出错题本,不再排期。

为什么是两次而不是一次:一次做对可能是蒙的,或者是「刚看完答案还有印象」。隔了一个复习周期再做对一次,才比较能说明真的掌握了。中间只要错一次,连对计数清零,重新来过。


6. 做错那天,它先隔天回来

上面讲的遗忘曲线间隔,是给「在复习里做对」用的。如果你这次又做错了,规则更简单:次日回来。

具体是排到第二天的零点 —— 当天做错的题不会在同一天反复弹你,但「昨天错的题」今天一整天都算到期、随时能复习。这条之前踩过坑:早期实现按「答题时刻 + 24 小时」排,结果昨晚错的题今早不显示,非得等到同一个钟点才到期。现在按自然日算,对齐直觉。


7. 背诵卡共用同一套引擎

四科的每日记忆锚点卡(背诵卡)走的是同一套 FSRS + 考前峰值调度,只是把「做对/做错」换成三档自评:记得、模糊、忘了。错题复习和记忆卡,底层是同一个引擎,区别只在「答错的项隔多久回来」这条产品策略不同 —— 错题隔天,记忆卡当天还会再来一次。


8. 算法能力边界

这套算法目前站不住或还没做的地方:

  • FSRS 权重还是通用默认值,没用 408 数据重新拟合。 我们记录了每次复习的自评和结果(card_review_log),数据够了之后会按 codebrick 自己用户的遗忘规律重新拟合一组参数。现在的曲线是「社区平均人」的,不是「考 408 的你」的。
  • 考试日对所有人统一兜底成最近一个 12 月第三周末。 账号体系里还没有「备考届」字段,所以二战、提前备考 27 届的同学,考前峰值的节奏会偏。
  • 只调度错题。 第 2 节说过,做对的题不回炉,蒙对的题系统看不出来。

9. 欢迎反馈

如果你对上面某一条有不同看法 —— 比如「做对的题也该偶尔回炉」「考前峰值爬得太晚」「连对两次出本太松或太严」 —— 都可以告诉我们。QQ群里找我。


本文描述的是 2026-06 的线上实现。调度逻辑在 ExamPeakSchedulerFsrs 两个类里,遗忘曲线、间隔反推、目标回忆率随考试日上爬这三段都可以对着公式核。参数或策略调整后,本文会跟着更新。

最后更新:

一句数据说不清楚的事,我们用代码 + 公式 + 截图说清楚