一、引言与个人职责
由于初始项目的定位较为简单,经过小组成员的商讨后,我们对项目的功能进行了细化和创新,从而推出更具智能且个性化的考研助手。通过了协商任务后,小组讨论确认了项目初始的架构以及进一步的分工。其中我负责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契约对齐