Skip to content

AI 知识库管理系统 | 基于 RAG 技术的智能文档处理平台

License

Notifications You must be signed in to change notification settings

Maruiful/BitKnowledge

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

28 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

比特智搜 BitKnowledge

🚀 企业级 AI 知识库管理系统 | 基于 RAG 技术的智能文档处理平台

Java Spring Boot Vue TypeScript License


📖 项目简介

比特智搜(BitKnowledge) 是一个企业级的 AI 知识库管理系统,采用先进的 检索增强生成(RAG) 技术,提供智能文档处理和检索能力。

🎯 核心特性

  • 🔍 智能检索 - 基于 Elasticsearch 的语义搜索和关键词搜索
  • 🤖 AI 驱动 - 集成 DeepSeek API 和豆包 Embedding 模型
  • 🏢 多租户架构 - 支持组织级别的数据隔离和权限管理
  • 📄 文档处理 - 支持多种格式文档的上传、解析和索引
  • 💬 实时交互 - WebSocket 实现的实时 AI 对话体验
  • 🔐 安全可靠 - Spring Security + JWT 认证机制

✨ 主要功能

功能 描述
📤 文档管理 上传和管理各种类型的文档,支持文件分片上传和断点续传
🔄 自动处理 自动处理和索引文档内容,智能语义分块
💭 自然查询 使用自然语言查询知识库,获取精准答案
🎨 标签组织 支持标签进行组织管理,灵活分类文档
🔒 权限控制 文档可设置为公开或私有,与组织标签关联
👥 多租户 每个组织拥有独立的知识库和文档管理

🛠️ 技术栈

后端技术

技术 版本 用途
Java 17 编程语言
Spring Boot 3.4.2 应用框架
MySQL 8.0 关系型数据库
Spring Data JPA 3.4.2 ORM 框架
Redis 7.0.11 缓存数据库
Elasticsearch 8.10.0 搜索引擎
Apache Kafka 3.2.1 消息队列
MinIO 8.5.12 文件存储
Apache Tika 2.9.1 文档解析
Spring Security 6.2.1 安全框架
JWT 0.12.3 令牌认证
WebSocket 2.0.0 实时通信
Maven 3.8.6+ 依赖管理
WebFlux 3.4.2 响应式编程

AI 集成

  • 🤖 DeepSeek API - 大语言模型服务
  • 🧠 豆包 Embedding - 文本向量化模型(text-embedding-v4)
  • 🦙 本地 Ollama - 本地 LLM 支持

📁 项目结构

后端目录结构

src/main/java/com/yizhaoqi/smartpai/
├── 📄 SmartPaiApplication.java      # 主应用程序入口
├── 📂 client/                       # 外部 API 客户端(DeepSeek、Embedding)
├── 📂 config/                       # 配置类(Security、JWT、CORS 等)
├── 📂 consumer/                     # Kafka 消费者(异步文件处理)
├── 📂 controller/                   # REST API 端点
│   ├── AuthController.java          # 认证相关接口
│   ├── DocumentController.java      # 文档管理接口
│   └── ChatController.java          # AI 对话接口
├── 📂 entity/                       # JPA 数据实体
├── 📂 exception/                    # 自定义异常处理
├── 📂 handler/                      # WebSocket 处理器
├── 📂 model/                        # 领域模型和 DTO
├── 📂 repository/                   # 数据访问层
├── 📂 service/                      # 业务逻辑层
└── 📂 utils/                        # 工具类和辅助函数

前端技术

技术 版本 用途
Vue 3.5.13 前端框架
TypeScript 5.6.2 类型系统
Vite 5.2.11 构建工具
Naive UI 2.39.0 UI 组件库
Pinia 2.2.4 状态管理
Vue Router 4.4.5 路由管理
UnoCSS 0.61.0 原子化 CSS
SCSS 1.77.8 CSS 预处理器
Iconify 3.1.1 图标库
pnpm 8.7.0+ 包管理器

基础设施

Docker Git GitHub

前端目录结构

frontend/
├── 📂 packages/           # 可重用模块(Monorepo)
├── 📂 public/             # 静态资源
├── 📂 src/                # 主应用程序代码
│   ├── 📂 assets/         # SVG 图标、图片资源
│   ├── 📂 components/     # 可复用 Vue 组件
│   │   ├── common/        # 通用组件
│   │   └── business/      # 业务组件
│   ├── 📂 layouts/        # 页面布局模板
│   ├── 📂 router/         # Vue Router 路由配置
│   ├── 📂 service/        # API 服务集成
│   ├── 📂 store/          # Pinia 状态管理
│   ├── 📂 views/          # 页面级组件
│   ├── 📂 utils/          # 工具函数和辅助方法
│   └── 📂 types/          # TypeScript 类型定义
├── 📄 vite.config.ts      # Vite 构建配置
├── 📄 tsconfig.json       # TypeScript 配置
└── 📄 pnpm-workspace.yaml # Workspace 配置

🎯 核心功能

📚 知识库管理

比特智搜提供了完整的文档上传与解析功能:

  • 📤 文件上传 - 支持文件分片上传和断点续传
  • 🏷️ 标签管理 - 支持标签进行组织管理
  • 🔒 权限控制 - 文档可设置为公开或私有
  • 🏢 组织关联 - 与特定组织标签关联,实现权限分类
  • 📄 多格式支持 - PDF、Word、TXT、Markdown 等多种格式

🤖 AI 驱动的 RAG 实现

比特智搜的核心是 RAG(检索增强生成)技术:

graph LR
    A[上传文档] --> B[语义分块]
    B --> C[生成向量]
    C --> D[Elasticsearch]
    D --> E[用户查询]
    E --> F[检索相关文档]
    F --> G[LLM 生成响应]
    G --> H[返回答案]
Loading

RAG 流程:

  1. 🔄 语义分块 - 将上传的文档进行智能语义分块
  2. 🧠 向量化 - 调用豆包 Embedding 模型生成高维向量
  3. 💾 向量存储 - 将向量存储到 Elasticsearch
  4. 🔍 混合检索 - 支持语义搜索和关键词搜索
  5. 📝 上下文增强 - 为 LLM 提供完整上下文,生成准确响应

🏢 企业级多租户

通过组织标签支持多租户架构:

  • 👥 用户组织 - 用户可创建或加入多个组织
  • 🔐 数据隔离 - 每个组织拥有独立的知识库
  • 🛡️ 权限管理 - 精细化权限控制
  • 📊 组织管理 - 企业可管理多个团队/部门的知识库
  • 🔒 安全隔离 - 无需担心数据混淆或权限问题

💬 实时通信

  • 🔌 WebSocket - 实时双向通信
  • 流式响应 - 支持 LLM 流式输出
  • 🎨 响应式界面 - 现代化聊天体验
  • 🔔 消息通知 - 实时状态更新

🏗️ 架构设计

比特智搜采用现代化云原生架构设计,具有清晰的关注点分离、可扩展的组件和 AI 技术集成。模块化设计允许随着技术的发展灵活扩展和替换单个组件。

分层架构

graph TB
    subgraph "前端层 Frontend"
        A1[Vue 3 应用]
        A2[WebSocket 客户端]
    end

    subgraph "网关层 Gateway"
        B1[REST API]
        B2[WebSocket]
    end

    subgraph "业务层 Business"
        C1[DocumentService]
        C2[ChatService]
        C3[UserService]
    end

    subgraph "数据层 Data"
        D1[MySQL]
        D2[Redis]
        D3[Elasticsearch]
    end

    subgraph "AI层 AI"
        E1[DeepSeek API]
        E2[豆包 Embedding]
    end

    subgraph "基础设施层 Infrastructure"
        F1[Kafka]
        F2[MinIO]
    end

    A1 --> B1
    A2 --> B2
    B1 --> C1
    B1 --> C2
    B1 --> C3
    C1 --> D1
    C1 --> D3
    C2 --> E1
    C2 --> E2
    C1 --> F1
    C1 --> F2
Loading

核心组件

🎮 控制层 (Controller)

处理 HTTP 请求,验证输入,管理请求/响应格式化,将业务逻辑委托给服务层。

@RestController
@RequestMapping("/api/v1/documents")
public class DocumentController {
    @Autowired
    private DocumentService documentService;

    @DeleteMapping("/{fileMd5}")
    public ResponseEntity<?> deleteDocument(
            @PathVariable String fileMd5,
            @RequestAttribute("userId") String userId,
            @RequestAttribute("role") String role) {
        // 参数验证和委托给服务
        documentService.deleteDocument(fileMd5);
        return ResponseEntity.ok().build();
    }
}

💼 服务层 (Service)

处理应用的业务逻辑,具有事务感知能力,协调多个数据源的操作。

@Service
public class DocumentService {
    @Autowired
    private FileUploadRepository fileUploadRepository;

    @Autowired
    private MinioClient minioClient;

    @Autowired
    private ElasticsearchService elasticsearchService;

    @Transactional
    public void deleteDocument(String fileMd5) {
        // 协调多个仓储和系统
        // 文档删除的业务逻辑
    }
}

📊 数据访问层 (Repository)

使用 Spring Data JPA 进行数据库操作,提供对 MySQL 的 CRUD 操作。

@Repository
public interface FileUploadRepository extends JpaRepository<FileUpload, Long> {
    Optional<FileUpload> findByFileMd5(String fileMd5);

    @Query("SELECT f FROM FileUpload f WHERE f.userId = :userId OR f.isPublic = true OR (f.orgTag IN :orgTagList AND f.isPublic = false)")
    List<FileUpload> findAccessibleFilesWithTags(@Param("userId") String userId, @Param("orgTagList") List<String> orgTagList);
}

🗃️ 实体层 (Entity)

映射到数据库表的 JPA 实体,以及用于 API 请求和响应的 DTO。

@Entity
public class FileUpload {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String fileMd5;
    private String fileName;
    private String userId;
    private boolean isPublic;
    private String orgTag;
    // 其他字段和方法
}

🚀 快速开始

环境要求

组件 版本要求
☕ Java 17+
🐘 Maven 3.8.6+
📦 Node.js 18.20.0+
📦 pnpm 8.7.0+
🐬 MySQL 8.0+
🔍 Elasticsearch 8.10.0
📦 MinIO 8.5.12
📨 Kafka 3.2.1
🔴 Redis 7.0.11
🐳 Docker (可选)

使用 Docker Compose 启动

# 克隆项目
git clone https://github.com/yourusername/BitKnowledge.git
cd BitKnowledge

# 启动所有基础设施服务
cd docs && docker-compose up -d

# 等待服务启动完成
# 然后启动后端和前端(见下方说明)

后端启动

# 进入项目根目录
cd BitKnowledge

# 配置 application.yml 中的数据库和服务连接信息

# 启动后端服务
mvn spring-boot:run

# 或使用指定 profile 启动
mvn spring-boot:run -Dspring-boot.run.profiles=dev

后端服务将运行在 http://localhost:8080

前端启动

# 进入前端项目目录
cd frontend

# 安装依赖
pnpm install

# 启动开发服务器
pnpm dev

# 构建生产版本
pnpm build

# 类型检查
pnpm typecheck

# 代码检查
pnpm lint

前端应用将运行在 http://localhost:5173


📖 使用指南

1. 注册和登录

访问前端应用,注册新账户或使用现有账户登录。

2. 创建组织标签

登录后,创建或加入组织标签以开始管理知识库。

3. 上传文档

上传 PDF、Word、TXT 等格式的文档到知识库,系统将自动处理和索引。

4. 开始对话

使用自然语言向 AI 提问,系统将基于您的文档提供准确答案。


🔧 配置说明

后端配置文件

主要配置文件位于 src/main/resources/application.yml

# 数据库配置
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/bitknowledge
    username: root
    password: your_password

  # Redis 配置
  redis:
    host: localhost
    port: 6379

  # Kafka 配置
  kafka:
    bootstrap-servers: localhost:9092

# AI 服务配置
ai:
  deepseek:
    api-key: your_deepseek_api_key
  embedding:
    api-key: your_embedding_api_key

# Elasticsearch 配置
elasticsearch:
  uris: http://localhost:9200

前端配置文件

前端配置位于 frontend/src/service/config.ts,需要配置后端 API 地址。


📊 系统架构图

graph LR
    subgraph "用户界面"
        A[Web 浏览器]
    end

    subgraph "前端应用"
        B[Vue 3 + TypeScript]
    end

    subgraph "后端服务"
        C[Spring Boot 应用]
        D[WebSocket 处理器]
    end

    subgraph "数据存储"
        E[(MySQL)]
        F[(Redis)]
        G[(Elasticsearch)]
    end

    subgraph "文件存储"
        H[MinIO]
    end

    subgraph "消息队列"
        I[Kafka]
    end

    subgraph "AI 服务"
        J[DeepSeek API]
        K[豆包 Embedding]
    end

    A --> B
    B --> C
    B <--> D
    C --> E
    C --> F
    C --> G
    C --> H
    C <--> I
    C --> J
    C --> K
Loading

🤝 贡献指南

欢迎贡献代码!请遵循以下步骤:

  1. Fork 本仓库
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 提交 Pull Request

开发规范

  • 后端遵循阿里巴巴 Java 开发手册
  • 前端遵循 Vue 3 风格指南
  • 提交前运行 mvn testpnpm typecheck
  • 保持代码风格一致

📝 许可证

本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。


如果觉得这个项目有帮助,请给一个 ⭐️ Star!

Made with ❤️ by Maruiful

About

AI 知识库管理系统 | 基于 RAG 技术的智能文档处理平台

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors