Anki v3 调度器

原文:The Anki v3 Scheduler

2021 调度器(「v3」)是 Anki 2.1 调度器(「v2」)的更新版本。

启用

从 Anki/AnkiMobile 23.10 和 AnkiDroid 2.17 开始,v3 调度器是默认且唯一的选项。

在更早的版本中,可以从首选项界面更改调度器。

兼容性

v2 和 v3 调度器是兼容的。你可以在它们之间切换而不需要完全同步,如果你在一个设备上使用 v3 并与另一个 设备同步(该设备使用 v2),这不会导致调度问题。

客户端支持:

  • Anki: 2.1.45+
  • AnkiMobile: 2.0.75+
  • AnkiWeb: 是
  • AnkiDroid: 2.17.0+

由于 v3 调度器使用不同的方式来收集和排序卡片,v2 和 v3 客户端在某天可能显示不同数量的即将到期卡片, 并且可能以不同的顺序显示它们。

更改

撤销

v3 调度器使用 Anki 的新撤销基建:你可以回答一张卡片,搁置另一张卡片,回答不同的卡片,然后依次撤销每 个操作。之前的调度器分别处理复习和非复习操作的撤销,因此对其中一个执行操作会清除另一个的撤销历史记 录。

每日限制

默认情况下,v3 调度器中的复习限制也适用于新卡片,因此当你有待处理的复习积压时,新卡片引入会减少/暂 停。例如,如果你有 200 张复习卡片和 20 张新卡片的限制,并且有 190 张复习卡片到期,则只会引入 10 张新 卡片。这可以防止积压情况恶化。

如果你发现此情况发生,建议的解决方案是增加你的复习限制,并在添加更多新卡片之前解决积压。如果你确定即 使有积压,你也想添加更多新卡片,可以在牌组选项中启用『新卡片不受复习上限影响』选项。

每个牌组的限制将控制从该牌组及其子牌组中收集卡片的数量。限制是从你选择的牌组应用的,因此如果你选择一 个子牌组,其父牌组的限制将不适用。例如,如果设置了以下限制:

  • 父级:100
  • 父级::子级:30
  • 父级::子级::孙级1:50
  • 父级::子级::孙级2:5
  • 父级::子级::孙级3:200

那么:

  • 如果你选择孙级3,你将获得最多 200 张卡片。
  • 如果你选择孙级2,你将获得最多 5 张卡片。
  • 如果你选择孙级1,你将获得最多 50 张卡片。
  • 如果你选择子级,你将从子级及其子牌组中获得最多 30 张卡片。从孙级2中获取的卡片不会超过 5 张。
  • 如果你选择父级,你将获得最多 100 张卡片,其中最多 30 张来自子级及其子牌组。

在早期的 Anki 版本中,v3 调度器不尊重中间限制,因此单击父级时,子级的限制不影响从孙子牌组获取的卡片 数量。

排序

增加了额外的牌组选项来控制新卡片和复习卡片的呈现顺序。新卡片可以从多个牌组混合,复习卡片可以选择按间 隔或子牌组排序。

当禁用搁置时,通过调整展示顺序,v3 调度器可以控制是否一起显示兄弟姐妹卡片。

控制新卡片和跨日学习卡片混合的选项已从首选项界面移动到牌组选项中。选项将从你选择学习的牌组中使用。

搁置

启用搁置时,卡片现在在学习环节开始时从卡片计数中排除。以前如果你有 10 张正面和 10 张反面卡片,计数会 从 20 开始并在复习时下降,但在 v3 中它们会直接从 10 开始。

因为点击一个牌组时会跳过兄弟姐妹卡片,所以你在牌组列表中看到的计数会与点击牌组时看到的不同。概览界面 会指出等待但已被跳过的卡片数量。

跨日学习的卡片(「跨日学习卡片」)可以像复习和新卡片一样被搁置。

模糊

添加到间隔的小随机延迟反映在答案按钮上,而不是仅在回答时应用。

计算延迟的方式也得到了改进——间隔少于一周的卡片获得更加均匀的延迟,随着间隔的增加,延迟量更加平滑地增 加。

跨日学习

跨日学习卡片现在受到复习限制。确定适合限制的内容时,Anki 首先收集跨日学习卡片,然后是复习卡片,最后 是新卡片。

筛选牌组

禁用重新调度的筛选牌组显示 4 个答案按钮。你可以为每个按钮配置时间延迟。为答案按钮设置此延迟为 0,意 味着该按钮将把卡片返回到它的原始牌组。

在早期版本中,可以为「重来」配置延迟。「困难」使用 1.5 倍的延迟,而「良好」使用 2 倍的延迟,「简单」 将卡片返回到它的原始牌组。

插件和自定义排程

v3 调度器是全新的重写,所以修改以前调度器的卡片收集或回答例程的插件将不适用于新的调度器。现在不再可 能选择性地替换调度器代码的部分(「猴子补丁」),因此一些插件可能难以在没有显著努力的情况下移植。

然而,v3 调度器确实提供了更多的调度控制。随着每张卡片的呈现,与每个答案按钮相关的时间和状态都经过预 先计算,可以通过在牌组选项界面底部输入一些 JavaScript 代码来修改计算的调度。

你输入的代码适用于整个集合,而不仅仅是使用该预设的牌组。

以下是一个示例。请注意,如果你想在 Anki 的 Qt5 版本中使用它,需要转译它,因为它使用现代 JavaScript。

例如:

// 打印现有状态
console.log(JSON.stringify(states, null, 4));

// 如果网络检查器已打开,则加载调试器
debugger;

// 如果困难按钮是一个初学间隔,设置为 123 分钟延迟
if (states.hard.normal?.learning) {
  states.hard.normal.learning.scheduledSecs = 123 * 60;
}

// 在重新调度的筛选牌组中应用相同的更改
if (states.hard.filtered?.rescheduling?.originalState?.learning) {
  states.hard.filtered.rescheduling.originalState.learning.scheduledSecs = 123 * 60;
}

// 当在复习中使用简单时,提高 0.2 的简单因子
if (states.good.normal?.review) {
  states.easy.normal.review.easeFactor = states.good.normal.review.easeFactor + 0.2;
}

由于这是用 JavaScript 实现的,它不仅限于计算机版本。AnkiMobile 和 AnkiDroid 都支持它,AnkiWeb 将来也 可能支持它。这将允许高级用户对标准调度行为进行调整,适用于所有平台。

各种调度状态在 SchedulingStates 中进行了 描述。