جميع حزم المصدر المفتوح
الذكاء الاصطناعيSwift

educationai

حزمة Swift لتطبيقات الدراسة: التكرار المتباعد FSRS-6، وطابور الدراسة، ومطابقة الإجابات المكتوبة، والاختبارات القصيرة.

2النجومآخر إصدار: v2.0.0 · آخر تحديث: 15 أكتوبر 2026
الأنظمة الأساسية:iOS 17macOS 14tvOS 17watchOS 10visionOS 1

الترخيص: MIT

ملخص

  • منطق التعلّم لتطبيقات البطاقات التعليمية: التكرار المتباعد FSRS-6، وطابور مراجعة، وتقييم الإجابات المكتوبة، واختبارات قصيرة.
  • تعيد الاختبارات تشغيل 2,400 مراجعة من py-fsrs 6.3.2 عبر ثمانية إعدادات وتقارن النتائج بعد كل مراجعة.
  • يُبقي SM2Scheduler بيانات SM-2 قابلة للعمل، ويحوّل بطاقات SM-2 إلى FSRS مع الحفاظ على موعد استحقاق كل بطاقة.
  • يعمل على الجهاز باستخدام Foundation فقط، ويتوافق مع التزامن الصارم في Swift 6، ولا يحتوي على أي شبكة عصبية.
  • نجح 124 اختبارًا ضمن 11 مجموعة عند الوسم v2.0.0 باستخدام Swift 6.4 على macOS 27.0.1.

تحتوي EducationAI على منطق التعلّم في تطبيق بطاقات تعليمية أو تطبيق دراسة. يقرّر FSRSScheduler موعد عودة كل بطاقة باستخدام FSRS-6، وهو نموذج الذاكرة الذي يقوم عليه مجدوِل FSRS في Anki، وتقارن اختباراته 2,400 مراجعة بالتنفيذ المرجعي py-fsrs 6.3.2. ويُبقي SM2Scheduler بيانات SM-2 صالحة للعمل ويحوّلها إلى FSRS. وحول المجدوِل يوجد طابور دراسة، وتقييم للإجابات المكتوبة مع التسامح مع الأخطاء الإملائية، واختبارات قصيرة، ومُعدِّل للصعوبة، وتوقّع لحجم العمل، وإحصاءات للمراجعة، وسلاسل دراسة متتالية. يعمل على الجهاز، ولا يستخدم سوى Foundation، وهو مكتوب لـ Swift 6 strict concurrency. وليس فيه أي شبكة عصبية: FSRS نموذج إحصائي للذاكرة.

الميزات

  • FSRS-6 مُتحقَّق منه مقابل المرجع: تعيد الاختبارات تشغيل 2,400 مراجعة حسبها py-fsrs 6.3.2 عبر ثماني إعدادات، وتقارن الثبات والصعوبة وموعد الاستحقاق وإمكانية الاسترجاع بعد كل مراجعة
  • خطوات التعلّم وإعادة التعلّم، ونسبة الاحتفاظ المطلوبة، والحد الأقصى للفاصل الزمني، وتشويش الفواصل (fuzz)، وأوزان مخصّصة (21 من FSRS-6 أو 19 من FSRS-5)؛ ومعاينة للتقييمات الأربعة لأزرار الإجابة
  • SM-2 كما نُشر، وتحويل لبطاقات SM-2 إلى FSRS يحافظ على موعد استحقاق كل بطاقة
  • تقييم الإجابات المكتوبة بحيث يتجاهل حالة الأحرف والعلامات المصاحبة للحروف (accents) وعرض الأحرف وعلامات الترقيم دون الاعتماد على لغة الجهاز، ويتسامح مع الأخطاء الإملائية بحسب طول الإجابة، ويؤدي عملًا محدودًا عند مواجهة مدخلات خبيثة
  • اختبارات قصيرة متعددة الخيارات واختبارات بإجابة مكتوبة تُبنى من البطاقات؛ تقترح كل نتيجة تقييمًا للمجدوِل، ويُعاد تصحيح الاختبار المحفوظ عند تحميله
  • طابور دراسة بحدود يومية، وتوقّع لكل يوم، وإحصاءات للاحتفاظ، وسلاسل تُحسب بأيام التقويم الخاصة بالمتعلّم، ومُعدِّل للصعوبة يُبقي الدقة ضمن نطاق مستهدف
  • أنواع قيمية Sendable وCodable: تأخذ كل دالة التاريخ الذي تعمل به، وتأتي العشوائية من مولّد يمكنك تهيئته ببذرة، ويُتحقَّق من القيم المخزَّنة قبل استخدامها بدلًا من التعطّل
  • بلا اعتمادات خارجية، Foundation فقط؛ مرجع DocC مع أربعة أدلة، وتطبيق المثال StudyDeck لنظامي iOS وmacOS

البدء السريع

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 = false
8 private let scheduler = FSRSScheduler.default
9 
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 in
19 Button(String(describing: rating).capitalized) {
20 if let outcome = try? scheduler.review(card.review, rating: rating) {
21 cards[index].review = outcome.state
22 }
23 showsAnswer = false
24 }
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.git

Swift 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]

لقطات الشاشة

شاشة المراجعة في تطبيق المثال: البطاقة Capital of Vietnam وإجابتها Hanoi، والذاكرة عند 90 %، وأربعة أزرار تقييم عنوانها 10m Again و1mo Hard و2mo Good و3mo Easy
سؤال اختبار بإجابة مكتوبة، Capital of Morocco، أُجيب عنه بـ Raba: تقول الملاحظة Almost، فالكتابة الصحيحة Rabat مع خطأ إملائي واحد، وتُجدوَل البطاقة بتقييم Hard
شاشة التقدّم: سلسلة من 21 يومًا، وأفضل سلسلة 21، والاحتفاظ 91 %، و84 مراجعة، ومخطط أعمدة للبطاقات المستحقة في كل يوم من الأيام الـ14 القادمة
قائمة المجموعات: كل عاصمة مع دولتها وموعد استحقاقها ومدى تذكّرها الآن، مثل Hanoi مستحقة الآن عند 90 %

الجدول الزمني

  1. فُتح المستودع؛ وُسمت النسخة 1.0.0 في 7 أغسطس: صنف EducationAI مع نماذج تعلّم، يعتمد على Alamofire وRxSwift وSnapKit وSDWebImage

  2. أُعيدت كتابته دون اعتمادات خارجية على هيئة مجدوِل SM-2 ومحركات للاختبارات القصيرة والتقدّم والتوصيات والتلعيب

  3. أُضيف اعتماد على مجلد محلي (../SwiftAI) وأنواع نائبة باسم «neural tutor» و«enterprise»؛ ولم تعد الحزمة قابلة للحلّ لدى أي شخص آخر

  4. 2.0.0: أُعيد بناؤها حول مجدوِل FSRS-6 يطابق py-fsrs 6.3.2؛ وأُزيل كود يونيو وكل أنواع الإصدار 1.x

الروابط

مقالة ذات صلة

قراءة المقالة (English)