Knowledge Assistant 是一个基于 Spring Boot 3.2.5 构建的综合后端应用程序,旨在提供智能的知识管理和检索能力。该系统集成了多种技术,包括 MySQL、Redis、RabbitMQ 和 Milvus 向量数据库,以提供强大的知识助手平台。
- Java: 17
- Spring Boot: 3.2.5
- 构建工具: Maven 3.9+
- 数据库: MySQL 8.x
- 缓存: Redis 7.x
- 消息队列: RabbitMQ 3.12+
- 向量数据库: Milvus 2.6.11
- ORM: MyBatis-Plus 3.5.7
- 认证: JWT (jjwt 0.12.6)
- 文档处理:
- Apache PDFBox 3.0.3
- Apache POI 5.3.0
- flexmark-java 0.64.8
- Java 开发工具包 (JDK): 17 或更高版本
- Maven: 3.9 或更高版本
- Docker: 20.10 或更高版本(用于 Redis 和 RabbitMQ 部署)
- MySQL: 8.0 或更高版本
- Redis: 7.0 或更高版本
- RabbitMQ: 3.9 或更高版本
本项目使用 Windows 11 本地安装 MySQL 8.x 数据库,确保开发环境的稳定性和性能。
详细的安装和部署步骤请参阅 数据库部署文档。
本项目使用 Docker Compose 部署 Redis 缓存服务器,为应用提供高性能的缓存服务。
详细的部署步骤请参阅:
本项目使用 Docker Compose 部署 RabbitMQ 消息队列服务器,为应用提供异步消息处理能力。
详细的部署步骤请参阅:
cd backend/docker/rabbitmq
./start.sh启动后可以访问 RabbitMQ 管理界面:http://localhost:15672
默认登录凭据:
- 用户名:
guest - 密码:
guest
项目提供了 Redis 维护脚本,位于 backend/scripts/ 目录:
backup-redis.sh: 备份 Redis 数据restore-redis.sh: 恢复 Redis 数据cleanup-redis.sh: 清理 Redis 数据monitor-redis.sh: 监控 Redis 性能
项目提供了 RabbitMQ 维护脚本,位于 backend/scripts/ 目录:
backup-rabbitmq.sh: 备份 RabbitMQ 数据restore-rabbitmq.sh: 恢复 RabbitMQ 数据cleanup-rabbitmq.sh: 清理 RabbitMQ 数据monitor-rabbitmq.sh: 监控 RabbitMQ 性能
应用程序使用环境变量来配置敏感信息。请复制 .env.example 为 .env 并配置以下变量:
# Redis 连接配置
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD= # 留空表示无密码# RabbitMQ 连接配置
RABBITMQ_HOST=localhost
RABBITMQ_PORT_AMQP=5672
RABBITMQ_PORT_MANAGEMENT=15672
RABBITMQ_USERNAME=guest
RABBITMQ_PASSWORD=guest
RABBITMQ_VHOST=/项目使用 Redis 7.x 作为缓存服务器,提供了三个缓存服务:
- SessionCacheService: 用户会话缓存
- TokenCacheService: Token 黑名单缓存
- RedisCacheService: 通用缓存服务
- Key 序列化: StringRedisSerializer(UTF-8 字符串)
- Value 序列化: GenericJackson2JsonRedisSerializer(JSON + 类型信息)
项目使用 RabbitMQ 3.12+ 作为消息队列服务器,提供了异步消息处理能力:
- qa.request.queue: 问答请求队列(TTL: 1 小时)
- document.processing.queue: 文档处理队列(TTL: 24 小时)
- qa.request.dlq: 问答请求死信队列
- document.processing.dlq: 文档处理死信队列
- qa.exchange: 问答请求交换机(Direct 类型)
- document.exchange: 文档处理交换机(Direct 类型)
- qa.request.dlx: 问答请求死信交换机(Direct 类型)
- document.processing.dlx: 文档处理死信交换机(Direct 类型)
- 消息转换器: Jackson2JsonMessageConverter(JSON 序列化)
- 发布确认: correlated(关联确认)
- 发布返回: true(启用返回)
- 并发消费: 1-3
- 最大并发数: 5
- 预取数量: 1
- 确认模式: AUTO
import io.github.turmony.knowledge.producer.MessageProducerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class QaService {
@Autowired
private MessageProducerService messageProducerService;
/**
* 发送问答请求消息
*/
public void sendQaRequest(QaRequest request) {
messageProducerService.sendMessage(
"qa.exchange",
"qa.request",
request
);
}
}消费者监听器会自动监听队列并处理消息:
- QaRequestConsumer: 处理问答请求队列消息
- DocumentProcessingConsumer: 处理文档处理队列消息
- QaRequestDlqConsumer: 处理问答请求死信队列消息
- DocumentProcessingDlqConsumer: 处理文档处理死信队列消息
应用程序启动后,API 基础 URL 为:
- 开发环境:
http://localhost:8080/api - 生产环境:
http://localhost:8080/api
- 确认 Redis 容器正在运行:
docker ps | grep knowledge-redis - 检查 Redis 环境变量配置是否正确
- 测试 Redis 连接:
docker exec -it knowledge-redis redis-cli ping - 查看应用程序日志:
tail -f backend/logs/application-dev.log
- 确认 RabbitMQ 容器正在运行:
docker ps | grep knowledge-rabbitmq - 检查 RabbitMQ 环境变量配置是否正确
- 测试 RabbitMQ 连接:访问管理界面 http://localhost:15672
- 查看 RabbitMQ 容器日志:
docker logs knowledge-rabbitmq - 查看应用程序日志:
tail -f backend/logs/application-dev.log
- 确认 Spring Boot 应用已成功启动
- 检查 RabbitMQ 配置类是否正确加载
- 查看 RabbitMQ 管理界面的 Queues 页面
- 查看应用程序日志中的队列创建信息
-
生产环境必须修改默认凭据:
- Redis 密码
- RabbitMQ 用户名和密码
- MySQL 密码
- JWT 密钥
-
环境变量文件:
.env文件已添加到.gitignore- 不要将
.env文件提交到版本控制 - 使用
.env.example作为模板创建本地配置
本项目采用 MIT 许可证。
在贡献代码之前,请阅读 agent-os/standards/ 目录中的编码标准。