首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
基于SpringBoot+AI的在线考试管理系统(前后端源码)
📅 2026/11/4 7:13:29
✍️ 爱科研究院
👁 阅读 3,247
基于SpringBootAI的在线考试管理系统程序代码下载本系统是一个基于 B/S 架构、前后端分离的在线考试与刷题练习平台面向学校教学场景覆盖“出题→考试→判分→错题巩固→学情分析”的完整教学闭环。系统将 AI 大模型能力Spring AI深度融入刷题、考试、错题复习等核心环节为不同角色学生、教师、管理员提供差异化的功能与数据视图。层次技术版本用途后端框架Spring Boot3.2.5Web 服务、依赖管理运行环境Java17后端运行时ORMMyBatis-Plus3.5.5数据访问、分页、逻辑删除数据库MySQL8.xutf8mb4业务数据存储AI 框架Spring AIOpenAI 兼容 starter1.0.0-M5对接大模型服务前端框架Vue3.5用户界面Composition API构建工具Vite8前端开发与构建UI 组件库Element Plus2.14界面组件状态管理Pinia3全局状态用户/考试/题目/配置路由Vue Router4SPA 路由与守卫HTTP 客户端Axios1.x前后端通信辅助工具Lombok、Validation—简化代码、参数校验学生端/student模块功能大厅首页个人学习数据总览、公告浏览、AI 学习建议浏览题库按科目/题型浏览题目与解析刷题练习随机抽题练习即时判分练习记录留存模拟考试查看已发布考试→进入考试答题限时计时→交卷自动判分出分我的成绩历史考试成绩、得分明细、用时统计错题本考试/练习错题自动归集、AI 错题分析、标记“已掌握/待复习”AI 智能助手多轮对话问答结合个人学习数据给出解答与建议个人中心资料修改、头像上传前端压缩、密码修改教师端/teacher模块功能教师主页所授科目题量、考试场次、成绩概况题库管理题目增删改查、批量录入、AI 自动生成答案解析、图片上传考试管理创建考试选题组卷、设置时长/总分/及格分/起止时间、发布与下架成绩统计考试成绩单、正确率/通过率统计、AI 教学分析薄弱点与教学建议公告管理发布与维护系统公告管理员端/admin模块功能控制台用户数、科目数、题库规模、考试场次等全局概览用户管理三类用户分页查询、新增/禁用/删除、密码重置科目管理科目维护与任课教师分配数据统计全平台学习/考试数据统计系统设置系统参数与 AI 模型在线配置密钥加密存储于 sys_config公告管理全局公告维护参考代码packagecom.studyroom.ai;importcom.studyroom.ai.model.*;importlombok.extern.slf4j.Slf4j;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.stereotype.Service;importjava.util.ArrayList;importjava.util.List;importjava.util.Map;importjava.util.concurrent.ConcurrentHashMap;Slf4jServicepublicclassAIChatService{privatefinalSparkAIClient sparkClient;privatefinalAIToolRegistry toolRegistry;privatefinalMapLong, ListSparkMessagesessionHistorynewConcurrentHashMap();privatefinaldoubletemperature;privatefinalintmaxTokens;privatestaticfinalStringSYSTEM_PROMPT你是校园自习室预约系统的AI助手可以帮助用户查询系统各类数据、预约座位、管理预约等。你可以查询以下数据【自习室】自习室列表、详情、座位布局、可用座位【预约】我的预约记录、预约座位、取消预约、签到、签退【个人】个人信息姓名/学号/院系/信用分、信用积分变动记录【消息】我的消息通知、未读消息【公告】系统公告列表【反馈】我提交的意见反馈及处理状态【评价】座位评价列表及平均评分【统计】系统整体数据用户数、预约数、热门时段、热门座位等注意事项- 当用户想预约座位时如果没指定具体时间主动询问日期和时间段- 当用户想查可用座位时如果没指定自习室先列出所有自习室让用户选择- 用户问我的XXX时直接调用对应工具查询无需额外确认- 回复简洁友好用中文适当使用emoji- 如果操作成功用积极的语气告知结果- 如果操作失败解释原因并给出建议- 如果用户的问题涉及多个数据来源可以一次调用多个工具;publicAIChatService(SparkAIClient sparkClient,AIToolRegistry toolRegistry,Value(${spark.temperature})doubletemperature,Value(${spark.max-tokens})intmaxTokens) {this.sparkClient sparkClient;this.toolRegistry toolRegistry;this.temperature temperature;this.maxTokens maxTokens;}publicChatResponsechat(String message, Long userId) {ListSparkMessagehistory sessionHistory.computeIfAbsent(userId, k -newArrayList());if(history.isEmpty()) {history.add(SparkMessage.builder().role(system).content(SYSTEM_PROMPT).build());}history.add(SparkMessage.builder().role(user).content(message).build());SparkRequestrequest SparkRequest.builder().messages(newArrayList(history)).temperature(temperature).max_tokens(maxTokens).tools(toolRegistry.getTools()).tool_choice(auto).build();SparkResponseresponse sparkClient.chat(request);if(response null|| response.getChoices() null|| response.getChoices().isEmpty()) {returnChatResponse.builder().content(抱歉AI 服务暂时无响应请稍后重试。).build();}SparkMessageassistantMessage response.getChoices().get(0).getMessage();history.add(assistantMessage);if(assistantMessage.getTool_calls() !null !assistantMessage.getTool_calls().isEmpty()) {for(ToolCall toolCall : assistantMessage.getTool_calls()) {StringfunctionName toolCall.getFunction().getName();Stringarguments toolCall.getFunction().getArguments();log.info(AI calling tool: {} with args: {}, functionName, arguments);StringtoolResult toolRegistry.execute(functionName, arguments, userId);history.add(SparkMessage.builder().role(tool).tool_call_id(toolCall.getId()).content(toolResult).build());}SparkRequestfollowUp SparkRequest.builder().messages(newArrayList(history)).temperature(temperature).max_tokens(maxTokens).build();SparkResponsefollowUpResponse sparkClient.chat(followUp);if(followUpResponse !null followUpResponse.getChoices() !null !followUpResponse.getChoices().isEmpty()) {SparkMessagefinalMessage followUpResponse.getChoices().get(0).getMessage();history.add(finalMessage);returnChatResponse.builder().content(finalMessage.getContent()).toolCalled(true).build();}}if(history.size() 40) {SparkMessagesystemMsg history.get(0);history.subList(1, history.size() -20).clear();history.add(0, systemMsg);}returnChatResponse.builder().content(assistantMessage.getContent() !null? assistantMessage.getContent():已处理您的请求).build();}publicvoidclearHistory(Long userId) {sessionHistory.remove(userId);}}
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/11/4 7:13:29
【毕设技巧】文献综述怎么写? 这3种综述写法和4个常犯的错误,一篇文章给你列清楚。
2026/11/4 7:13:29
4、Eureka服务端安装
2026/11/4 7:08:29
同城统一后台:外卖、跑腿和商城能不能在同一个入口里改
2026/11/4 8:08:33
GDI实时抗锯齿源码:双缓冲、超采样与像素混合消除斜线毛刺
2026/11/4 8:08:33
自建内网穿透方案:基于frp的远程调试与系统维护实践
2026/11/4 8:08:33
Unity远距离贴图闪烁根因与Mipmap全链路调优指南
2026/11/4 8:08:33
AI编程工具与传统技术社区的优劣势对比与融合
2026/11/4 8:08:33
SQL实战案例教学:从业务场景掌握数据库查询
2026/11/4 8:03:32
微信小程序自动化测试:Minium框架实战指南
2026/11/4 0:02:45
AI辅助技术栈评估:提升研发决策效率60%
2026/11/4 0:02:45
从生成Token到直接决策:Jev如何重塑AI Agent工程实践
2026/11/4 0:02:45
32G统一内存跑大模型:内存账、TPS实测与端云分流
2026/11/4 4:08:30
面向复杂光照与角度的宠物面部识别鲁棒性增强策略
2026/11/4 4:08:26
DRV8818PWPR与R7FA8M1AHECBD工业步进驱动实战指南
2026/11/4 4:08:23
STM32与DRV8818双极步进电机驱动方案:从选型到调试全流程解析
2026/11/4 4:08:30
面向复杂光照与角度的宠物面部识别鲁棒性增强策略
2026/11/4 4:08:26
DRV8818PWPR与R7FA8M1AHECBD工业步进驱动实战指南
2026/11/4 4:08:23
STM32与DRV8818双极步进电机驱动方案:从选型到调试全流程解析