山东大学软件学院项目实训:基于AI大模型的智能考研助手(八)
前言:
本周的任务是完成院校推荐功能模块的设计。这是此系统的最后一个功能模块,主要包含以下内容:用户通过填写自己的个人本科阶段的各种信息(如绩点,校园经历,所修专业)交给AI端进行处理,并且由AI端根据这些信息进行推送相关院校。其具体逻辑为:前端接受到用户提交的信息后传给后端,后端通过消息队列传递给AI端;AI端先通过MCP协议去各大官网爬取数据,如果爬取失败,则使用本地RAG的内容进行推送,具体逻辑图如下:

一.数据库表的设计
本模块不涉及到数据库表的新增设计
二.相关接口的设计
2.1 接口的设计
本功能涉及的接口如下,使用SchoolController存储相关的接口,仅仅设计一个接口,即“/school/getSchool”,用于接受来自前端的信息,然后将此信息通过消息队列转发给AI端,具体接口设计代码如下:
public class SchoolController {
private final ISchoolService schoolService;
@PostMapping("/getSchool")
@Operation(summary = "获取院校推荐")
public Result<List<SchoolVO>> getSchool(@RequestBody SchoolDTO schoolDTO) {
log.info("院校推荐请求:{}", schoolDTO);
List<SchoolVO> schools = schoolService.getSchools(schoolDTO);
return Result.success(schools);
}
}
2.2 DTO的设计
DTO用于存储前端传来的数据,此接口涉及到的SchoolDTO如下:
其中涉及到最基本的本科学校名称,本科的学校层次和本科学校专业,其中本科学校层次使用枚举值来代表
然后是此用户本科期间在该学校的表现,包含其平均绩点,英语水平,排名,在校经历等,这些是评判该学生适合哪所学校的必要条件
最后是用户对于目标的期望,包含目标院校层次,目标专业和就业前景等,可以让AI减少搜索范围,给出更加精准的答复。
以下是SchoolDTO的完整代码:
@Schema(description = "挑选学校信息")
@Data
public class SchoolDTO {
@Schema(description = "本科学校名称")
private String preSchoolName;
@Schema(description = "本科学校层次,,枚举值,0双非,1为211,2为985,3为C9")
private Integer preSchoolLevel;
@Schema(description = "本科学校专业")
private String preSchoolMajor;
@Schema(description = "平均绩点")
private Double gpa;
@Schema(description = "英语水平,枚举值,0什么都没过,1四级,2六级")
private String englishLevel;
@Schema(description = "平均排名,枚举值")
private Integer rank;
@Schema(description = "在校经历")
private String experience;
@Schema(description = "目标学校层次(可多选)")
private List<Integer> targetSchoolLevel;
@Schema(description = "目标专业")
private String targetSchoolMajor;
@Schema(description = "读研目的,就业或者深造等")
private String target;
@Schema(description = "期望工作岗位")
private String job;
@Schema(description = "期望薪资:年薪,单位万")
private Integer salary;
@Schema(description = "是否考虑非全")
private Integer considerNonFull;
}
2.3 VO的设计
VO是后端用于发给前端的数据类型,SchoolVO是一个学校信息项。由上面的接口得知,传给侵短的是SchoolVO的一个List,主要内容如下:
首先是学校名称,专业,地址等邮箱简介等内容,介绍该学校的具体情况;
其次是一个招生科目的List,对于招生科目,采用SubjectVO来存储,其包含科目序号和科目名称,具体代码如下:
@Schema(description = "科目信息")
@Data
public class SubjectVO {
@Schema(description = "科目序号,如408,201等")
private Integer id;
@Schema(description = "科目名称")
private String name;
}
然后就是招生数量与往年的招生情况:使用RecruitVO的一个List来存储近三年的招生情况,其包含年份,招生人数,复试线等内容,具体代码设计如下:
RecruitVO {
@Schema(description = "年份")
private String year;
@Schema(description = "招生人数")
private Integer numbers;
@Schema(description = "复试线")
private Integer fushixian;
@Schema(description = "录取平均分")
private Integer averageScore;
@Schema(description = "录取中位数")
private Integer medianScore;
@Schema(description = "进入复试人数")
private Integer inFushiNumbers;
@Schema(description = "复录比")
private Double fulubi;
完整的传递学校信息的SchoolVO的代码如下:
@Schema(description = "学校信息")
@Data
public class SchoolVO {
@Schema(description = "学校名称")
private String name;
@Schema(description = "学校专业")
private String major;
@Schema(description = "学校地址")
private String address;
@Schema(description = "学校电话")
private String phone;
@Schema(description = "学校邮箱")
private String email;
@Schema(description = "学校简介")
private String introduction;
@Schema(description = "招生科目")
private List<SubjectVO> subjects;
@Schema(description = "招生数量")
private Integer number;
@Schema(description = "近三年招生情况")
private List<RecruitVO> recentYears;
三.相关文档的编写
3.1 编写接口文档
接下来编写相关的文档,使用markdown进行编写,这是文档局部截图

3.2 编写前端UI逻辑图
编写前端的UI逻辑图,用于指导前端UI的开发,此图如下:

将以上内容分发给相关开发者进行开发。
四.总结
本次院校推荐功能模块作为系统的收官之作,完成了从用户画像采集到 AI 智能决策再到前端结果展示的全链路设计,涵盖了基于 SchoolDTO的结构化输入模型、SchoolVO的多维度招生数据输出模型以及核心接口 /school/getSchool的定义,同时明确了后端通过消息队列与 AI 端解耦、AI 端优先通过 MCP 协议实时抓取官网数据并在失败时降级至本地 RAG 推理的混合推荐机制,配套输出了标准化的 Markdown 接口文档与前端 UI 逻辑图,为前后端与算法团队提供了清晰的协同开发依据,标志着系统在功能完整性、架构合理性与工程可落地性方面迈出了关键一步。
更多推荐



所有评论(0)