山东大学软件学院项目实训团队博客:基于AI大模型的智能考研助手(四)
本周,小组顺利完成异步通信架构搭建、AI微服务核心功能开发、前后端全模块开发与联调准备,项目整体进入智能化应用深化阶段。
一、本周整体进度概览
|
成员 |
本周核心工作 |
|
邵木凡 |
完成数据库表结构设计、核心实体类封装,实现登录注册、错题本、错题管理及文件上传等后端接口 |
|
邢越 |
搭建Python AI微服务,实现通义千问大模型接入、RabbitMQ异步通信,完成错因分析报告生成与个性化推题两大核心功能 |
|
王浩 |
完善Redis/RabbitMQ/MySQL环境配置,搭建RabbitMQ异步通信架构,修复路由键匹配和JSON反序列化问题 |
|
王睿 |
完成uni-app全模块UI设计与页面开发,实现用户端、管理端核心页面,封装全模块API请求 |
二、各模块工作详情
(一)后端架构与数据库设计(邵木凡)
1. 数据库表结构设计
|
表名 |
说明 |
|
user |
用户基础信息(id、name、password、avatar、创建/更新时间、逻辑删除) |
|
notebook |
错题本实体 |
|
topic |
错题实体(标题、题干、答案等) |
|
topic_notebook |
错题本与错题多对多关联 |
|
topic_picture |
错题图片存储(区分题干图片与答案图片) |
|
topic_label |
错题与标签关联 |
2. 通用封装
- BaseEntity:统一整合创建时间、更新时间、逻辑删除字段
- Result<T>:统一后端响应格式
- BaseRequest:简化接口参数传递
3. 核心接口实现
|
模块 |
功能 |
|
用户模块 |
登录、注册、用户信息更新,集成JWT身份认证 |
|
错题本模块 |
增删改查、列表获取、详情查询 |
|
错题模块 |
增删改查、列表获取、详情查询 |
|
文件上传 |
对接阿里云OSS,实现头像上传 |
(二)RabbitMQ异步通信架构搭建(王浩)
1. 架构设计思路
考虑到AI模型分析题目需要数秒时间,直接HTTP同步等待会导致连接超时,因此设计基于RabbitMQ的异步流程:
text
前端上传 → picture-queue → Mock AI处理 → ai-result-queue → 返回结果
2. 核心代码
队列配置与路由键分离:
java
public static final String PICTURE_QUEUE = "picture-queue";
public static final String PICTURE_ROUTING_KEY = "picture-routing-key";
@Bean
public Binding pictureBinding(Queue pictureQueue, DirectExchange directExchange) {
return BindingBuilder.bind(pictureQueue).to(directExchange).with(PICTURE_ROUTING_KEY);
}
3. CompletableFuture异步等待机制
- 发送前:创建CompletableFuture对象存入并发Map,调用future.get(30, TimeUnit.SECONDS)阻塞等待
- 接收后:消费者收到MQ消息后通过requestId找到对应Future,调用future.complete(result)唤醒主线程
4. 关键问题解决
|
问题 |
原因 |
解决方案 |
|
FastJSON反序列化报错 |
@Builder注解导致无参构造缺失 |
补充@NoArgsConstructor |
|
消费者无响应 |
路由键匹配错误 |
修正路由键为picture-routing-key |
(三)AI微服务核心功能开发(邢越)
1. 错因分析报告
错因分析的核心流程:
text
用户提交错题 → RAG检索相关知识 → AI生成结构化报告
知识库构建:从LaTeX教材中提取知识点,按subsection粒度组织,向量化存储到FAISS。
提示词设计要点(重要经验):
- 错误类型必须从预设分类中选择
- 知识薄弱点要具体到知识点名称
- 清晰约束 + 具体示例 + 结构化输出要求 = 好的提示词工程
返回的报告包含:错误类型、错误描述、知识薄弱点、正确解法、学习建议、类似题目推荐。
2. 个性化推题
当前实现纯向量检索方案:
python
def search_similar(self, query_text: str, k: int = 3) -> List[Dict]:
# 在FAISS中进行向量相似度搜索
docs = self.similarity_search(query_text, k=k)
# 从MySQL获取完整信息
# 降级方案:直接返回向量库中的简化格式
后续规划“用户画像 + 向量检索”双层架构:
text
历史错题 → MySQL统计薄弱标签 → FAISS检索 → 去重排序 → 推送
3. 与图片分析功能的集成
python
def on_picture_message(self, ch, method, properties, body):
# 1. 调用视觉模型识别题目
result = ai_service.analyze_image(url)
question_stem = result.get("question_stem", "")
# 2. 基于识别结果,检索类似题目(最多3道)
similar_questions = rag_service.vector_store.search_similar(question_stem, k=3)
# 3. 构建响应(包含分析结果和推荐题目)
response = {
"questionStem": question_stem,
"analyseQuestion": result.get("analysis", ""),
"suggestLabels": result.get("tags", []),
"recommendTopics": similar_questions
}
4. 异构架构优势
采用Java业务层 + Python AI层,通过RabbitMQ消息队列解耦:
- Python AI生态友好,便于后续RAG、FAISS向量库落地
- 异步解耦,避免AI耗时任务阻塞前端
- 共享MySQL数据库,AI可实时读取错题数据
(四)前端UI与页面开发(王睿)
1. 设计规范
|
要素 |
设计 |
|
主色调 |
蓝紫色渐变(#667eea → #764ba2) |
|
风格 |
现代简约、圆角卡片、渐变、阴影 |
|
适配 |
rpx单位、flex布局,兼容多端 |
2. 核心页面
|
端 |
页面 |
|
用户端 |
登录/注册、首页推荐、错题本、社区、院校数据、AI助手、个人中心 |
|
管理端 |
仪表盘、用户/帖子/评论/举报管理、系统设置、操作日志 |
3. 功能与交互
- 错题本左滑编辑/删除、下拉刷新、上拉加载、空状态提示、对话气泡布局
- 封装AppIcon、卡片、按钮等通用组件
- 全模块API请求封装,自动携带Token
三、跨模块协同成果
本周四名成员的工作形成了紧密的协同闭环:
text
王睿(前端UI)──API调用──→ 邵木凡(后端接口)
↓
王浩(RabbitMQ)
↓
邢越(AI服务)
↓
返回分析结果
已打通的完整链路:
- 用户通过前端上传图片
- 后端通过RabbitMQ异步发送到AI服务
- AI服务进行错因分析并检索类似题目
- 结果通过消息队列返回
- 前端展示分析报告和推荐题目
四、测试效果展示
Swagger接口测试
在Swagger测试界面中正常注册、登录,/topic/uploadAI接口测试成功:
text
请求:POST /topic/uploadAI
参数:{"imageUrl": "http://xxx/example.jpg"}
响应:{
"code": 200,
"message": "success",
"data": {
"questionStem": "已知函数f(x) = x² + 2x + 1,求f(2)的值",
"analyseQuestion": "这是一道基础的函数求值题,考察二次函数的基本运算能力",
"analyseWrong": "常见错误:代入时符号错误,或者计算顺序混乱",
"suggestLabels": ["函数", "二次函数", "代数运算", "求值"],
"recommendTopics": [...]
}
}
错因分析报告效果
系统能够精确分类错误类型(概念理解错误/计算错误/方法选择错误/审题不清等),知识薄弱点具体到知识点名称,学习建议具有较强可操作性。
个性化推题效果
查询“导数与微分的计算”,系统推送了三道有关联的微积分题目,格式规范统一,具有较好的可读性。
五、本周总结
本周的开发使得错题本从一个题目“记录工具”变成了“智能学习助手”。它不仅能识别题目、回答问题,更能诊断错误原因、推荐学习方案。这种从“被动记录”到“主动指导”的转变,正是AI技术在教育领域的核心价值所在。
主要成果:
- 后端完成数据库设计、接口开发、环境优化与全量接口测试
- AI服务完成大模型接入与消息队列通信,架构具备强扩展性
- 前端完成全模块UI与页面开发,具备前后端联调条件
- 项目整体进入前后端联调与AI功能深化阶段
六、下周计划
- 前后端联调:完成接口联调,实现登录、错题本等功能端到端验证
- RAG知识库构建:获取远程RabbitMQ地址,与Python AI团队进行真实接口对接
- 数据落库:实现相关接口,将AI分析结果保存到数据库
- 前端优化:完善前端交互,对接真实接口数据
- 文档完善:完善文档、注释,修复已知问题,优化代码结构
- 体验优化:增加WebSocket实时推送功能,让用户无感知接收AI分析结果
更多推荐


所有评论(0)