一个基于 RAG(Retrieval-Augmented Generation)技术的智能问答系统,支持文档上传、向量检索、角色权限管理和多轮对话。
- 智能问答:基于向量检索和 LLM 的精准回答
- 文档管理:支持 PDF、Word、TXT、Markdown 等格式上传
- 角色权限:基于角色的文档访问控制
- 会话管理:支持多轮对话和历史记录
- 向量存储:使用 Qdrant 高性能向量数据库
- 响应式 UI:基于 Element Plus 的现代化界面
| 技术 | 版本 | 说明 |
|---|---|---|
| Spring Boot | 3.5.14 | 应用框架 |
| Spring AI | 1.1.4 | AI 开发框架 |
| MyBatis-Plus | 3.5.15 | ORM 框架 |
| MySQL | 8.0 | 关系型数据库 |
| Redis | 7.x | 缓存数据库 |
| Qdrant | 1.x | 向量数据库 |
| Sa-Token | 1.45.0 | 认证授权框架 |
| OpenAI API | - | 大语言模型接口 |
| 技术 | 版本 | 说明 |
|---|---|---|
| Vue.js | 3.5.33 | 前端框架 |
| Element Plus | 2.13.7 | UI 组件库 |
| Pinia | 3.0.4 | 状态管理 |
| Vue Router | 5.0.6 | 路由管理 |
| Axios | 1.15.2 | HTTP 客户端 |
| Vite | 8.0.10 | 构建工具 |
- JDK: 17 或更高版本
- Node.js: 20.19.0 或 >= 22.12.0
- MySQL: 8.0 或更高版本
- Redis: 6.0 或更高版本
- Qdrant: 1.0 或更高版本
git clone https://github.com/arkzoe/rag-service.git
cd rag-service-- 创建数据库
CREATE DATABASE rag_system CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 执行初始化脚本
-- 位于 backend/src/main/resources/db/create.sql编辑 backend/src/main/resources/application.yaml:
spring:
datasource:
url: jdbc:mysql://localhost:3306/rag_system?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
username: your_username
password: your_password
data:
redis:
host: localhost
port: 6379
password: your_redis_password
ai:
openai:
api-key: your_openai_api_key
base-url: https://api.openai.com/v1 # 或代理地址cd backend
./mvnw spring-boot:run
# 或使用 Maven
mvn spring-boot:run后端服务默认运行在 http://localhost:8080
cd front
pnpm install
# 或 npm install编辑 front/vite.config.js:
server: {
proxy: {
'/api': {
target: 'http://localhost:8080',
changeOrigin: true,
},
},
}pnpm dev
# 或 npm run dev前端开发服务器默认运行在 http://localhost:5173
打开浏览器访问 http://localhost:5173
默认登录账号:
- 用户名:
admin - 密码:
123456
rag-system/
├── backend/ # 后端项目
│ ├── src/main/java/
│ │ └── com/rag/backend/
│ │ ├── common/ # 公共组件
│ │ │ ├── config/ # 配置类
│ │ │ ├── constant/ # 常量定义
│ │ │ ├── exception/ # 异常处理
│ │ │ ├── result/ # 统一响应
│ │ │ └── util/ # 工具类
│ │ ├── controller/ # 控制器层
│ │ ├── dto/ # 数据传输对象
│ │ ├── entity/ # 实体类
│ │ ├── infrastructure/ # 基础设施
│ │ ├── mapper/ # 数据访问层
│ │ └── service/ # 业务逻辑层
│ └── src/main/resources/
│ ├── db/ # 数据库脚本
│ └── mapper/ # MyBatis XML
├── front/ # 前端项目
│ ├── src/
│ │ ├── api/ # API 接口
│ │ ├── components/ # 公共组件
│ │ ├── router/ # 路由配置
│ │ ├── stores/ # Pinia 状态管理
│ │ ├── utils/ # 工具函数
│ │ └── views/ # 页面视图
│ └── public/ # 静态资源
├── docs/ # 项目文档
│ ├── frontend-api.md # 前端 API 文档
│ └── backend-api.md # 后端 API 文档
└── README.md # 项目说明
- 用户提问:用户输入问题
- 向量检索:系统从 Qdrant 检索相关文档片段(Top-K=20)
- 权限过滤:根据用户角色过滤文档
- 上下文构建:将相关文档拼接为上下文
- LLM 生成:调用大语言模型生成回答
- 历史保存:异步保存问答记录到 MySQL
- 文档上传时可指定可访问角色
- 用户只能检索到其角色有权访问的文档
- 支持多角色匹配
- 支持创建多个对话会话
- 每个会话独立维护聊天记录
- 支持会话的增删改查
# 数据库配置
spring:
datasource:
url: jdbc:mysql://localhost:3306/rag_system
username: root
password: password
# Redis 配置
data:
redis:
host: localhost
port: 6379
# AI 模型配置
ai:
openai:
api-key: sk-xxx
base-url: https://api.openai.com/v1
chat:
options:
model: gpt-4
temperature: 0.7
# 向量数据库配置
vectorstore:
qdrant:
host: localhost
port: 6334
collection-name: rag_collection
# 文件上传配置
servlet:
multipart:
max-file-size: 50MB
max-request-size: 100MB
# Sa-Token 配置
sa-token:
token-name: rag-token
timeout: 2592000cd front
pnpm build构建产物位于 front/dist/ 目录
cd backend
./mvnw clean package -DskipTests构建产物位于 backend/target/backend-0.0.1-SNAPSHOT.jar
# 使用 Docker Compose(推荐)
docker-compose up -d
# 或手动启动
java -jar backend/target/backend-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod项目提供 docker-compose.yml 用于快速部署:
version: '3.8'
services:
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: rag_system
redis:
image: redis:7-alpine
qdrant:
image: qdrant/qdrant:latest
backend:
build: ./backend
ports:
- "8080:8080"
depends_on:
- mysql
- redis
- qdrant
frontend:
build: ./front
ports:
- "80:80"
depends_on:
- backend欢迎提交 Issue 和 Pull Request!
- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 创建 Pull Request
- 后端遵循阿里巴巴 Java 开发手册
- 前端使用 Prettier 进行代码格式化
- 提交前请运行测试
A: 默认限制为 50MB,可在 application.yaml 中修改:
spring:
servlet:
multipart:
max-file-size: 100MBA: 修改 application.yaml 中的模型配置:
spring:
ai:
openai:
chat:
options:
model: gpt-3.5-turbo # 或其他支持的模型A: 可以尝试:
- 调整
topK参数(默认 20) - 优化文档分块策略
- 调整 Embedding 模型
- 检查文档质量
A:
- 在数据库
sys_role表添加角色 - 为用户分配角色
- 上传文档时指定允许访问的角色
A: 检查:
- 后端服务是否正常运行
- 前端代理配置是否正确
- 防火墙是否放行端口
- 跨域配置是否正确
- 初始版本发布
- 支持基础 RAG 问答
- 支持文档上传和管理
- 支持会话管理
- 支持角色权限控制
本项目基于 MIT 许可证开源。
如有问题或建议,欢迎通过以下方式联系:
- 提交 Issue
感谢使用 RAG 智能问答系统!