edu-companion(苹果果)深度分析报告

原创:苹果果 | 2026-06-28 基于项目源码 (~51K 后端 + ~47K 前端 + ~5.4K 测试) 全面审查


一、项目定位:它现在是什么?

一句话: 个人 AI 伴学系统,覆盖自学全生命周期。

阶段 功能 技术深度
课前 知识图谱导航、前置诊断、学习规划 CognitiveNode 5 层级 + ZPD 调度
课中 多模态对话、自适应练习、苏格拉底追问 LLM 流式 + SM-2 间隔重复
课后 学情追踪、行为分析、遗忘曲线 15 子系统 + 22 方程
全程 心理陪伴、习惯养成、成就系统 情绪分析 + 12 成就 × 3 级

这是一个人从零写到 v8.4.2的项目——16 个 Phase + 4 轮重构,几百个文件、近百页文档。

它的真实身份更像一个个人技术实验场——每个”先进教育理论”都被实现成了代码:ACT-R 激活、Beta 信念、SM-2 间隔重复、Vygotsky ZPD、Bloom 分类法、情绪检测、行为分析……理论上几乎覆盖了所有主流学习科学模型。


二、技术架构评估

✅ 做得好的

1. 架构设计有自觉性 - 从 v4.0 到 v8.0,经历了清晰的架构演进:DDD 分层、领域/服务/基础设施三层分离 - shared/protocols + DI 容器实现依赖倒置 - 独立认证网关(与业务完全解耦)

2. 代码质量持续治理 - v4.0 重构净删 ~2500 行(-72% 对话状态、-84% 分析模块) - v0.9.3 熵值治理:静默 except 从 31→0,console.log 从 66→17 - 有 ADR(架构决策记录)体系,22 条决策有案可查

3. 认知引擎够深 - 15 个子系统:激活、信念、预测编码、认知负荷、趋势、调度、元认知、投入度、深度处理…… - 22 个方程:Beta 后验更新、ACT-R 基水平衰减、EWMA 趋势、Bloom 分类映射 - 不是”套壳 ChatGPT”,有真实的认知建模

4. 文档体系完整 - docs/ 有架构总览、模块设计、spec 规格、ADR 记录 - MAINTENANCE.md 维护指南 694 行 - CHANGELOG.md 1219 行,每次变更都有记录

⚠️ 存在的不足

1. 测试覆盖率严重不足(⛔ 核心问题)

后端 + 前端 ≈ 98,000 行 | 测试 ≈ 5,474 行
测试覆盖率 ≈ 5.5%

2. 认知模型的落地深度不足

模型 实现程度 实际使用
Beta 信念 ⭐⭐⭐ 方程完整 练习更新、掌握度计算有使用
ACT-R 激活 ⭐⭐ 模型定义完整 节点排序有使用,但参数未自动调优
SM-2 间隔重复 ⭐⭐⭐ 完整实现 练习调度核心
预测编码 ⭐ 模型定义 几乎未被下游使用
元认知/深度处理 ⭐ 字段定义 存储了但不查询

很多子系统定义得很好但没有被真正用起来——代码中有字段、有 schema,但后续查询、决策链路中并没有引用它们。

3. pgvector 未真正部署

记忆中提到 pgvector not installed,向量搜索是应用层手写余弦距离 + DOUBLE PRECISION[]。数据量小的时候可以工作,但: - 没有索引,搜索是 O(n) 全表扫描 - 没有 HNSW/IVFFlat 加速 - 当题库/素材量到万级时性能会急剧下降

4. 前端 State Management 有碎片化风险

5. LLM 强耦合,无离线回退

6. God File 残留

虽然 v0.9.3 治理将 8 个 god file 降到了 4 个,但: - conversation_routes.py 770 行 - practice_service.py 738 行 - tree_crud.py 560 行

超过 500 行的文件仍然存在,说明部分模块边界还不够干净。


三、与竞品(主流 AI 教育产品)的对比

维度 苹果果 Khan Academy + Khanmigo Quizlet + Q-Chat Duolingo Max
认知诊断深度 ⭐⭐⭐ 15 子系统 ⭐ 简单知识状态 ⭐ 无 ⭐⭐ 间隔重复
自适应练习 ⭐⭐⭐ SM-2+ZPD ⭐⭐ 掌握度分级 ⭐ 闪卡 ⭐⭐⭐ 精细间隔
知识图谱 ⭐⭐⭐ 5 层力导向 ⭐⭐ 课程树 ❌ 无 ❌ 无
情绪分析 ⭐⭐⭐ 11 类检测 ❌ 无 ❌ 无 ❌ 无
多模态输入 ⭐⭐ OCR+语音+图片 ⭐ 图片 ⭐⭐
内容库规模 ❌ 无 ⭐⭐⭐⭐⭐ 10K+课程 ⭐⭐⭐⭐ 用户生成 ⭐⭐⭐ 高投入
用户基数验证 ❌ 无 ⭐⭐⭐⭐⭐ 亿级 ⭐⭐⭐⭐⭐ 亿级 ⭐⭐⭐⭐⭐ 亿级
A/B 测试能力 ❌ 无 ⭐⭐⭐⭐ 有 ⭐⭐⭐ 有 ⭐⭐⭐⭐⭐ 有

苹果果的核心竞争力在认知引擎深度——它比任何主流产品都更认真地对待”学生到底知道多少”这个问题的数学建模。但最大短板是没有任何真实用户数据来验证这些模型是否真的有效。


四、如何引入先进思想

4.1 认知诊断升级:从 BKT 到 DKT

现状: 使用 Beta 信念(经典 BKT 贝叶斯版本)+ 22 个手写方程

升级路线:

Phase 1: BKT → DKT(Deep Knowledge Tracing)
- 用 transformer 替代 Beta 分布作为掌握度估计器
- 输入:学生答题序列 (question_id, correct, timestamp, time_spent)
- 输出:每个知识点的 p(correct) 预测值
- 优势:不依赖手动设计的动力学方程,数据驱动

Phase 2: DKT + IRT 联合建模
- 引入题目参数(难度、区分度、猜测率)
- 3PL IRT 模型参数通过 LLM 自动估计
- DKT 输出作为能力 θ,IRT 映射到具体题目正确率

Phase 3: 个性化认知架构搜索
- Neural Architecture Search 找到最适合该学生的认知模型结构
- 每个学生有自己的"认知架构参数"

4.2 GraphRAG:利用知识图谱结构做检索增强

现状: 简单向量相似度搜索 + cosine distance

升级方案:

┌────────────────────────┐
│  学生问:"导数定义"      │
└────────┬───────────────┘
         ▼
┌────────────────────────┐
│  1. 向量检索 top-5 节点  │
│  2. 图谱 BFS 展开 2 层   │
│  3. 关联节点(先修/后修/  │
│     类比)加权融合        │
│  4. LLM 合成上下文        │
└────────────────────────┘

4.3 间隔重复升级:从 SM-2 到 FSRS + 个性化参数

现状: 经典 SM-2 算法(SuperMemo 1987)

升级: - FSRS(Free Spaced Repetition Scheduler):现代替代算法,精度高 2-3x - 每个知识点独立学习 FSRS 参数 - 引入 retention 预测:不只”该复习了”,还能预测”明天的掌握度会降到多少”

4.4 多智能体学习伙伴

现状: 一个 LLM 角色处理所有对话

升级:

┌── 学生 ──┐
     │
     ├── 苏格拉底智能体 ── 追问式教学
     ├── 陪练智能体 ── 大量练习 + 即时反馈
     ├── 鼓励师智能体 ── 心理支持 + 习惯养成
     ├── 诊断智能体 ── 评估掌握度 + 定位薄弱点
     └── 规划智能体 ── 制定学习路径 + 调度复习

每个智能体有独立的 prompt、知识库、交互风格,通过协调器(orchestrator)决定谁出场。

4.5 LLM-as-Judge 评估

现状: 选择题自动判对错,开放题无评估

升级: - 用 LLM 评估开放题答案质量(0-4 分 + 具体反馈) - 自动标注错误类型(概念混淆、计算错误、表达不清) - 错误簇分析升级:不只看”做错了”,还看”为什么错” - 生成长期错误模式报告

4.6 元认知教学(教学生如何学习)

这是《ZhiHuArchive 高效自学》系列文章的核心洞见:

功能模块:
├── 学习策略诊断:你现在的学习方式是什么?
│   ├── 被动听课型 vs 主动检索型
│   ├── 死记硬背 vs 理解构建
│   └── 集中突击 vs 间隔复习
├── 策略建议引擎
│   ├── 针对当前知识点的推荐学习方法
│   ├── 费曼技巧 / 康奈尔笔记 / 思维导图建议
│   └── 学习策略切换时机检测
└── 学习方式进化追踪
    ├── "上周你用了 80% 被动学习,本周降到 60%"
    ├── "尝试费曼技巧讲解双曲函数"
    └── 策略变换前后的掌握度增速对比

五、如何适应真实学生

苹果果目前是一个技术展示品——它有所有零件,但还没有考虑”怎么让学生愿意用它”这个关键问题。

5.1 轻量级 onboarding

Day 1 流程:
1. "你在学什么?" → 选学科(数学/物理/化学/……)
2. "你的目标是什么?" → 考试/竞赛/兴趣/预习
3. "你现在什么水平?" → 自评 + 几道快速诊断题
4. "你每天能花多久?" → 15min / 30min / 1h+
5. → 系统自动生成第一周计划

不要让学生自己配。当前系统需要学生理解”知识树”、“分区”、“认知节点”这些概念才能用——这对任何学生都是门槛。

5.2 渐进式参与

┌─────────────────────────────────────┐
│ Day 1-3: 只用对话 + 自动记录        │
│   "像 ChatGPT 一样聊天,但系统在背后"  │
│   自动识别知识点,自动追踪掌握度        │
│   学生完全无感                        │
├─────────────────────────────────────┤
│ Day 4-7: 第一次复习提醒              │
│   "你昨天学了导数定义,来做个快速检查"   │
│   3-5 道题,< 5 分钟                  │
│   反馈:掌握度 + 建议                  │
├─────────────────────────────────────┤
│ Week 2+: 主动学习模式                 │
│   学习计划、知识图谱、自适应练习        │
│   所有高级功能逐步解锁                  │
└─────────────────────────────────────┘

5.3 考试驱动设计(对学生最实用)

苹果果的”认知追踪”太学术化,学生只关心一件事:期末考试能考多少分

考试模式:
├── 选择目标(期中/期末/高考/竞赛)
├── 输入考纲(或自动识别知识点)
├── 系统诊断 → 每个考点掌握度百分比
├── 优先级排序:离考试越近 × 提分空间越大
├── 生成备考路线:每周重点、每日任务
└── 考前冲刺:模拟考 + 时间分配训练

5.4 社交与激励

5.5 沉浸式学习体验


六、优先级路线建议

基于”投入产出比 + 对学生直接价值”排序

🚀 P0:立刻做(1-2 周)

1. 考试模式(考试驱动设计)
   ── 大部分学生用教育产品的第一动机
   ── 现有认知追踪模型 + SM-2 已经够用

2. 轻量 onboarding
   ── 去掉所有概念门槛
   ── 5 步引导,零配置开始学习

3. FSRS 替换 SM-2
   ── 现代间隔重复算法,代码量不大
   ── 复习效率提升 2-3x

🔧 P1:短期(1-2 月)

4. 测试覆盖核心链路(对话→练习→认知更新→复习)
   ── 没有测试就不敢重构
   ── 先用 pytest 覆盖关键路径

5. pgvector 安装 + HNSW 索引
   ── 向量搜索加速 10-100x
   ── 为知识图谱 + 素材搜索打基础

6. LLM-as-Judge 开放题评估
   ── 极大拓宽可支持的题型
   ── 错误分析升级

7. 元认知教学模块
   ── 教学生"怎么学",而不是只教"学什么"
   ── 这是苹果果真正的差异化竞争力

💡 P2:中期(3-6 月)

8. GraphRAG 升级
9. DKT 替代经典 BKT
10. 多智能体学习伙伴
11. 社交功能(学习小组 + 排名)
12. 学习报告分享卡片

🌟 P3:长期(6 月+)

13. 移动端 App(React Native)
14. 离线模式(本地小模型)
15. 多人协同学习
16. 课程市场(共享题库/学习路径)
17. A/B 测试框架 → 数据驱动优化认知模型

七、结论

苹果果是我见过的认知引擎最深度的个人教育项目。15 个认知子系统和 22 个方程不是凑数——它们确实对应了学习科学的主流理论(ACT-R、BKT、SM-2、ZPD、Bloom)。

但它现在的问题是:

它是一台精密但无人驾驶的 F1 赛车。 每个零件都很认真,但没有考虑谁坐在驾驶座上。

核心缺失不是技术能力,而是真实用户反馈循环从学生视角出发的设计

最值得立即投入的方向不是加更多理论模型,而是: 1. 用考试模式给学生一个使用动机 2. 用轻量 onboarding 降低使用门槛 3. 用元认知教学建立真正差异化的教育价值

当学生真正用它学习并获得更好的考试成绩,认知引擎的精确度才有意义。