山东大学软件学院创新实训(一)
微服务架构设计文档与技术选型讨论搭建Python 3.10 + FastAPI + LangChain的开发环境,解决依赖冲突协助配置RabbitMQ容器化部署与网络规则定义RabbitMQ Topic规划与消息体JSON Schema,完成Pydantic/DTO契约对齐。
·
一、引言与个人职责
由于初始项目的定位较为简单,经过小组成员的商讨后,我们对项目的功能进行了细化和创新,从而推出更具智能且个性化的考研助手。通过了协商任务后,小组讨论确认了项目初始的架构以及进一步的分工。其中我负责AI后端模块的开发,主要目标为构建智能错题分析、个性化推荐及RAG问答服务,并集成大模型API,为平台提供智能化核心能力。
二、系统架构设计
系统架构的设计上,我们采用了客户端层-服务端层-数据层的三层架构:
┌─────────────────────────────────────────────────────────────┐
│ 客户端层 │
├──────────────────────┬──────────────────────────────────────┤
│ Web浏览器 │ 移动设备 │
│ (管理后台) │ (移动App - HBuilder打包) │
│ Vue3 + TypeScript │ Vue3 + TypeScript + UniApp │
│ Element Plus │ Vant UI组件库 │
│ Pinia状态管理 │ │
└──────────────────────┴──────────────────────────────────────┘
│ HTTPS/WSS
┌─────────────────────────▼──────────────────────────────────┐
│ 服务端层 │
├──────────────────────┬──────────────────────────────────────┤
│ AI后端服务器 │ 业务后端服务器 │
│ Python AI服务 │ Spring Boot应用 (Java 21) │
│ (FastAPI/Flask) │ - Tomcat嵌入式容器 │
│ - RabbitMQ消费者 │ - Mapper层 (MyBatis-Plus) │
│ - LangChain框架 │ - RabbitMQ客户端 │
│ - AI模型接口 │ - Service层 (业务逻辑) │
│ - 向量数据库 │ - WebSocket服务 │
│ │ - Controller层 (REST API) │
└──────────────────────┴──────────────────────────────────────┘
│
┌─────────────────────────▼──────────────────────────────────┐
│ 数据层 │
├──────────────┬──────────────┬──────────────┬───────────────┤
│ MySQL数据库 │ Redis缓存 │ 阿里云OSS │ RabbitMQ │
│ - 各种数据 │ - 会话缓存 │ - 图片/PDF │ - 传递数据 │
│ │ - 消息缓存 │ │ │
│ │ - 热点数据 │ │ │
└──────────────┴──────────────┴──────────────┴───────────────┘
采用Spring Boot (业务层) + RabbitMQ (异步总线) + FastAPI/LangChain (AI层)的异构微服务架构,兼顾业务稳定性与AI技术敏捷性。
三、接口契约设计:Spec驱动与RabbitMQ消息规范
3.1 核心功能模块划分
项目包含六大核心功能模块:
- 智能错题本系统
- 自主组卷练习 ↔ 每日智能推题
- 管理错题 ↔ AI分析与识别
- 生成查看知识图谱 ↔ 图片上传(OCR识别)
- 自定义错题标签、管理错题本
- 智能院校推荐
- 查看院校详情 ↔ 查看专业排名
- 查看分数线、查看报录比数据
- 获取个性化推荐 ↔ 院校信息检索
- 考研学习社区
- 查看个人历史、浏览信息流
- 发布帖子(含设置标签)↔ 富文本编辑
- 删除帖子、点赞帖子、评论帖子、收藏帖子
- 即时聊天与社交
- 好友管理、分享院校信息
- 实时消息通知 ↔ 一对一好友聊天
- 分享错题难题
- 个性化AI助手
- 学习规划建议、智能问答
- 智能对话 ↔ RAG知识检索
- 操作提示
- 管理员端功能
- 用户管理、帖子审核(AI智能审核 + 人工审核)
- 数据统计与可视化、AI大模型工具集成
3.2RabbitMQ Topic规划与消息体设计
| Exchange | Queue | Routing Key | 用途 | 消息体关键字段 |
| ai.task.exchange | ai.task.error-analysis | task.error.analysis | 下发错题分析任务 | task_id, user_id, question_text, user_answer, correct_answer |
| ai.result.exchange | ai.result.analysis | result.analysis | 回传分析结果 | task_id, weak_points[], knowledge_tags[], analysis, recommended_ids[] |
| ai.task.exchange | ai.task.rag-query | task.rag.query | RAG增强问答检索 | query, user_id, history[], top_k |
| ai.task.exchange | ai.task.knowledge-graph | task.knowledge.graph | 知识图谱生成 | user_id, error_topics[] |
3.3 幂等性与可靠性保障
- 去重机制:Python消费者根据
task_id查询Redis缓存,若已处理则直接ACK,避免大模型重复计费。 - 死信队列(DLQ):解析失败或LLM连续超时3次的消息路由至
ai.task.dlq,供运维人工介入。 - RabbitMQ配置:
publisher confirms+mandatory flag确保消息不丢失;manual ack配合业务逻辑保障至少一次消费。
四、知识图谱生成策略
对知识图谱的可视化进行了初步思索:
# 知识图谱生成伪代码
async def generate_knowledge_graph(user_id: int) -> dict:
# 1. 查询用户错题
error_topics = await get_user_error_topics(user_id)
# 2. 提取知识点标签
knowledge_points = await extract_knowledge_points(error_topics)
# 3. 构建图谱节点与边
nodes = []
edges = []
for point in knowledge_points:
nodes.append({
"id": point.id,
"label": point.name,
"mastery": calculate_mastery(user_id, point.id),
"category": point.category
})
# 添加知识点间的关联边
for relation in point.relations:
edges.append({
"source": point.id,
"target": relation.target_id,
"type": relation.type
})
return {"nodes": nodes, "edges": edges}
五、总结
本周以准备工作为主,目前主要完成了:
- 微服务架构设计文档与技术选型讨论
- 搭建Python 3.10 + FastAPI + LangChain的开发环境,解决依赖冲突
- 协助配置RabbitMQ容器化部署与网络规则
- 定义RabbitMQ Topic规划与消息体JSON Schema,完成Pydantic/DTO契约对齐
更多推荐
所有评论(0)