前言:

本周的任务是着重于错题系统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交互逻辑,确保前后端协作顺畅。整体架构兼顾了扩展性、稳定性与智能化能力,为后续知识图谱构建与个性化推荐算法的深度迭代奠定了坚实基础。

更多推荐