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 lintbun --filter @repo/web buildbun --filter @repo/server lintbun --filter @repo/server buildbun --filter @repo/server testbun --filter @repo/server test:e2ebun --cwd packages/database testbun --cwd packages/fsrs test- ReviewTask / ReviewStats 相关前端与共享类型测试
- Prisma migration deploy,确认无待应用 migration
下一步
Phase 4 还差两个收口点:
- Phase 4.4:离线评分队列与失败补偿。
- Phase 4.5:复习提醒与长期计划策略。
这两个补完后,FSRS 复习系统就可以作为后续 RAG 和 Agent 的长期记忆底座。