
说实话,我在教育行业摸爬滚打这些年,发现一个特别有意思的现象:几乎每个学习效果好的学生,手里都有那么一本错题本。不是学校发的练习册,而是自己认认真真整理的、写着各种颜色标注的笔记本。这个看似简单的学习工具,放在在线学习平台上,却涉及到相当复杂的产品设计和技术实现。今天就想聊聊,如果要在在线学习平台上搭建一个真正好用的错题本功能,到底应该怎么做。
做这个功能之前,我们先想清楚一个问题:用户为什么需要错题本?表面上看,是为了记录做错的题目。但往深层次想,学生要的是通过错题发现自己的知识漏洞,然后针对性地补齐。说白了,错题本就是个学习诊断工具加一个个性化练习的入口。所以我们在设计的时候,得时刻记住这个本质,不然很容易做成一个华而不实的功能。
先把错题本功能拆开来看,看看一个完整的错题本应该包含哪些组成部分。我大致梳理了一下,大概需要以下几个核心模块协同工作:

技术层面的东西咱也得聊聊,因为很多产品经理容易忽略数据结构的重要性。错题本的数据表设计得好不好,直接影响后面功能的扩展性。
先说题目原始数据的存储。每道题目除了题目内容本身,还要记录它的知识点ID、难度系数、错误选项、正确答案、解析内容等等。这些字段一个都不能少,因为错题本里的很多功能都要依赖这些元数据。
然后是用户错题记录表。这张表要记录的核心关系是:哪个用户在什么时间做了哪道题,做错了没有。如果做错了,要把用户的答案也记下来,方便后续做错因分析。这里有个小细节值得注意:同一道题用户可能做错好几次,每次做错的答案可能都不一样,所以每次错都要新增一条记录,而不是更新旧记录。
还有一张表容易被忽略,就是用户标记表。用户可以给错题加备注、标星号、归类到某个文件夹,这些操作产生的数据要专门存一张表来管理。这样既保持了数据结构的清晰,也方便后续做用户行为分析。
我建议在设计数据库的时候,考虑到未来可能的扩展需求。比如现在可能只需要记录错题,以后会不会需要支持”好题收藏”?现在错题本只需要在国内使用,以后会不会需要支持多语言?这些提前想好,可以避免后期大动干戈地改结构。
| 数据表名称 | 核心用途 | 关键字段 |
| question_base | 题目原始数据存储 | 题目内容、知识点ID、难度、解析、答案 |
| user_wrong_record | 用户错题答题记录 | 用户ID、题目ID、答题时间、用户答案、是否首次错误 |
| user_notebook_item | 用户错题本条目 | 用户ID、错题记录ID、标签、备注、复习状态 |
| review_schedule | 复习计划安排 | 用户ID、题目ID、下次复习时间、复习次数 |
用户做练习的时候,答错一道题,系统怎么自动把这道题加入错题本?这里涉及到几个技术点的串联。
首先是答题结果的实时判定。用户提交答案之后,系统要快速判断对错,然后把结果返回给前端。这个判断逻辑最好放在服务端的答题引擎里做,而不是前端判断,不然容易被绕过。判断完成之后,如果答错了,立即触发错题入库的逻辑。
入库之前,需要做一些数据清洗工作。比如用户可能多次提交答案,我们要取第一次提交的错误答案作为错因分析的依据。比如用户可能刷新页面重复答题,要有去重机制避免同一道题被重复收录。这些边界情况都要处理干净。
这里有个体验上的小建议:自动收录之后,最好给用户一个明显的提示,告诉他这道题已经被加入错题本了。有些产品做得很隐晦,用户根本不知道系统帮他记了,时间长了用户就不信任这个功能了。提示的方式可以是答题结果页面的一个icon,或者声音反馈,也可以是toast消息提醒,怎么醒目怎么来。
接入声网的实时传输能力之后,还可以有一些有意思的玩法。比如用户答错题目的时候,可以让实时音视频教室里的老师端弹出一个提醒,老师看到这个学生在这道题上栽了跟头,可以在后续的直播课中重点讲解。这种场景化的能力,对于提升学习效果是很有帮助的。
错因分析是区分普通错题本和智能错题本的关键。传统的错题本需要用户自己分析为什么会做错,这其实增加了用户的负担,很多人就因为这个步骤太麻烦,放弃了使用错题本。
那怎么让系统来帮忙做错因分析呢?常见的做法有几种。第一种是基于规则的分析。比如这道题考的是一元二次方程,用户选了包含”Δ<0"的选项作为答案,那系统可以判断用户可能在根的判别式这个知识点上理解有偏差。这种规则需要教研团队一条一条地去梳理,工作量不小,但效果比较可控。
第二种是基于知识图谱的分析。把学科知识点建模成图谱结构,节点是知识点,边是知识点之间的关联。用户答错一道题,系统顺着知识图谱往上追溯,看看这道题涉及的知识点中,用户还有哪些相关的题目也做错了。如果有,说明用户可能在这条知识链上存在系统性的薄弱环节。这种方法需要前期的知识图谱建设投入比较大,但分析结果会更精准。
第三种是基于机器学习的方法。收集大量的错题数据,标注上错误类型,然后训练一个分类模型。用户答题的时候,系统不仅判断对错,还会预测用户的错误类型。这种方法理论上效果最好,但需要数据积累,而且模型需要定期更新,对技术团队的要求比较高。
我的建议是,初期可以先用规则的方法把功能做起来,边运营边积累数据。等数据量足够了,再逐步引入更智能的分析方法。毕竟教育是个需要谨慎的事情,不能为了炫技而牺牲准确性。
前面提到复习提醒要用到艾宾浩斯遗忘曲线,这个理论大家应该都听过。简单说就是,人在学习新知识之后,遗忘是在不断发生的,而且遗忘的规律是先快后慢。所以在学习之后的初期,要频繁复习,后面复习的间隔可以慢慢拉长。
在产品层面实现这个逻辑,需要维护一个复习任务队列。每道错题收录的时候,系统要根据它被用户答错的时间点,计算出下一次复习的时间,然后把这条任务插入队列。队列处理器定时扫描队列,把到期没有完成复习的任务推送给用户。
推送的时机和方式要注意。用户什么时候最容易接受复习提醒?一般来说,学习强度比较低的时段会比较合适,比如晚饭后、睡前。如果用户在集中注意力学习的时候,频繁弹出复习提醒,反而会引起反感。
推送方式上,站内消息是最基础的。还可以配合APP推送、短信、甚至邮件。但要注意频次控制,不能一天给用户发十几条提醒,那就是骚扰了。每道题的复习提醒,最多发三次,如果用户三次都不理,就暂时降低优先级吧。
用户完成复习之后,系统要更新这道题的复习状态和下次复习时间。这里又涉及到一个细节:复习的方式是什么?是让用户再看一遍错题和解析,还是让用户重新做一遍?我的建议是,重新做一遍效果最好。所以复习任务应该是一次重做测试,用户必须把题目再做一遍,系统才能判断他是不是真的掌握了。
功能做得再好,用户不愿意用也是白搭。所以错题本的交互设计非常重要。
入口要显眼,但还不能太打扰主流程。常见的做法是在练习页面的显著位置放一个”错题本”按钮,或者在用户做完一套题之后,通过弹窗引导他查看错题本。弹窗不能太频繁,不然用户体验会很好,降低产品的专业感。
错题详情页的信息层次要分明。题目内容要突出显示,用户的错误答案要标红,正确答案要标绿,解析内容要清晰易懂。如果有错因分析的结果,要用一个相对醒目的方式呈现出来,让用户一眼就能看到自己的问题在哪。
批量操作能力也很重要。用户错题多了之后,不可能一道一道处理。需要支持批量移动、批量删除、批量添加标签等功能。批量选择的设计要直观,比如左滑多选,或者全选按钮,都要容易触达。
对了,还要考虑离线使用场景。很多用户会在通勤路上学习,那时候可能没有网络。错题本的内容要支持离线缓存,用户没网络的时候也能复习看题。这对技术实现有一定要求,但为了用户体验,这个投入是值得的。
在线学习平台的错题本功能,在大规模用户使用的情况下,会面临不小的技术挑战。
首先是查询性能。如果一个用户有两千道错题,每次打开错题本都要加载所有数据,页面肯定卡得不行。解决方案是分页加载和懒加载相结合。首次进入只加载前二十道,用户向下滚动的时候再加载更多。错题的详情内容、解析这些比较重的字段,可以等用户点击展开的时候再加载。
然后是并发写入的问题。假设一个平台有十万用户同时在线学习,每个人每小时可能产生几条错题记录,那数据库的写入压力是很大的。这时候要考虑读写分离,写操作走主库,读操作走从库。还可以引入消息队列,把错题入库的操作异步化,避免阻塞用户的答题流程。
数据一致性也不能忽视。用户的错题数据、复习记录、标签信息,这些数据之间存在关联关系。比如用户删除了一个标签,这个标签下的错题怎么办?这些边界情况要在产品设计阶段就想清楚,技术实现上要保证数据的一致性,不能出现孤儿数据。
错题本功能上线之后,不是就万事大吉了,还需要持续的运营和迭代。
首先要做数据监控。要关注几个核心指标:错题本的覆盖率(有多少比例的用户在使用这个功能)、收录量(用户平均收录了多少道错题)、复习完成率(多少比例的复习任务被用户完成了)。这些数据能反映出功能的使用情况,也指导后续优化的方向。
用户反馈也很重要。可以在错题本里加一个反馈入口,让用户随时提交他的建议和遇到的问题。收集到的反馈要定期整理,优先处理高频出现的问题。
功能迭代可以按季度来做规划。第一阶段先把基础功能做扎实,让用户能用起来。第二阶段加入智能分析的能力,提升功能的差异化和竞争力。第三阶段考虑做社交化功能,比如错题本分享、排行榜,让用户之间形成良性竞争,增加使用动力。
总之,错题本这个功能,看起来简单,其实要做好需要考虑很多细节。从产品设计到技术实现,从交互体验到运营迭代,每一个环节都不能马虎。但只要真正站在用户的角度出发,把功能做到位,这个功能是能够切实帮助用户提升学习效果的,这也就是我们做产品的初心吧。
