Skip to content

Repository files navigation

Knowledge Assistant 知识助手

项目概述

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 或更高版本

数据库部署

本地安装 MySQL

本项目使用 Windows 11 本地安装 MySQL 8.x 数据库,确保开发环境的稳定性和性能。

详细的安装和部署步骤请参阅 数据库部署文档

使用 Docker 部署 Redis

本项目使用 Docker Compose 部署 Redis 缓存服务器,为应用提供高性能的缓存服务。

详细的部署步骤请参阅:

使用 Docker 部署 RabbitMQ

本项目使用 Docker Compose 部署 RabbitMQ 消息队列服务器,为应用提供异步消息处理能力。

详细的部署步骤请参阅:

快速启动 RabbitMQ

cd backend/docker/rabbitmq
./start.sh

启动后可以访问 RabbitMQ 管理界面:http://localhost:15672

默认登录凭据:

  • 用户名: guest
  • 密码: guest

数据库维护脚本

Redis 维护脚本

项目提供了 Redis 维护脚本,位于 backend/scripts/ 目录:

  • backup-redis.sh: 备份 Redis 数据
  • restore-redis.sh: 恢复 Redis 数据
  • cleanup-redis.sh: 清理 Redis 数据
  • monitor-redis.sh: 监控 Redis 性能

RabbitMQ 维护脚本

项目提供了 RabbitMQ 维护脚本,位于 backend/scripts/ 目录:

  • backup-rabbitmq.sh: 备份 RabbitMQ 数据
  • restore-rabbitmq.sh: 恢复 RabbitMQ 数据
  • cleanup-rabbitmq.sh: 清理 RabbitMQ 数据
  • monitor-rabbitmq.sh: 监控 RabbitMQ 性能

环境变量配置

应用程序使用环境变量来配置敏感信息。请复制 .env.example.env 并配置以下变量:

Redis 配置

# Redis 连接配置
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=  # 留空表示无密码

RabbitMQ 配置

# RabbitMQ 连接配置
RABBITMQ_HOST=localhost
RABBITMQ_PORT_AMQP=5672
RABBITMQ_PORT_MANAGEMENT=15672
RABBITMQ_USERNAME=guest
RABBITMQ_PASSWORD=guest
RABBITMQ_VHOST=/

缓存和消息队列架构

Redis 缓存架构

项目使用 Redis 7.x 作为缓存服务器,提供了三个缓存服务:

缓存服务

  1. SessionCacheService: 用户会话缓存
  2. TokenCacheService: Token 黑名单缓存
  3. RedisCacheService: 通用缓存服务

序列化策略

  • Key 序列化: StringRedisSerializer(UTF-8 字符串)
  • Value 序列化: GenericJackson2JsonRedisSerializer(JSON + 类型信息)

RabbitMQ 消息队列架构

项目使用 RabbitMQ 3.12+ 作为消息队列服务器,提供了异步消息处理能力:

消息队列

  1. qa.request.queue: 问答请求队列(TTL: 1 小时)
  2. document.processing.queue: 文档处理队列(TTL: 24 小时)

死信队列

  1. qa.request.dlq: 问答请求死信队列
  2. document.processing.dlq: 文档处理死信队列

交换机

  1. qa.exchange: 问答请求交换机(Direct 类型)
  2. document.exchange: 文档处理交换机(Direct 类型)
  3. qa.request.dlx: 问答请求死信交换机(Direct 类型)
  4. 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 文档

应用程序启动后,API 基础 URL 为:

  • 开发环境: http://localhost:8080/api
  • 生产环境: http://localhost:8080/api

常见问题

Redis 连接失败

  1. 确认 Redis 容器正在运行:docker ps | grep knowledge-redis
  2. 检查 Redis 环境变量配置是否正确
  3. 测试 Redis 连接:docker exec -it knowledge-redis redis-cli ping
  4. 查看应用程序日志:tail -f backend/logs/application-dev.log

RabbitMQ 连接失败

  1. 确认 RabbitMQ 容器正在运行:docker ps | grep knowledge-rabbitmq
  2. 检查 RabbitMQ 环境变量配置是否正确
  3. 测试 RabbitMQ 连接:访问管理界面 http://localhost:15672
  4. 查看 RabbitMQ 容器日志:docker logs knowledge-rabbitmq
  5. 查看应用程序日志:tail -f backend/logs/application-dev.log

RabbitMQ 队列未创建

  1. 确认 Spring Boot 应用已成功启动
  2. 检查 RabbitMQ 配置类是否正确加载
  3. 查看 RabbitMQ 管理界面的 Queues 页面
  4. 查看应用程序日志中的队列创建信息

安全性注意事项

  1. 生产环境必须修改默认凭据

    • Redis 密码
    • RabbitMQ 用户名和密码
    • MySQL 密码
    • JWT 密钥
  2. 环境变量文件

    • .env 文件已添加到 .gitignore
    • 不要将 .env 文件提交到版本控制
    • 使用 .env.example 作为模板创建本地配置

许可证

本项目采用 MIT 许可证。

贡献指南

在贡献代码之前,请阅读 agent-os/standards/ 目录中的编码标准。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages