☰
SmartClass 智学在线技术复盘:我用「规则引擎」而非 AI,做出了可解释的学情推题
2026/9/30 16:32:12 网站建设 项目流程

本文作者:李玉涛(Leo),长春师范大学 数据科学与大数据技术专业 2027 届本科生,辅修数学双学位。
项目仓库:Leo-Li638/smartclass(https://github.com/Leo-Li638/smartclass)
个人技术主页:一.chat(一.chat)

一、项目是什么

SmartClass 智学在线是一个 K12 场景的前后端分离教学管理平台,覆盖教学管理、在线作业、自动批改、错题本、薄弱知识点分析与个性化学习计划全流程。三端角色(管理员/教师/学生)20+ 页面按角色完全隔离。项目从需求分析、数据库设计、后端接口、前端界面到联调部署由我独立完成。

技术栈:Spring Boot 3.2(Java 17)+ MyBatis-Plus 3.5 + MySQL 8.0(16 张业务表)+ Vue 3.4(Composition API)+ Element Plus + Pinia + ECharts 5 + Vite 5。

二、最有意思的部分:学情推题引擎为什么不用 AI

很多人第一反应是"推题就该上推荐算法/大模型"。我最终的方案是纯规则引擎,理由有三:

  1. 数据量不支持:单校场景的练习流水撑不起协同过滤的稀疏矩阵,硬上模型只会输出玄学。
  2. 教育场景要可解释:老师和学生需要知道"为什么推这道题"——"你的《一元二次方程》知识点掌握度 42%,低于班级均值,推荐 3 道专项题"远比"模型觉得你该做这道"可信。
  3. 无需外部依赖:不调任何外部 AI 服务,离线可跑,成本为零。

引擎核心是两个数学工具的组合:

  • 拉普拉斯平滑估计掌握度:直接用答对次数/作答次数会在小样本下剧烈抖动(做 1 对 1 = 100%?)。引入平滑后掌握度形如(correct + α) / (attempts + α·k),样本越少越向保守的先验回归,数学背景在这里直接派上用场。
  • 艾宾浩斯遗忘曲线做时间衰减:掌握度不是静态值,练习流水要按时间衰减加权——两周前做对的题对当前掌握度的贡献,理应小于昨天做对的。衰减函数让"久不复习的知识点"自然沉底,成为推题的优先候选。

最终输出"薄弱知识点 → 推荐理由 → 专项题目"的可解释三元组,并按薄弱度分配每日题量生成学习计划,进度通过练习流水实时回算,学生不需要手动打卡。

三、16 张表的数据模型取舍

数据库设计上我最大的心得是:把"事实"和"状态"分开存。

  • 题目、知识点、班级、用户这些相对静态的实体各归其位;
  • 而"学生每次做题"这条练习流水是全系统的数据心脏——掌握度、错题本、学习计划进度、班级学情分析全部从流水实时回算,不单独维护冗余状态表。

代价是查询要聚合计算,收益是永远不会出现"状态表和流水对不上"的一致性灾难。对小规模单库场景,这个取舍非常划算。自动判分模块同样受益:单选/判断直接比对,多选支持乱序比对,填空支持多候选答案匹配,判分逻辑无状态、可重放。

四、工程化细节里踩过的坑

  • 统一响应结构与全局异常处理是第一优先级而不是"以后再说"——晚一周做,前端就要写 N 套错误处理。
  • JWT + 拦截器鉴权:无状态认证 + HandlerInterceptor 统一拦截,越权访问自动拦下。三级角色的权限边界必须在路由层就卡死,不能指望前端隐藏菜单。
  • 幂等 SQL 初始化脚本 + 首次启动灌入演示数据:让任何一个拿到仓库的人 clone 完就能跑起来,这是开源项目体验的分水岭。
  • 配置分离:本地私密配置与仓库隔离,Swagger(SpringDoc OpenAPI)在线调试全部接口。

五、写在最后

这个项目对我最大的意义,是把"数学双学位"变成了看得见的工程产出:拉普拉斯平滑和遗忘曲线不是试卷上的名词,而是系统里真实运行的公式。数据科学 + 教育,是我认定的方向。

  • 仓库:https://github.com/Leo-Li638/smartclass (含完整 README、架构图与接口文档)
  • 个人技术主页一.chat(更多项目:OrderBoss 接单宝、绿源环保商城、游戏数值作品集):一.chat

李玉涛(Leo)· 长春师范大学 · 数据科学与大数据技术 + 数学双学位 · 2027 届
一.chat(一.chat)· Leo-Li638(https://github.com/Leo-Li638)

官方主页:一.chat

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询