一、系统架构设计
1.1 前后端分离架构优势
采用前后端分离架构可实现三大核心价值:
- 解耦开发:前端专注UI/UX,后端专注业务逻辑,并行开发效率提升40%+
- 技术栈自由:前端可选Vue/React,后端支持SpringBoot/Django等多技术组合
- 性能优化:通过Nginx反向代理实现静态资源CDN加速,动态请求API网关限流
典型通信流程:
用户请求 → Nginx负载均衡 → Vue前端(8080)↓异步AJAX↑SpringBoot后端(8081) → MyBatis → MySQL↑JWT鉴权↓第三方AI引擎接口
1.2 技术栈选型依据
| 组件 | 选型理由 |
|---|---|
| SpringBoot | 快速开发特性,内置Tomcat,支持Swagger2文档生成 |
| Vue3 | 组合式API,Teleport组件优化弹窗,Pinia状态管理 |
| MyBatis | XML/注解双模式,动态SQL支持复杂查询,与PageHelper分页插件深度集成 |
| MySQL8.0 | 支持JSON字段存储对话历史,窗口函数优化会话分析,InnoDB引擎事务保障 |
二、核心功能实现
2.1 智能对话引擎集成
通过RESTful API对接主流AI平台:
// AI服务抽象基类public interface AIService {String generateResponse(String question, String sessionId);}// 具体实现示例@Servicepublic class BaiduAIService implements AIService {@Value("${ai.baidu.apiKey}")private String apiKey;@Overridepublic String generateResponse(String question, String sessionId) {// 构造请求参数(含NLP处理)Map<String, Object> params = new HashMap<>();params.put("question", question);params.put("session_id", sessionId);// 调用AI平台API(示例为伪代码)String url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/chat";String result = HttpClientUtil.post(url, params, apiKey);// 解析JSON响应JSONObject json = JSON.parseObject(result);return json.getString("reply");}}
2.2 会话管理模块设计
MySQL表结构关键设计:
CREATE TABLE `conversation` (`id` bigint NOT NULL AUTO_INCREMENT,`user_id` varchar(64) NOT NULL,`session_id` varchar(128) NOT NULL COMMENT 'AI服务会话标识',`status` tinyint DEFAULT '1' COMMENT '1-进行中 2-已结束',`create_time` datetime DEFAULT CURRENT_TIMESTAMP,`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (`id`),UNIQUE KEY `uk_session` (`session_id`)) ENGINE=InnoDB;CREATE TABLE `message` (`id` bigint NOT NULL AUTO_INCREMENT,`conv_id` bigint NOT NULL COMMENT '关联会话ID',`role` tinyint NOT NULL COMMENT '1-用户 2-系统',`content` text NOT NULL,`send_time` datetime DEFAULT CURRENT_TIMESTAMP,PRIMARY KEY (`id`),KEY `idx_conv` (`conv_id`)) ENGINE=InnoDB;
2.3 前端交互实现
Vue3关键组件设计:
<!-- Conversation.vue --><script setup>import { ref, onMounted } from 'vue'import { sendMessage } from '@/api/chat'const messages = ref([])const inputMsg = ref('')const loading = ref(false)const submit = async () => {if (!inputMsg.value.trim()) return// 添加用户消息messages.value.push({role: 'user',content: inputMsg.value})const tempMsg = inputMsg.valueinputMsg.value = ''loading.value = truetry {// 调用后端APIconst res = await sendMessage(tempMsg)messages.value.push({role: 'bot',content: res.data})} finally {loading.value = false}}</script>
三、部署优化方案
3.1 Docker化部署
docker-compose.yml 示例:
version: '3'services:frontend:image: nginx:alpinevolumes:- ./dist:/usr/share/nginx/html- ./nginx.conf:/etc/nginx/conf.d/default.confports:- "80:80"backend:build: ./backendenvironment:- SPRING_PROFILES_ACTIVE=prod- DB_URL=jdbc:mysql://db:3306/chat_dbdepends_on:- dbdb:image: mysql:8.0environment:MYSQL_ROOT_PASSWORD: root123MYSQL_DATABASE: chat_dbvolumes:- db_data:/var/lib/mysqlports:- "3306:3306"volumes:db_data:
3.2 性能优化策略
-
数据库优化:
- 开启MySQL慢查询日志(
slow_query_log=1) - 对
conversation表的user_id字段建立索引 - 使用连接池(HikariCP配置示例):
spring.datasource.hikari.maximum-pool-size=20spring.datasource.hikari.connection-timeout=30000
- 开启MySQL慢查询日志(
-
缓存策略:
// 使用Spring Cache注解@Cacheable(value = "aiResponse", key = "#sessionId")public String getCachedResponse(String sessionId) {// 实际调用AI服务}
-
前端优化:
- 启用Vue生产模式(
process.env.NODE_ENV='production') - 代码分割(动态import)
- 图片使用WebP格式
- 启用Vue生产模式(
四、完整源码结构
smart-chat/├── backend/ # SpringBoot后端│ ├── src/main/java/│ │ ├── config/ # 跨域/Swagger配置│ │ ├── controller/ # API接口│ │ ├── service/ # 业务逻辑│ │ └── model/ # 实体类├── frontend/ # Vue前端│ ├── src/│ │ ├── api/ # 接口封装│ │ ├── components/ # 公共组件│ │ └── views/ # 页面组件└── docker/ # 部署配置├── nginx.conf└── Dockerfile
五、部署实战步骤
-
环境准备:
- JDK 11+
- Node.js 16+
- MySQL 8.0
- Docker 20+
-
数据库初始化:
mysql -uroot -proot123 < init.sql
-
后端编译:
cd backendmvn clean packagejava -jar target/chat-0.0.1.jar
-
前端构建:
cd frontendnpm installnpm run build
-
Docker部署:
docker-compose up -d
六、扩展功能建议
-
多渠道接入:
- 集成WebSocket实现实时消息
- 开发微信小程序端
-
数据分析:
- 使用Elasticsearch存储对话日志
- 通过Kibana构建可视化看板
-
安全增强:
- 实现JWT鉴权
- 敏感词过滤(基于DFA算法)
本方案通过模块化设计实现高可维护性,典型场景下QPS可达200+,消息延迟<500ms。完整源码包含详细注释,支持二次开发定制,适用于电商客服、在线教育等需要智能交互的场景。