比特智搜(BitKnowledge) 是一个企业级的 AI 知识库管理系统,采用先进的 检索增强生成(RAG) 技术,提供智能文档处理和检索能力。
- 🔍 智能检索 - 基于 Elasticsearch 的语义搜索和关键词搜索
- 🤖 AI 驱动 - 集成 DeepSeek API 和豆包 Embedding 模型
- 🏢 多租户架构 - 支持组织级别的数据隔离和权限管理
- 📄 文档处理 - 支持多种格式文档的上传、解析和索引
- 💬 实时交互 - WebSocket 实现的实时 AI 对话体验
- 🔐 安全可靠 - Spring Security + JWT 认证机制
| 功能 | 描述 |
|---|---|
| 📤 文档管理 | 上传和管理各种类型的文档,支持文件分片上传和断点续传 |
| 🔄 自动处理 | 自动处理和索引文档内容,智能语义分块 |
| 💭 自然查询 | 使用自然语言查询知识库,获取精准答案 |
| 🎨 标签组织 | 支持标签进行组织管理,灵活分类文档 |
| 🔒 权限控制 | 文档可设置为公开或私有,与组织标签关联 |
| 👥 多租户 | 每个组织拥有独立的知识库和文档管理 |
| 技术 | 版本 | 用途 |
|---|---|---|
| 17 | 编程语言 | |
| 3.4.2 | 应用框架 | |
| 8.0 | 关系型数据库 | |
| 3.4.2 | ORM 框架 | |
| 7.0.11 | 缓存数据库 | |
| 8.10.0 | 搜索引擎 | |
| 3.2.1 | 消息队列 | |
| 8.5.12 | 文件存储 | |
| 2.9.1 | 文档解析 | |
| 6.2.1 | 安全框架 | |
| 0.12.3 | 令牌认证 | |
| 2.0.0 | 实时通信 | |
| 3.8.6+ | 依赖管理 | |
| 3.4.2 | 响应式编程 |
- 🤖 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/ # 工具类和辅助函数| 技术 | 版本 | 用途 |
|---|---|---|
| 3.5.13 | 前端框架 | |
| 5.6.2 | 类型系统 | |
| 5.2.11 | 构建工具 | |
| 2.39.0 | UI 组件库 | |
| 2.2.4 | 状态管理 | |
| 4.4.5 | 路由管理 | |
| 0.61.0 | 原子化 CSS | |
| 1.77.8 | CSS 预处理器 | |
| 3.1.1 | 图标库 | |
| 8.7.0+ | 包管理器 |
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 等多种格式
比特智搜的核心是 RAG(检索增强生成)技术:
graph LR
A[上传文档] --> B[语义分块]
B --> C[生成向量]
C --> D[Elasticsearch]
D --> E[用户查询]
E --> F[检索相关文档]
F --> G[LLM 生成响应]
G --> H[返回答案]
RAG 流程:
- 🔄 语义分块 - 将上传的文档进行智能语义分块
- 🧠 向量化 - 调用豆包 Embedding 模型生成高维向量
- 💾 向量存储 - 将向量存储到 Elasticsearch
- 🔍 混合检索 - 支持语义搜索和关键词搜索
- 📝 上下文增强 - 为 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
处理 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
public class DocumentService {
@Autowired
private FileUploadRepository fileUploadRepository;
@Autowired
private MinioClient minioClient;
@Autowired
private ElasticsearchService elasticsearchService;
@Transactional
public void deleteDocument(String fileMd5) {
// 协调多个仓储和系统
// 文档删除的业务逻辑
}
}使用 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);
}映射到数据库表的 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 | (可选) |
# 克隆项目
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
访问前端应用,注册新账户或使用现有账户登录。
登录后,创建或加入组织标签以开始管理知识库。
上传 PDF、Word、TXT 等格式的文档到知识库,系统将自动处理和索引。
使用自然语言向 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
欢迎贡献代码!请遵循以下步骤:
- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 提交 Pull Request
- 后端遵循阿里巴巴 Java 开发手册
- 前端遵循 Vue 3 风格指南
- 提交前运行
mvn test和pnpm typecheck - 保持代码风格一致
本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。
如果觉得这个项目有帮助,请给一个 ⭐️ Star!
Made with ❤️ by Maruiful