人工智能Swift
educationai
面向学习类应用的 Swift 包:FSRS-6 间隔重复、学习队列、键入答案匹配与测验。
2星标数最新版本: v2.0.0 · 更新时间: 2026年10月15日
支持平台:iOS 17macOS 14tvOS 17watchOS 10visionOS 1
许可证: MIT
摘要
- 面向闪卡应用的学习逻辑:FSRS-6 间隔重复、学习队列、输入答案评分和测验。
- 测试在八种配置下重放来自 py-fsrs 6.3.2 的 2,400 次复习,并在每次复习后比较结果。
- SM2Scheduler 让 SM-2 数据继续可用,并在保留每张卡片到期日的同时将 SM-2 卡片转换为 FSRS。
- 仅依赖 Foundation 在设备上运行,适配 Swift 6 严格并发,且不包含任何神经网络。
- 在标签 v2.0.0 上,于 macOS 27.0.1 使用 Swift 6.4 通过了 11 个套件中的 124 项测试。
EducationAI 承载了闪卡或学习类应用的学习逻辑。FSRSScheduler 使用 FSRS-6(Anki 的 FSRS 调度器背后的记忆模型)决定每张卡片何时再次出现,其测试将 2,400 次复习与参考实现 py-fsrs 6.3.2 进行比对。SM2Scheduler 让 SM-2 数据继续可用,并将其转换为 FSRS。围绕调度器,还提供学习队列、支持拼写容错的键入答案评分、测验、难度调节器、工作量预测、复习统计和学习连续天数。它在设备上运行,只使用 Foundation,并针对 Swift 6 strict concurrency 编写。其中没有神经网络:FSRS 是一种统计记忆模型。
功能特性
- FSRS-6 已对照参考实现验证:测试在八种配置下重放由 py-fsrs 6.3.2 计算的 2,400 次复习,并在每次复习后比较稳定性、难度、到期日和可提取性
- 学习与重新学习步骤、期望保留率、最大间隔、间隔模糊(fuzz)和自定义权重(FSRS-6 的 21 个或 FSRS-5 的 19 个);为答题按钮提供四种评级的预览
- 按已发布规范实现的 SM-2,以及将 SM-2 卡片转换为 FSRS 并保留每张卡片到期日的转换功能
- 键入答案评分:忽略大小写、重音、字符宽度和标点,且不依赖设备语言;按答案长度容忍拼写错误;面对恶意输入时只做有界的工作量
- 由卡片生成的选择题和键入题测验;每个结果都会为调度器建议一个评级,已保存的测验在加载时会重新评分
- 学习队列:包含每日上限、逐日预测、保留率统计、按学习者的自然日计算的连续天数,以及将正确率保持在目标区间内的难度调节器
- Sendable、Codable 值类型:每个函数都接收其所用的日期,随机数来自可设置种子的生成器,已存储的值在使用前会先校验,而不是直接崩溃
- 无依赖,仅使用 Foundation;DocC 参考文档含四篇指南,另有适用于 iOS 和 macOS 的示例应用 StudyDeck
快速开始
swift
1struct FlashcardsView: View {2 @State private var cards = [3 Flashcard(front: "Capital of Japan", back: "Tokyo"),4 Flashcard(front: "Capital of Kenya", back: "Nairobi"),5 Flashcard(front: "Capital of Peru", back: "Lima")6 ]7 @State private var showsAnswer = false8 private let scheduler = FSRSScheduler.default9 10 var body: some View {11 if let card = StudyQueue.cards(from: cards).first,12 let index = cards.firstIndex(where: { $0.id == card.id }) {13 VStack(spacing: 24) {14 Text(card.front).font(.title)15 if showsAnswer {16 Text(card.back).font(.title2).bold()17 HStack {18 ForEach(Rating.allCases, id: \.self) { rating in19 Button(String(describing: rating).capitalized) {20 if let outcome = try? scheduler.review(card.review, rating: rating) {21 cards[index].review = outcome.state22 }23 showsAnswer = false24 }25 .buttonStyle(.bordered)26 }27 }28 } else {29 Button("Show Answer") { showsAnswer = true }30 .buttonStyle(.borderedProminent)31 }32 }33 .padding()34 } else {35 Text("All done for now")36 }37 }38}安装
Xcode (File › Add Package Dependencies…)
text
1https://github.com/muhittincamdali/educationai.gitSwift Package Manager (Package.swift)
swift
1dependencies: [2 .package(url: "https://github.com/muhittincamdali/educationai.git", from: "2.0.0")3],4targets: [5 .target(name: "YourApp", dependencies: [6 .product(name: "EducationAI", package: "educationai")7 ])8]截图




时间线
仓库创建;8 月 7 日打上 1.0.0 标签:一个带有学习模型的 EducationAI 类,依赖 Alamofire、RxSwift、SnapKit 和 SDWebImage
去除依赖后重写,拆分为 SM-2 调度器以及测验、进度、推荐和游戏化引擎
新增了对本地文件夹(../SwiftAI)的依赖,以及占位的“neural tutor”和“enterprise”类型;该包对其他任何人都无法再解析
2.0.0:围绕与 py-fsrs 6.3.2 一致的 FSRS-6 调度器重新构建;6 月的代码和所有 1.x 类型均已移除