dramaling-vocab-learning/智能複習系統需求規格書.md

9.6 KiB
Raw Blame History

智能複習系統需求規格書 (SRS)

版本: 1.0 日期: 2025-09-25 項目: DramaLing 英語詞彙學習平台


1. 項目概述

1.1 業務目標

提升詞彙學習效率,通過科學的間隔重複算法,幫助學習者在最佳時機復習,達到長期記憶效果。

1.2 問題陳述

當前問題

  • 現有復習算法 (2^成功次數) 增長過快僅需9次成功就達到365天間隔
  • 學習者過早停止復習,導致詞彙遺忘
  • 缺乏個人化調整,所有詞彙使用相同復習頻率
  • 熟悉度計算不準確,無法反映真實學習進度

影響

  • 學習效率低下,重複學習已熟悉詞彙
  • 困難詞彙復習不足,容易遺忘
  • 學習者無法獲得準確的進度反饋

1.3 預期效益

  • 學習效率提升 30%:更精準的復習時機
  • 長期記憶率提升 40%:科學的間隔設計
  • 用戶滿意度提升:個人化學習體驗
  • 系統可擴展性:支援未來複雜學習策略

2. 用戶需求

2.1 目標用戶

  • 主要用戶: 英語學習者A1-C2各程度
  • 次要用戶: 教師、內容創建者

2.2 用戶故事 (User Stories)

US-001: 智能復習排程

作為學習者 我希望系統能根據我的學習表現智能安排復習時間 以便我能在最佳時機復習,提高學習效率

驗收標準

  • 系統根據答題表現動態調整復習間隔
  • 表現好的詞彙間隔延長,表現差的間隔縮短
  • 新詞卡的第一次復習在合理時間內安排

US-002: 個人化學習路徑

作為不同程度的學習者 我希望復習頻率能根據我的程度和詞彙難度調整 以便得到適合我程度的學習計畫

驗收標準

  • A1學習者學習C1詞彙時復習頻率較高
  • C1學習者學習A1詞彙時復習頻率較低
  • 系統能識別學習者程度並自動調整

US-003: 準確的進度反饋

作為學習者 我希望能看到準確的詞彙熟悉程度 以便了解自己的真實學習進度

驗收標準

  • 熟悉程度反映真實記憶強度
  • 進度顯示平滑增長,避免突然跳躍
  • 能區分短期記憶和長期記憶

2.3 使用場景

場景1: 日常復習

  1. 學習者打開應用,查看今日復習列表
  2. 系統根據復習算法推薦到期詞彙
  3. 學習者完成復習,提供答題反饋
  4. 系統更新復習間隔和熟悉程度
  5. 學習者查看學習進度報告

場景2: 新詞學習

  1. 學習者新增詞彙到學習列表
  2. 系統設定初始復習間隔1天
  3. 隔天學習者進行第一次復習
  4. 根據表現調整後續復習計劃
  5. 系統追蹤學習軌跡

3. 功能需求

3.1 核心功能模組

F-001: 間隔計算引擎

描述: 實作新的復習間隔計算算法

輸入

  • 當前間隔天數 (IntervalDays)
  • 答題結果 (isCorrect: boolean)
  • 信心程度 (confidenceLevel: 1-5, 可選)
  • 反應時間 (responseTime: number, 可選)

處理邏輯

新間隔 = 當前間隔 × 增長係數 × 表現係數

增長係數:
- 1-7天: 1.8
- 8-30天: 1.4
- 31-90天: 1.2
- 91天以上: 1.1

表現係數:
- 翻卡題: 0.5-1.4 (根據信心程度)
- 客觀題: 1.1 (答對) / 0.6 (答錯)

輸出

  • 新間隔天數 (1-365天)
  • 下次復習日期
  • 更新後的熟悉程度

F-002: 熟悉程度計算

描述: 重新設計熟悉程度計算邏輯

計算公式

熟悉程度 = Math.min(100,
  (成功次數 * 8) + (當前間隔/365 * 30) + (正確率 * 10) + 其他調整
)

業務規則

  • 新詞彙從0%開始
  • 達到90天間隔時約50-70%熟悉度
  • 達到365天間隔時約80-100%熟悉度

F-003: 復習排程系統

描述: 根據新算法生成每日復習列表

功能

  • 查詢到期詞彙 (NextReviewDate <= 今天)
  • 按優先級排序 (過期天數、難度等)
  • 支援每日復習上限設定
  • 智能分散,避免同時大量到期

3.2 API需求

API-001: 復習記錄API

POST /api/flashcards/{id}/review
Content-Type: application/json

{
  "isCorrect": boolean,
  "confidenceLevel": number,    // 1-5, 翻卡題使用
  "responseTimeMs": number,     // 反應時間(毫秒)
  "questionType": "flipcard" | "multiple_choice" | "fill_blank"
}

響應

{
  "success": true,
  "data": {
    "newInterval": 15,
    "nextReviewDate": "2025-10-10",
    "masteryLevel": 65,
    "improvementTip": "表現優秀,繼續保持!"
  }
}

API-002: 復習列表API

GET /api/flashcards/due?date=2025-09-25&limit=50

響應

{
  "success": true,
  "data": {
    "dueFlashcards": [...],
    "totalCount": 23,
    "priority": "由優先級排序"
  }
}

4. 非功能需求

4.1 性能需求

  • 計算響應時間: < 100ms
  • 復習列表載入: < 500ms
  • 支援並發用戶: 1000+ 同時在線
  • 資料庫查詢優化: 使用索引,避免全表掃描

4.2 可靠性需求

  • 算法準確性: 100%正確計算間隔
  • 資料一致性: 確保 IntervalDays 和 NextReviewDate 同步
  • 錯誤處理: 優雅處理邊界條件和異常輸入

4.3 可用性需求

  • 學習曲線: 新算法對用戶透明,無需額外學習
  • 向後相容: 現有詞卡資料平滑遷移
  • 配置靈活: 算法參數可調整

5. 驗收標準

5.1 功能驗收

AC-001: 算法正確性

  • 新詞卡第一次答對間隔為2天
  • 新詞卡第一次答錯間隔為1天
  • 連續答對的詞彙間隔逐漸增長
  • 答錯的詞彙間隔適度縮短
  • 間隔永不超過365天

AC-002: 熟悉程度準確性

  • 新詞彙熟悉程度為0%
  • 復習3次後熟悉程度約10-30%
  • 復習10次後熟悉程度約40-70%
  • 達到90天間隔時熟悉程度約60-80%

AC-003: 系統整合

  • 與現有 Flashcard 實體相容
  • API響應包含所有必要資訊
  • 前端正確顯示新的熟悉程度

5.2 性能驗收

  • 間隔計算 < 50ms
  • 復習列表生成 < 200ms
  • 1000個詞卡批次更新 < 5s

5.3 用戶體驗驗收

  • 復習頻率感覺合理,不會太頻繁或太稀疏
  • 學習進度顯示直觀
  • 系統切換對用戶無感知

6. 技術約束

6.1 現有系統整合

  • 資料庫相容: 必須使用現有 Flashcard 實體結構
  • API相容: 保持現有 API 介面不變
  • 前端整合: 熟悉程度顯示邏輯需更新

6.2 實作限制

  • 開發時間: 2-3個工作日
  • 測試時間: 1個工作日
  • 上線影響: 零停機時間部署

6.3 技術選擇

  • 算法實作: C# 服務類別
  • 資料儲存: SQLite 資料庫
  • 配置管理: appsettings.json

7. 實作規劃

7.1 開發階段

階段1: 核心算法實作 (Day 1)

  • 創建 SpacedRepetitionService 服務
  • 實作間隔計算邏輯
  • 單元測試覆蓋

階段2: API整合 (Day 2)

  • 修改 FlashcardsController
  • 更新復習相關端點
  • 整合測試

階段3: 前端更新 (Day 3)

  • 更新熟悉程度顯示
  • 修改復習界面
  • 端到端測試

7.2 測試策略

  • 單元測試: 算法邏輯正確性
  • 整合測試: API和資料庫整合
  • 用戶測試: 實際學習場景驗證

7.3 部署計劃

  • A/B測試: 50%用戶使用新算法
  • 監控指標: 學習完成率、用戶回饋
  • 回滾準備: 快速切換回舊算法

8. 風險評估

8.1 技術風險

  • 風險: 新算法可能影響現有學習進度
  • 緩解: 平滑遷移策略,保持用戶體驗一致性

8.2 業務風險

  • 風險: 用戶可能不適應新的復習頻率
  • 緩解: 提供算法切換選項,漸進式推出

8.3 性能風險

  • 風險: 複雜算法可能影響系統性能
  • 緩解: 算法預計算,結果快取

9. 驗證和測試

9.1 測試用例

TC-001: 新詞卡復習測試

前置條件: 用戶新增詞卡 "entrepreneurship"
測試步驟:
1. 系統設定 IntervalDays = 1
2. 用戶第一次復習答對
3. 驗證新間隔 = 2天
4. 用戶第二次復習答錯
5. 驗證新間隔 = 約2-3天不增長太多

預期結果: 間隔計算符合算法邏輯

TC-002: 長期學習軌跡測試

前置條件: 模擬一個詞彙的15次復習
測試步驟:
1. 模擬連續答對的情況
2. 記錄每次間隔變化
3. 驗證熟悉程度增長曲線
4. 確認最終間隔不超過365天

預期結果: 學習軌跡符合預期,熟悉程度平滑增長

9.2 性能基準

  • 算法計算: 平均 < 10msP99 < 50ms
  • 資料庫更新: 平均 < 20msP99 < 100ms
  • 內存使用: 增加 < 10MB

10. 附錄

10.1 術語定義

  • 間隔 (Interval): 兩次復習之間的天數
  • 熟悉程度 (Mastery Level): 詞彙掌握程度百分比
  • 增長係數: 間隔增長的倍數
  • 表現係數: 根據答題表現的調整倍數

10.2 參考資料

  • Hermann Ebbinghaus 遺忘曲線理論
  • SuperMemo SM-2 算法
  • Anki 間隔重複實作

10.3 相關文檔

  • 複習算法優化建議.md
  • 複習算法完整設計方案.md
  • 複習算法簡化說明.md

審核: [待填入] 批准: [待填入] 簽署日期: [待填入]