山东大学软件学院项目实训:基于AI大模型的智能考研助手(三)
前言:
本周的任务是着重于错题系统AI模块的开发,包含AI智能推题,OCR自动识图,AI智能分析题目并推送相关的题目等AI功能。我负责这一模块的架构,接口和具体的数据库表的设计。相关的逻辑如下:

一.数据库表的设计
设计label表,用于用户给错题和帖子设计相应的标签,作为此题的特征给AI的分析,type作为枚举值,表示标签的类型,为错题的标签还是帖子的标签

设计topic_label表,作为错题与标签的关联,对于用户来说,一个标签可以给多个题目,一个题目也能有多个标签:

设计topic_daily_count表,用户可以自己选择每日的推题个数:

设计topic_daily表,存储用户的每日推题数据,其中type表示此题是用户自己的错题还是AI自己整合的新题,由AI端设计定时任务,每日填充此表:

设计topic_record表,记录用户对每一个错题的详细做题情况,负责交给AI进行智能分析,方便推题:

二.相关接口的设计
2.1 接口的设计
设计错题系统AI模块的接口如下:
/**
*TODO
* AI分析题目,将题目上传给AI分布解析
* 将信息传到消息队列中
* 在错题本页面单独的一个按钮,这里参数得到的是URL
* */
@PostMapping("/uploadAI")
@Operation(summary = "AI分析题目")
public Result<TopicAnalyseVO> uploadAI(@RequestBody BaseRequest baseRequest){
log.info("AI分析题目参数: {}", baseRequest);
TopicAnalyseVO result = topicService.uploadAI(baseRequest);
return Result.success(result);
}
/**
*TODO
* 生成知识图谱
*
*
* */
@PostMapping("/generateKnowledgeGraph")
@Operation(summary = "生成知识图谱")
public Result generateKnowledgeGraph(@RequestBody BaseRequest baseRequest){
log.info("生成知识图谱参数,{}", baseRequest);
return Result.success();
}
/**
*TODO
* OCR识别文字,这里参数得到的是图片URL
*
*/
@PostMapping("/ocr")
@Operation(summary = "OCR识别文字")
public Result<OCRTextVO> ocr(@RequestBody BaseRequest baseRequest){
log.info("OCR识别文字参数,");
return Result.success();
}
/**
*TODO
* 做题,即修改topic_record
* 如果一开始record中没有,就新建一个
*如果检测到
*/
@PostMapping("/doTopic")
@Operation(summary = "做题")
public Result doTopic(@RequestBody BaseRequest baseRequest){
log.info("做题参数,{}", baseRequest);
return Result.success();
}
/**
*TODO
* 获取每日推题
* 通过访问日常题库,获取每日题
* 根据用户id在推题表中查找
* 可以从自己的错题里面找,也可以AI生成新的
* 不用访问消息队列
*/
@PostMapping("/getDailyTopic")
@Operation(summary = "获取每日推题")
public Result<List<TopicVO>> getDailyTopic(){
log.info("获取每日推题参数");
return Result.success();
}
//TODO 设置每天推送的题数
@PostMapping("/setDailyTopicNum")
@Operation(summary = "设置每天推送的题数")
public Result setDailyTopicNum(@RequestBody TopicDailyCountDTO topicDailyCountDTO){
log.info("设置每天推送的题数参数,{}", topicDailyCountDTO);
return Result.success();
}
2.2 消息传递数据结构
题目分析VO,为AI分析的相关结果,包含建议标签,同类题的推荐等信息:
@Data
@Schema(description = "AI题目分析")
public class TopicAnalyseVO {
@Schema(description = "题干")
private String questionStem;
@Schema(description = "题目解析")
private String analyseQuestion;
@Schema(description = "用户错点分析")
private String analyseWrong;
@Schema(description = "建议标签")
private List<String> suggestLabels;
@Schema(description = "同类题推荐")
private List<TopicVO> recommendTopics;
}
题目分析相关的DTO:包含做题记录修改和每日题目设置的相关DTO
@Schema(description = "做题记录修改")
@Data
public class TopicDoDTO {
@Schema(description = "题目id")
private Long topicId;
@Schema(description = "是否做对")
private Integer correctFlag;
}
@Data
public class TopicDailyCountDTO {
private Integer count;
}
AI分析方式为业务后端接收到前端传来的数据,然后通过消息队列传给AI后端,再通过消息队列监听获得AI分析之后的结果。在此设计各个Package类,用于表示传给消息队列中的数据结构:
//用来发送图片url的包
@Data
public class UrlPackage {
private String url;
private Long userId;
// 请求ID,用于关联请求和响应
private String requestId;
}
@Data
public class TopicAnalysePackage {
@Schema(description = "请求ID,用于关联请求和响应")
private String requestId;
@Schema(description = "题干")
private String questionStem;
@Schema(description = "题目解析")
private String analyseQuestion;
@Schema(description = "用户错点分析")
private String analyseWrong;
@Schema(description = "建议标签")
private List<String> suggestLabels;
@Schema(description = "同类题推荐")
private List<TopicVO> recommendTopics;
}
创建相关消息队列:
/**
* 创建图片发送队列
*/
@Bean
public Queue pictureQueue() {
return QueueBuilder.durable(PICTURE_QUEUE).build();
}
/**
* 创建AI结果队列
*/
@Bean
public Queue aiResultQueue() {
return QueueBuilder.durable(AI_RESULT_QUEUE).build();
}
三.相关文档的撰写:
3.1 撰写接口文档
撰写相关的文档,后端接口文档(节选):

3.2 绘制前端的UI结构图
前端UI的UML图:

四.总结
本周我聚焦于错题系统AI模块的架构设计与落地实现,围绕智能化学习场景构建了从数据建模到异步处理的完整链路。在数据库层,新增标签体系、用户做题行为记录与每日推题调度表,通过多对多关联与状态字段设计,为AI算法提供了丰富的特征数据与反馈闭环;在接口层,基于现有Result与BaseRequest规范,封装了AI题目解析、OCR识别、智能推题及做题记录上报等核心接口,并引入消息队列解耦业务后端与AI推理服务,通过UrlPackage与TopicAnalysePackage标准化跨服务通信结构,实现了高并发下的异步分析与结果回调;在配套产出方面,同步完善了接口文档与前端UI交互逻辑,确保前后端协作顺畅。整体架构兼顾了扩展性、稳定性与智能化能力,为后续知识图谱构建与个性化推荐算法的深度迭代奠定了坚实基础。
更多推荐
所有评论(0)