一、立项背景和目标
全国实行新高考「3+1+2」以来,同一个班学生选科不同、基础差异大。传统做法是全班一份作业:会的学生重复刷题,不会的跟不上,老师也很难弄清每个学生卡在哪个知识点。学校有了平板,却缺少真正按学生定制、能形成数据闭环的学习内容。
我们的目标是做一个面向高中的 AI 个性化学习平台:先诊断出每个学生每个知识点的掌握情况,再每天给他排好最该学的任务,按记忆规律安排复习,给每天学习时长封顶,不搞题海;同时让老师减负、家长看得见。
二、功能与核心模块
① 诊断与今日任务:「测一测」生成知识点掌握图;首页按规则生成当天的学习建议和学霸值经验条,作业优先,再补薄弱点、复习到期内容。
② 学科学习:数理走「诊断、跟我学、知识点、练习」的路线;英语、语文、历史按课本单元闯关;化学用拼块配平方程式,生物遗传题分步推演;英语背单词只出英文和读音,按「会、模糊、不会」安排复习;语文古诗文逐句默写。
③ 老师端:班级驾驶舱集中显示作业提交、班级薄弱知识点和需要关注的学生;老师可布置线上题、纸质作业和教辅页码,发起课堂抽背,上传本校题目。
④ 家长端:每日学习概览、作业完成情况、学习周报。
⑤ 管理与内容:按班开通学科,算法参数在后台调整,题目来源逐题标注、可一键下架;大模型辅助查错和打标签,视觉模型识别手写默写,语音合成提供英语朗读。
三、业务流程与功能路径
开通:管理员建校建班,按学生选科给班级开通学科,学生、老师、家长各自登录对应的端。
学生:首次登录先做「测一测」,系统生成掌握图;之后每天打开首页看今日任务,完成作业、跟我学、练习、闯关、背单词、默写;作答数据实时回写学情,第二天的任务按新的掌握情况重新排。
老师:在驾驶舱查看全班薄弱点,布置作业、作业关或课堂抽背;系统自动批改和统计,老师据此针对性讲评,跟进掉队的学生。
家长:绑定孩子后,查看每日学习、作业和每周周报。
内容:题目来自课本、教辅、学校和老师上传以及授权题库,先经 AI 查错查重,老师确认后进入本校题库,再挑题布置;每道题标明来源,合作结束可整源下架。
一、整体架构与技术栈
平台采用前后端分离、按学科分包的架构,设计上抓三点:
共用骨架加学科包:诊断、今日任务、作业、学情这些通用能力只做一套,各学科只写自己独有的学法,化学、生物复用同一个学科套件框架。
内容即数据:知识点、卡片、题目都用版本化文件管理,读入时自动审核放行,每道题带来源标注,可整源下架。
算法参数化:复习间隔、每日时长等 300 多个参数在后台可调,不用发版。
技术栈:前端用 Vue 3、TypeScript、Vite、Naive UI;后端用 Python 和 FastAPI;数据库生产用 PostgreSQL 加 Redis 缓存,开发测试用 SQLite;部署用 Docker Compose 和 Nginx;AI 方面接入大模型做查错和打标签、视觉模型识别手写、火山引擎合成朗读;
二、我负责的模块与结果
我负责学习调度引擎和题库接入两块,并主导全平台的质量体系。
① 背单词调度引擎:把原来的选择题加拼写模式,重构成「会、模糊、不会」的自评调度,设计五种记忆状态和 32 个可调参数,每天按 15 分钟装箱排队。用 20 个虚拟学生跑 60 天仿真:每天用时最长 909 秒,九成日子不超过 905 秒;中等学生的新词完成率从 78% 调优到 83%;老数据换算验证 372 条进度零丢失。
② 题库接入:设计学校和老师上传通道以及第三方题库接口,实现额度五道闸、同题去重计费、缓存入库、一键下架和对账,新增 7 个数据迁移,相关用例近 700 条。
③ 质量体系:搭建 12 步合并验证链,覆盖双数据库全量测试、学科仿真和端到端测试;后端用例 5700 多条、前端 2800 多条、端到端 190 多条,全部通过才上线。
三、难点、坑与解决方案
① 双数据库差异:开发用 SQLite、生产用 PostgreSQL,有的查询没写排序,在 PostgreSQL 上结果顺序不同,导致生物遗传题约三分之一的作业抽到了别章的题,而且只在 PostgreSQL 上偶发。解决:显式排序、按题组课号严格过滤,并把双库全量测试设为每次合并的必经步骤。
② 自评调度的刷分和积压:学生可能一路点「会」刷学霸值,缺勤几天后复习会堆成山。解决:「记住」要等第一次抽查也点会才计分;每天 15 分钟装箱,按超期、不会、模糊、新词、抽查的优先级排,模糊和不会最多推迟 2 天;老进度换算时每天最多摊 20 个,仿真中出现超期的天数从 8 天降到 0。
③ 隐蔽的显示和日期问题:化学式 Ca(OH)₂ 显示成 CaOH₂,根因是卡面引用拿不到物质表,改为读入时传入整张底表,并补了 12 条用例。另有用例每三天才出错一次,原因是专项按日期轮转,改为测试时冻结时钟,并规定只出学生学过的内容。