2026-06-14:Phase 3 到 Phase 4,复习系统开始闭环

0 阅读3分钟

2026-06-14:Phase 3 到 Phase 4,复习系统开始闭环

今天完成了什么

今天的主线从 Phase 3 的 AI 讲题结构化开始,推进到 Phase 4 的 FSRS 复习系统。到收尾时,Phase 4.1、Phase 4.2 和 Phase 4.3 都已经完成并合并回 main

Phase 3 解决的是“AI 识别出来的内容能不能稳定变成业务数据”。OCR 不再只输出一段 Markdown,而是输出 display Markdown + structured JSON envelope。前端保存错题、生成追问上下文和处理多题输入时,优先读取结构化字段,而不是脆弱地拆 AI 文本。

Phase 4 开始把错题变成长期复习对象。错题可以生成 Card,复习评分会写入 ReviewLog,今日任务最终迁移到了持久化 ReviewTask。

Phase 3:结构化识题

之前的 OCR 输出更像“给用户看的一段讲解”,前端如果想保存错题,就需要从 Markdown 里解析题目、答案、知识点和解析。这条路很容易被格式波动打断。

今天把这条链路改成:

OCR 模型输出
  -> display Markdown 给用户看
  -> structured JSON 给程序用
  -> OcrRecord.parsedJson 持久化
  -> activeStudyContext 支持后续追问
  -> WrongQuestion 保存使用结构化字段

多题图片也有了明确边界:每一道题都有独立 questionId,保存错题时使用 sourceGroupId:questionId 做防重。用户可以单题保存,也可以批量保存。

Phase 4.1:FSRS 复习闭环

Phase 4.1 先做最小闭环,不急着引入复杂任务表:

  • @repo/fsrs 作为纯算法包,负责 Again / Hard / Good / Easy 调度。
  • Card 支持从 WrongQuestion 创建。
  • ReviewLog 记录每次评分。
  • 错题详情页可以加入复习计划。
  • 今日任务可以读取到期复习卡,并提交四档评分。

这一步让“错题本”不再只是收藏夹,而是能进入复习计划。

Phase 4.2:学习统计

Phase 4.2 增加 /stats 学习统计页和服务端聚合 API。统计口径以 ReviewLog 为事实来源,避免前端扫描本地缓存。

页面目前展示:

  • 复习总览。
  • 7 天 / 30 天复习趋势。
  • 评分分布。
  • 卡片状态。
  • 最近复习记录。

今天也顺手打磨了趋势图。最早的 30 天柱状图在移动端太挤,后来改成 SVG 面积折线图,并继续把线条和颜色收轻,让它更像学习产品里的轻量趋势,而不是一张很重的数据图。

Phase 4.3:ReviewTask 持久化任务流

Phase 4.3 是今天最关键的业务数据升级。

之前今日任务直接从到期 Card 派生,用户跳过、完成、恢复这些状态都不够稳定。现在新增 ReviewTask 表,把任务生命周期持久化:

Card 到期
  -> /review-tasks/today 懒生成 ReviewTask
  -> 用户可跳过 / 恢复 / 评分
  -> 评分时事务内更新 Card + 写 ReviewLog + 完成 ReviewTask

跳过和恢复只改变 ReviewTask,不写 ReviewLog,也不更新 Card。这样统计仍然干净:/stats 只把真实复习记录算进去,不把“跳过”当成学习成果。

当前状态

到今天结束:

  • Phase 3 已完成:OCR structured output、多题保存、activeStudyContext、tool action proposal 边界。
  • Phase 4.1 已完成:WrongQuestion-first FSRS 复习闭环。
  • Phase 4.2 已完成:Review stats/logs API 与学习统计页。
  • Phase 4.3 已完成:ReviewTask 持久化任务流、评分完成、跳过和恢复。
  • 主分支已完成合并和验证。

验证

今天收尾时重新在 main 上跑了验证:

  • bun --filter @repo/web lint
  • bun --filter @repo/web build
  • bun --filter @repo/server lint
  • bun --filter @repo/server build
  • bun --filter @repo/server test
  • bun --filter @repo/server test:e2e
  • bun --cwd packages/database test
  • bun --cwd packages/fsrs test
  • ReviewTask / ReviewStats 相关前端与共享类型测试
  • Prisma migration deploy,确认无待应用 migration

下一步

Phase 4 还差两个收口点:

  1. Phase 4.4:离线评分队列与失败补偿。
  2. Phase 4.5:复习提醒与长期计划策略。

这两个补完后,FSRS 复习系统就可以作为后续 RAG 和 Agent 的长期记忆底座。