AI Agent学习平台的成长体系怎么设计:经验、等级、段位、徽章墙和智能刷题记录实现拆解
一、为什么学习平台需要成长体系
最近开源了一个 Agent 学习平台,前两篇主要介绍了项目整体和 AI 智能刷题。这篇单独聊另一个功能:成长体系。
在线体验:
GitHub:
https://github.com/Earth-OL-Player/ai_learn_project
很多学习类产品都会做经验、等级、徽章,但如果只是为了好看,很容易变成装饰。
我在这个项目里做成长体系,主要是为了解决三个问题:
- 用户刷完题后,需要知道自己有没有进步。
- 用户重复刷同一道题时,需要有一个合理的经验结算规则。
- 用户长期学习时,需要看到累计成果,例如学习天数、答题次数、薄弱题和徽章。
所以这个成长体系不是单纯的游戏化,而是服务于“刷题反馈”和“学习复盘”。
二、成长体系包含哪些能力
当前项目里的成长体系主要包括:
- 当前总经验
- 等级
- 段位
- 当前等级进度
- 距离下一级经验
- 累计答题
- 平均得分
- 学习天数
- 徽章墙
- 本次新获得徽章
- 智能刷题记录
- 薄弱题统计
- 题型维度统计
前端主要展示在两个地方:
AI 智能刷题页
个人中心
AI 智能刷题页更关注“本次反馈”,例如本次得分、经验变化、新徽章。
个人中心更关注“长期复盘”,例如总经验、等级、徽章墙、刷题记录、薄弱题分析。
三、核心代码路径
成长体系涉及前后端多个模块。
前端:
ai-learn-web/src/pages/profile/ProfilePage.vue
ai-learn-web/src/pages/profile/components/GrowthOverviewPanel.vue
ai-learn-web/src/components/growth/RealmCharacterCard.vue
ai-learn-web/src/types/growth.ts
ai-learn-web/src/api/practice.ts
后端:
ai-learn-backend/src/main/java/com/earth/online/player/ailearn/growth/interfaces/GrowthController.java
ai-learn-backend/src/main/java/com/earth/online/player/ailearn/growth/application/GrowthService.java
ai-learn-backend/src/main/java/com/earth/online/player/ailearn/growth/application/GrowthAwardService.java
ai-learn-backend/src/main/java/com/earth/online/player/ailearn/growth/application/GrowthRuleService.java
ai-learn-backend/src/main/java/com/earth/online/player/ailearn/practice/application/PracticeGrowthSettlementService.java
ai-learn-backend/src/main/java/com/earth/online/player/ailearn/user/application/UserQuestionStatsService.java
这个拆分大致对应三条线:
PracticeGrowthSettlementService负责答题后的经验结算。GrowthService负责查询成长概览。UserQuestionStatsService负责查询刷题记录和统计。
四、经验规则:只奖励真正突破
成长体系最关键的规则是经验怎么算。
项目里没有采用“每次答题都加固定经验”的方式,而是采用了一个更适合刷题场景的规则:
本次新增经验 = max(0, 本次得分 - 历史最高分)
举几个例子:
| 场景 | 历史最高分 | 本次得分 | 新增经验 |
|---|---|---|---|
| 首次答题 | 0 | 60 | 60 |
| 第二次变好 | 60 | 80 | 20 |
| 第三次退步 | 80 | 50 | 0 |
| 第四次追平 | 80 | 80 | 0 |
| 第五次突破 | 80 | 95 | 15 |
这个规则的好处是:
- 鼓励用户重答并优化答案。
- 避免重复刷同一道题刷经验。
- 经验值能够代表“真实进步”。
- 用户看到经验变化时能理解为什么加分或不加分。
在后端中,这个规则位于 PracticeGrowthSettlementService。
评分完成后,服务会读取当前用户和当前题的历史汇总,拿到历史最高分和最近一次得分,再计算本次新增经验。
五、成长快照:减少重复计算
项目里用户的总经验、等级编码和段位编码会写入用户表,作为成长快照。
答题后,如果经验发生变化,后端会重新计算:
- 当前总经验
- 当前等级
- 当前段位
如果本次答题没有获得新经验,并且用户表中的成长快照已经一致,就不会重复写用户表。
这样做有两个好处:
- 查询成长概览时不用每次扫描所有刷题汇总。
- 重复答题但没有突破时,不会产生无意义写入。
这类设计在个人项目中也很实用,因为它可以在不引入复杂缓存的情况下,降低成长查询和写入压力。
六、等级和段位如何展示
成长概览由 GrowthService 组装。
返回给前端的核心字段包括:
currentExperience:当前累计经验。levelCode:等级编码。levelName:等级名称。rank:段位名称。currentLevelExperience:当前等级起始经验。nextLevelExperience:下一级所需经验。levelProgressText:等级进度文案。answeredCount:累计答题数。averageScore:平均分。experienceToNextLevel:距离下一级经验。streakDays:学习天数。badges:徽章墙。newBadges:本次新获得徽章。
前端 GrowthOverviewPanel.vue 会把这些数据展示为:
- 角色卡
- 总经验
- 累计答题
- 平均得分
- 学习天数
- 当前等级进度条
- 当前段位标签
- 徽章墙
这里有一个细节:进度条不是按总经验直接算比例,而是按当前等级区间计算。
也就是:
当前等级内已获得经验 / 当前等级所需总经验
这样用户看到的是“当前等级进度”,而不是一个越来越难理解的总经验比例。
七、徽章墙设计
徽章发放逻辑主要在 GrowthAwardService。
当前徽章大致分为几类:
-
入门类
例如首次完成答题、累计完成 10 题、100 题、300 题。
-
坚持类
例如累计学习 3 天、30 天、100 天。
-
稀有类
例如深夜刷题、早起刷题、周末刷题、同一题连续追问达到一定次数。
发放逻辑不是前端判断,而是在后端统一处理:
- 答题后调用
awardAfterAnswer。 - 追问后调用
awardAfterDiscussion。 - 后端根据最新答题统计、学习天数和当前时间判断候选规则。
- 如果徽章未获得,则插入用户徽章记录。
- 只有本次真正新增的徽章才返回给前端弹框提示。
这个设计可以保证徽章发放幂等。
也就是说,用户满足某个规则后,重复触发不会重复获得同一枚徽章。
八、隐藏徽章为什么要隐藏
成长体系里有一些稀有徽章,例如深夜刷题、早起刷题、周末练习、连续追问。
这些徽章如果全部提前展示,用户可能会为了“刷徽章”而刻意操作,反而影响学习目标。
所以项目里对隐藏徽章做了处理:
- 未获得时不展示。
- 获得后展示在徽章墙。
前端徽章墙也按分类分组,并过滤未获得的隐藏徽章。
这样既保留了惊喜感,也减少了用户为了徽章而偏离学习本身。
九、智能刷题记录
成长体系不能只展示经验和徽章,还要能复盘具体题目。
项目中的智能刷题记录由 UserQuestionStatsService 查询。
它提供两类数据:
-
概览数据
包括:
- 已练题目数
- 累计答题次数
- 平均最高分
- 平均最近分
- 薄弱题数量
- 最近答题时间
- 已练题型
- 题型维度统计
-
列表数据
包括:
- 题目编码
- 题干
- 题型
- 答题次数
- 最高分
- 最近分
- 首次答题时间
- 最近答题时间
列表支持:
- 关键词搜索
- 题型筛选
- 分页查询
这部分数据用于个人中心的“智能刷题记录”页面。
十、薄弱题分析
薄弱题的核心价值是告诉用户:哪些题虽然练过,但掌握得不稳定。
在当前设计里,薄弱题可以通过最近分、最高分、答题次数等维度分析。
比如:
- 历史最高分很高,但最近分很低,说明记忆或表达退化。
- 答题次数很多,但最高分仍低,说明知识点理解不扎实。
- 某个题型平均分低,说明这一类题需要集中复习。
这些数据不需要额外新建复杂流水,只要把用户题目汇总表设计好,就能从聚合查询中得到。
十一、前端个人中心如何展示
个人中心里主要有两个区域:
-
成长概览
展示总经验、答题数、平均分、学习天数、等级进度和徽章墙。
-
智能刷题记录
展示概览卡片、记录列表、薄弱点分析和多维视图。
前端在进入个人中心时加载数据,刷题记录查询条件只影响列表,不会改变业务状态。
这个细节也很重要:个人中心是只读复盘页面,不应该影响刷题会话。
十二、这个成长体系可以复用到哪些项目
这套设计不只适用于 AI 学习平台,也适合这些场景:
- 面试刷题平台
- 编程题训练平台
- 在线课程练习系统
- 内部培训系统
- 知识问答系统
- 题库型学习工具
核心思路是:
答题行为
-> 评分
-> 更新题目汇总
-> 结算经验
-> 判断徽章
-> 更新成长概览
-> 个人中心复盘
只要把“用户行为”和“可衡量结果”定义清楚,就可以套用类似模型。
十三、设计经验总结
这次实现成长体系后,我觉得有几个点比较值得注意:
- 经验规则要能解释清楚,用户才会认可。
- 重复刷题不能无限加经验,否则数据会失真。
- 等级和段位最好用快照保存,避免每次查询全量计算。
- 徽章发放必须幂等,不能重复发。
- 隐藏徽章适合做惊喜,不适合全部提前公开。
- 成长体系不能只看总经验,还要有刷题记录和薄弱点。
- 个人中心尽量做成只读复盘页面,避免影响主业务状态。
十四、项目地址
在线体验:
https://ai-studyhub.cn
GitHub:
https://github.com/Earth-OL-Player/ai_learn_project
如果你正在做刷题系统、学习平台、AI 面试练习工具,或者想参考成长体系设计,可以看看这个项目。
更多推荐

所有评论(0)