智能问答聊天系统 (Chat Backend Server)
项目简介
这是一个基于 Spring Boot 3.2.4 和 Java 17 开发的智能问答聊天系统后端服务。项目集成了多种AI模型服务,支持普通聊天和深度研究两种问答模式,提供完整的用户认证、会话管理、邮件服务等功能。
项目类型: RESTful API 服务 编程语言: Java 17 框架: Spring Boot 3.2.4 数据库: MySQL 8.4.5 ORM框架: MyBatis-Flex 1.11.0 认证方式: JWT + Spring Security AI集成: Spring AI + OpenAI API
核心功能特性
🤖 智能问答系统
- 普通聊天模式: 支持日常对话和简单问答
- 深度研究模式: 提供专业研究分析,包含引用资料和报告生成
- 多模型支持: 集成 OpenAI GPT-4o-mini 和自定义 LLM 服务
- 流式响应: 支持实时流式对话体验
👤 用户管理系统
- 用户注册/登录: 支持邮箱注册和JWT认证
- 密码重置: 邮件验证码重置密码功能
- 用户资料管理: 个人信息修改和头像上传
- 多种用户类型: 个人用户、企业用户、管理员
💬 会话管理
- 会话持久化: 保存用户对话历史
- 上下文关联: 支持多轮对话上下文
- 会话分类: 区分普通聊天和研究模式会话
- 消息序列: 完整的消息时序管理
🔐 安全认证
- JWT Token: 无状态身份认证
- Spring Security: 完整的安全框架集成
- 密码加密: BCrypt 密码哈希存储
- API权限控制: 基于角色的访问控制
📧 邮件服务
- 验证码发送: 注册和密码重置验证
- 邮件模板: 支持HTML邮件模板
- 开发模式: 控制台输出验证码便于调试
技术架构
后端技术栈
Spring Boot 3.2.4
├── Spring Web (RESTful API)
├── Spring Security (安全认证)
├── Spring AI (AI模型集成)
├── Spring Mail (邮件服务)
├── MyBatis-Flex (ORM框架)
├── HikariCP (数据库连接池)
├── JWT (JSON Web Token)
├── Lombok (代码简化)
└── SpringDoc OpenAPI (API文档)
数据库设计
MySQL 8.4.5
├── users (用户主表)
├── conversations (会话表)
├── messages (消息表)
├── conversation_research_meta (研究元数据)
├── membership_levels (会员等级)
└── user_auth_accounts (第三方登录)
项目目录结构
backserver/
├── src/main/java/com/yundage/chat/
│ ├── ChatApplication.java # 应用程序主入口
│ ├── config/ # 配置类目录
│ │ ├── SecurityConfig.java # Spring Security配置
│ │ ├── JwtAuthenticationFilter.java # JWT认证过滤器
│ │ ├── LlmApiProperties.java # LLM API配置属性
│ │ ├── LlmWebClientConfig.java # LLM WebClient配置
│ │ ├── OpenApiConfig.java # OpenAPI文档配置
│ │ └── UserTypeHandler.java # 用户类型处理器
│ ├── controller/ # 控制器层
│ │ ├── AuthController.java # 认证相关API
│ │ ├── ChatController.java # 聊天相关API
│ │ └── UserController.java # 用户管理API
│ ├── dto/ # 数据传输对象
│ │ ├── AuthResponse.java # 认证响应DTO
│ │ ├── ChatRequest.java # 聊天请求DTO
│ │ ├── ChatResponse.java # 聊天响应DTO
│ │ ├── LoginRequest.java # 登录请求DTO
│ │ ├── RegisterRequest.java # 注册请求DTO
│ │ ├── PasswordResetRequest.java # 密码重置请求DTO
│ │ ├── ResetPasswordRequest.java # 重置密码请求DTO
│ │ ├── StreamResponse.java # 流式响应DTO
│ │ ├── UserDTO.java # 用户信息DTO
│ │ ├── UserProfileUpdateRequest.java # 用户资料更新DTO
│ │ ├── VerificationCodeRequest.java # 验证码请求DTO
│ │ └── VerifyCodeRequest.java # 验证码验证DTO
│ ├── entity/ # 实体类
│ │ ├── User.java # 用户实体
│ │ ├── Conversation.java # 会话实体
│ │ ├── Message.java # 消息实体
│ │ └── PasswordResetToken.java # 密码重置令牌实体
│ ├── enums/ # 枚举类
│ ├── mapper/ # MyBatis映射器
│ ├── service/ # 服务层接口
│ │ ├── ChatService.java # 聊天服务接口
│ │ ├── UserService.java # 用户服务接口
│ │ ├── EmailService.java # 邮件服务接口
│ │ ├── LLMService.java # LLM服务接口
│ │ └── CustomUserDetailsService.java # 用户详情服务
│ ├── service/impl/ # 服务层实现
│ │ ├── ChatServiceImpl.java # 聊天服务实现
│ │ ├── UserServiceImpl.java # 用户服务实现
│ │ ├── EmailServiceImpl.java # 邮件服务实现
│ │ ├── SpringAIModelService.java # Spring AI模型服务
│ │ └── CustomAPIModelService.java # 自定义API模型服务
│ └── util/ # 工具类
├── src/main/resources/
│ ├── application.yml # 应用配置文件
│ ├── schema.sql # 数据库表结构
│ └── mapper/ # MyBatis XML映射文件
│ ├── UserMapper.xml # 用户映射文件
│ └── PasswordResetTokenMapper.xml # 密码重置令牌映射
├── docs/ # 项目文档
│ ├── chat.md # 聊天API设计文档
│ └── 忘记密码和重置密码.md # 密码重置功能文档
├── target/ # Maven构建输出目录
├── Dockerfile # Docker镜像构建文件
├── docker-compose.yml # Docker Compose配置
├── deploy.sh # 部署脚本
├── pom.xml # Maven项目配置
├── 更新.md # 更新日志
└── README.md # 项目说明文档
快速开始
环境要求
- Java: 17+
- Maven: 3.6+
- MySQL: 8.0+
- Docker: 20.10+ (可选)
本地开发环境搭建
- 克隆项目
git clone <repository-url>
cd backserver
- 配置数据库
-- 创建数据库
CREATE DATABASE yunda_qa CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
-- 导入表结构
mysql -u root -p yunda_qa < src/main/resources/schema.sql
- 配置应用参数
编辑
src/main/resources/application.yml:
spring:
datasource:
url: jdbc:mysql://localhost:3306/yunda_qa
username: root
password: Zjj7574166
mail:
host: smtp.gmail.com
username: your-email@gmail.com
password: your-app-password
ai:
openai:
api-key: your-openai-api-key
base-url: https://api.openai.com
- 启动应用
# 使用Maven启动
mvn spring-boot:run
# 或者编译后启动
mvn clean package
java -jar target/chat-0.0.1-SNAPSHOT.jar
- 访问应用
- API服务: http://localhost:8080
- API文档: http://localhost:8080/swagger-ui.html
- 健康检查: http://localhost:8080/actuator/health
Docker部署
- 构建镜像
docker build -t backserver-app .
- 使用Docker Compose启动
docker-compose up -d
API接口文档
认证相关 API
用户注册
POST /api/auth/register
Content-Type: application/json
{
"username": "用户名",
"email": "user@example.com",
"password": "password123"
}
用户登录
POST /api/auth/login
Content-Type: application/json
{
"email": "user@example.com",
"password": "password123"
}
密码重置
POST /api/auth/forgot-password
Content-Type: application/json
{
"email": "user@example.com"
}
聊天相关 API
发送消息
POST /api/chat/send
Authorization: Bearer <jwt-token>
Content-Type: application/json
{
"mode": "chat", // chat | research
"conversation_id": "12345", // 可选,会话ID
"message": "你好,什么是AI?" // 用户消息
}
流式聊天
POST /api/chat/stream
Authorization: Bearer <jwt-token>
Content-Type: application/json
{
"mode": "chat",
"conversation_id": "12345",
"message": "请详细解释机器学习"
}
用户管理 API
获取用户信息
GET /api/users/profile
Authorization: Bearer <jwt-token>
更新用户资料
PUT /api/users/profile
Authorization: Bearer <jwt-token>
Content-Type: application/json
{
"username": "新用户名",
"avatarUrl": "头像URL"
}
配置说明
应用配置 (application.yml)
数据库配置
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/yunda_qa
username: root
password: your_password
JWT配置
jwt:
secret: your-jwt-secret-key
expiration: 86400000 # 24小时
AI模型配置
spring:
ai:
openai:
api-key: your-openai-api-key
base-url: https://api.openai.com
chat:
options:
model: gpt-4o-mini
llm:
base-url: http://127.0.0.1:8000 # 自定义LLM服务地址
邮件配置
spring:
mail:
host: smtp.gmail.com
port: 587
username: your-email@gmail.com
password: your-app-password
properties:
mail:
smtp:
auth: true
starttls:
enable: true
开发指南
代码结构说明
控制器层 (Controller)
- AuthController: 处理用户认证相关请求(注册、登录、密码重置)
- ChatController: 处理聊天相关请求(发送消息、流式聊天)
- UserController: 处理用户管理相关请求(资料查看、更新)
服务层 (Service)
- UserService: 用户管理业务逻辑
- ChatService: 聊天业务逻辑
- EmailService: 邮件发送业务逻辑
- LLMService: AI模型调用业务逻辑
数据访问层 (Mapper)
- 使用 MyBatis-Flex 进行数据库操作
- 支持注解和XML两种映射方式
- 提供BaseMapper基础CRUD操作
配置层 (Config)
- SecurityConfig: Spring Security安全配置
- JwtAuthenticationFilter: JWT认证过滤器
- OpenApiConfig: Swagger API文档配置
开发规范
代码注释规范
每个类和方法都应包含完整的JavaDoc注释:
/**
* 用户认证控制器
*
* 提供用户注册、登录、密码重置等认证相关功能
*
* @author YourName
* @version 1.0
* @since 2025-01-01
*/
@RestController
@RequestMapping("/api/auth")
public class AuthController {
/**
* 用户注册
*
* @param request 注册请求参数
* @return 注册结果响应
* @throws UserAlreadyExistsException 用户已存在异常
*/
@PostMapping("/register")
public ResponseEntity<AuthResponse> register(@Valid @RequestBody RegisterRequest request) {
// 实现逻辑
}
}
异常处理
使用统一的异常处理机制:
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(UserNotFoundException.class)
public ResponseEntity<ErrorResponse> handleUserNotFound(UserNotFoundException ex) {
return ResponseEntity.status(HttpStatus.NOT_FOUND)
.body(new ErrorResponse("USER_NOT_FOUND", ex.getMessage()));
}
}
数据验证
使用Bean Validation进行参数验证:
public class RegisterRequest {
@NotBlank(message = "用户名不能为空")
@Size(min = 2, max = 50, message = "用户名长度必须在2-50个字符之间")
private String username;
@NotBlank(message = "邮箱不能为空")
@Email(message = "邮箱格式不正确")
private String email;
@NotBlank(message = "密码不能为空")
@Size(min = 6, max = 100, message = "密码长度必须在6-100个字符之间")
private String password;
}
测试指南
单元测试
# 运行所有测试
mvn test
# 运行特定测试类
mvn test -Dtest=UserServiceTest
# 运行测试并生成覆盖率报告
mvn test jacoco:report
集成测试
# 运行集成测试
mvn verify
# 使用测试配置文件
mvn test -Dspring.profiles.active=test
API测试
使用Swagger UI进行API测试:
- 启动应用
- 访问 http://localhost:8080/swagger-ui.html
- 选择相应的API端点进行测试
部署指南
生产环境部署
1. 环境变量配置
export SPRING_PROFILES_ACTIVE=prod
export SPRING_DATASOURCE_URL=jdbc:mysql://prod-db:3306/yunda_qa
export SPRING_DATASOURCE_USERNAME=prod_user
export SPRING_DATASOURCE_PASSWORD=prod_password
export JWT_SECRET=your-production-jwt-secret
export OPENAI_API_KEY=your-production-openai-key
2. 使用Docker部署
# 构建生产镜像
docker build -t backserver-app:latest .
# 启动服务
docker-compose -f docker-compose.prod.yml up -d
3. 使用脚本部署
# 执行部署脚本
chmod +x deploy.sh
./deploy.sh
监控和日志
应用监控
- 健康检查:
/actuator/health - 应用信息:
/actuator/info - 性能指标:
/actuator/metrics
日志配置
logging:
level:
com.yundage.chat: INFO
org.springframework.security: WARN
pattern:
file: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"
file:
name: logs/application.log
故障排除
常见问题
1. 数据库连接失败
检查数据库配置和网络连接
确认数据库服务是否正常运行
验证用户名密码是否正确
2. JWT认证失败
检查JWT密钥配置
确认token是否过期
验证请求头格式是否正确
3. AI模型调用失败
检查API密钥是否有效
确认网络连接是否正常
验证模型配置是否正确
4. 邮件发送失败
检查SMTP服务器配置
确认邮箱密码是否正确
验证网络防火墙设置
调试技巧
启用调试日志
logging:
level:
com.yundage.chat: DEBUG
org.springframework.security: DEBUG
使用开发工具
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
贡献指南
开发流程
- Fork项目到个人仓库
- 创建功能分支 (
git checkout -b feature/new-feature) - 提交代码 (
git commit -am 'Add new feature') - 推送分支 (
git push origin feature/new-feature) - 创建Pull Request
代码规范
- 遵循Java编码规范
- 使用统一的代码格式化配置
- 编写完整的单元测试
- 添加必要的文档注释
版本历史
v0.0.1-SNAPSHOT (当前版本)
- ✅ 基础用户认证系统
- ✅ JWT token认证
- ✅ 普通聊天功能
- ✅ 深度研究模式
- ✅ 邮件服务集成
- ✅ OpenAI API集成
- ✅ 数据库设计和实现
- ✅ Docker容器化支持
- ✅ API文档生成
计划功能
- 🔄 多模型支持扩展
- 🔄 实时WebSocket聊天
- 🔄 文件上传和处理
- 🔄 会话导出功能
- 🔄 用户权限管理
- 🔄 API限流和监控
- 🔄 缓存优化
- 🔄 国际化支持
许可证
本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。
联系方式
- 项目维护者: YunDaGe Team
- 邮箱: support@yundage.com
- 项目地址: https://github.com/yundage/backserver
注意: 本项目目前处于开发阶段,部分功能可能还在完善中。如有问题或建议,欢迎提交Issue或Pull Request。
项目架构分析和文档完善总结
已完成的工作
📋 项目分析
- ✅ 完整分析了项目目录结构和技术架构
- ✅ 识别了所有主要模块和组件
- ✅ 理解了数据库设计和业务逻辑
- ✅ 分析了API接口设计和功能特性
📚 文档创建和完善
-
✅ 主README.md: 创建了详细的项目说明文档,包含:
- 项目简介和技术栈
- 完整的目录结构说明
- 快速开始指南
- API接口文档
- 配置说明和部署指南
- 开发规范和测试指南
- 故障排除和版本历史
-
✅ src/README.md: 创建了源代码目录说明文档
-
✅ docs/README.md: 创建了文档目录说明文档
💻 代码注释完善
- ✅ ChatApplication.java: 添加了详细的类和方法注释
- ✅ AuthController.java: 添加了完整的控制器注释
- ✅ User.java: 添加了详细的实体类注释
- ✅ ChatService.java: 添加了完整的服务接口注释
项目特点总结
🏗️ 技术架构
- 后端框架: Spring Boot 3.2.4 + Java 17
- 数据库: MySQL 8.4.5 + MyBatis-Flex 1.11.0
- 安全认证: Spring Security + JWT
- AI集成: Spring AI + OpenAI API
- 容器化: Docker + Docker Compose
🚀 核心功能
- 智能问答: 支持普通聊天和深度研究两种模式
- 用户管理: 完整的注册、登录、密码重置功能
- 会话管理: 持久化对话历史,支持多轮对话
- 流式响应: 实时流式对话体验
- 邮件服务: 验证码发送和密码重置
📊 数据库设计
- 用户系统: users, user_auth_accounts, membership_levels
- 会话系统: conversations, messages, conversation_research_meta
- 安全机制: 密码重置令牌、验证码管理
代码质量改进
📝 注释规范
- 所有主要类都添加了详细的JavaDoc注释
- 方法注释包含参数说明、返回值、异常处理
- 代码逻辑注释解释了关键业务流程
- API注释包含使用示例和注意事项
🔧 开发规范
- 统一的代码注释格式
- 清晰的异常处理机制
- 完整的参数验证
- 安全的权限控制
项目优势
💪 技术优势
- 现代化的技术栈,性能优异
- 完整的安全认证体系
- 灵活的AI模型集成
- 标准的RESTful API设计
📖 文档优势
- 详细的项目说明文档
- 完整的API接口文档
- 清晰的开发指南
- 实用的部署说明
🛡️ 安全优势
- JWT无状态认证
- 密码加密存储
- 用户数据隔离
- 完善的权限控制
后续改进建议
🔄 功能扩展
- 实时WebSocket聊天
- 文件上传和处理
- 多模型支持扩展
- 用户权限管理优化
📈 性能优化
- 缓存机制集成
- 数据库查询优化
- API限流和监控
- 异步处理优化
🧪 测试完善
- 单元测试覆盖
- 集成测试编写
- API自动化测试
- 性能测试实施
总结: 这是一个架构清晰、功能完整的智能问答聊天系统。通过详细的文档和代码注释,为后续的开发和维护提供了良好的基础。项目采用了现代化的技术栈,具有良好的扩展性和可维护性。
Description
Languages
Java
98.5%
Shell
1.1%
Dockerfile
0.4%