小米训练营大作业 - 技术方案
小米训练营大作业 - 技术方案
整体架构设计
本项目整体采用微服务架构进行设计与实现。通过对后端进行模块化划分,使各服务之间职责清晰、可扩展性强、易于维护。

数据库关系说明:
数据库采用关系型数据库进行设计,具体表结构与实体关系如下图所示:

整个后端系统划分为以下七个核心模块:
- api-gateway
- common
- service-auth
- service-chat
- service-history
- service-knowledge
- service-log
具体模块划分示意图如下:
其中,api-gateway
、service-auth
、service-chat
、service-history
、service-knowledge
等模块通过 Nacos 进行服务发现与配置管理,实现服务之间的动态注册与配置集中管理。
各模块功能简要描述:
api-gateway(网关服务)
网关模块,端口号设定为8088
,主要负责对外接口的统一入口,提供初步鉴权、限流、路由分发等功能。common(通用模块)
用于存放系统级公共资源,如全局异常处理、统一请求返回格式定义、通用工具类、拦截器配置等,为其他服务模块提供基础支撑。service-auth(用户认证模块)
监听端口8081
,实现用户的登录、注册、身份认证等功能,负责用户身份的管理。service-chat(AI问答与会话管理模块)
端口号8082
,主要负责 AI 问答、会话流程控制、上下文管理等与用户对话相关的核心逻辑。service-history(会话历史管理模块)
监听端口8085
,负责存储、查询用户与 AI 问答过程中的历史对话消息。service-knowledge(知识库管理模块)
端口号8083
,用于管理用户上传的知识库,支持知识入库、向量处理及检索功能。service-log(日志记录模块)
监听端口8084
,目前主要实现用户请求操作日志的记录与保存。
详细设计说明
用户模块
(演示视频可见 Day1 成果目录)
注册功能设计
采用基于邮箱验证码注册的方式,有效提升账户安全性。用户邮箱即为注册用户名。
- 邮箱授权采用 SMTP 协议 进行。

后端实现涉及验证码的生成、存储、有效性验证等核心流程。验证码在生成后立即发送到对应用户邮箱,并同步保存到 Redis 缓存中,默认有效期为 2 分钟,超时后自动失效。
用户在注册时必须正确输入验证码,验证通过后方可完成注册流程。

登录功能设计
登录流程采用用户邮箱与密码双重验证。
用户输入邮箱和密码进行登录请求。
登录成功后,后端服务生成 JWT Token,并将其存储至上下文中,供后续用户请求进行身份鉴权使用。
(此处仅为测试演示截图)
用户信息管理
系统支持用户对个人信息进行管理,包括但不限于:
修改用户头像(头像图片存储于阿里云 OSS 服务器)。
修改昵称等基本信息。
支持通过邮箱验证码进行密码修改,以保证账户安全性。

AI 问答与会话管理模块设计
- 本模块主要负责接收用户输入的问题,通过调用 qwen-plus 模型接口 实现 AI 客服问答服务。

- 在 AI 问答过程中,模块通过 OpenFeign 远程调用 会话历史消息管理模块,获取对应会话的历史消息,作为上下文,增强 AI 问答的连贯性与上下文理解能力。

- 同时,模块通过 OpenFeign 调用 知识库管理模块,在对话时结合知识库内容进行智能回复。

- 两个远程调用均使用 Java8 新特性 Lambda 表达式,并结合 线程池 创建两个子线程进行异步并行处理,提高响应效率。

- 对用户对话内容进行缓存处理,使用 Redis 存储用户问题与对应 AI 回复。对于重复提问,先从缓存中读取,如无命中再请求 AI 模型接口。

消息持久化部分,使用 RocketMQ 消息队列,通过生产者将对话消息发送至队列,由消费者异步落库至数据库。
当前存在的问题:
因需根据会话 ID 保证消息顺序,且消费失败后存在重试机制,容易导致消息多次落库。为此,已对生产者进行优化,根据会话 ID 将消息投递至不同队列,但该方案仍存在部分问题,后续需持续优化改进。支持 流式输出 与 一次性输出,目前由前端负责流控逻辑。
支持用户进行 会话新建、选择与管理 等功能操作。

会话历史消息管理模块设计
本模块主要负责对会话过程中的历史消息进行持久化存储。
对外开放接口,供 AI 问答模块调用,以便获取指定会话的历史消息,支持基于上下文的对话续接功能。
能够支持用户下次会话时继续在历史上下文中接入,保证用户体验的连续性。

知识库管理模块设计
本模块支持用户通过以下两种方式上传知识内容:
文件上传方式
手动输入方式
- 用户上传知识库后,后端会调用专门的 Python 服务,并结合 向量模型 对上传内容进行向量化处理,生成知识库向量,方便后续进行 RAG 检索。
在知识库检索过程中,首先通过 RAG 检索算法 对知识库进行向量匹配查询,获取相关内容后,再将检索结果作为上下文 Prompt 传递给 AI 模型进行回复生成。
向量检索逻辑中,使用了 Java Stream 流式操作对集合进行处理。
向量操作及处理方法主要参考网络公开资料,尚未进行深入研究与优化。
日志模块设计
本模块使用 AOP 面向切面编程 技术,实现对用户操作行为的自动日志记录。
系统对所有用户请求 Controller 层接口的行为进行统一拦截与日志记录,确保操作行为可追溯。
项目演示视频
实训总结
通过本次小米训练营,我学到了许多新知识,也把之前背的八股文进行了复习和代码实践。
在实训的各个阶段,从需求理解、方案设计到最终实现,我收获了很多宝贵的经验。通过亲自参与,我对项目开发流程有了更清晰的认识,也提升了自己独立思考和动手实践的能力。
非常感谢小米公司为我们提供这样一个实践平台,也感谢老师的耐心指导与帮助。每次的答疑、讲解,都让我受益匪浅。
同时,我也清晰地认识到了自己的不足之处。无论是对整体架构的理解深度,还是在方案设计、时间管理、以及任务执行中的细节把控上,都还有很多需要提升的地方。
未来,我会继续努力,弥补不足, 再次感谢小米和所有老师的支持与帮助!