需求:
1:可以自定义管理大模型,可自行选择ollama,openai,千问等大模型
2:自定义向量数据库,支持pgvector,elasticsearch,milvus(这三个目前比较常用,且支持过滤元数据)
3:自定义管理知识库,知识库中可以支持创建文档,文档切片,修改切片,向量搜索等功能
4:系统可以根据不同的知识库检索用户需要的内容
表设计:
用户表:
CREATE TABLE `rag_user` (
`id` bigint NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL COMMENT '用户名 ',
`password` varchar(255) NOT NULL COMMENT '用户密码',
`phone` varchar(15) NOT NULL COMMENT '用户手机号',
`cover` varchar(255) NOT NULL COMMENT '用户头像',
`status` tinyint NOT NULL COMMENT '用户状态0:不可用 1:可用',
`ctime` datetime DEFAULT NULL,
`utime` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
`delete_flag` tinyint DEFAULT NULL,
`cby` tinyint DEFAULT NULL,
`uby` tinyint DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
模型表:
CREATE TABLE `rag_model` (
`id` bigint NOT NULL AUTO_INCREMENT,
`code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '唯一键(用于唯一确定bean)',
`model_name` varchar(255) NOT NULL COMMENT '模型名',
`type` varchar(10) NOT NULL COMMENT '类型(MODEL:模型 EMBEDDING:向量)',
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '名称',
`supplier` varchar(10) NOT NULL COMMENT '模型厂商 OLLAMA:ollama QWEN:千问 OPENAI:openAi',
`response_length` int DEFAULT NULL COMMENT '响应结果长度',
`temperature` double DEFAULT NULL COMMENT '温度',
`top` double DEFAULT NULL COMMENT '匹配数',
`api_key` varchar(255) DEFAULT NULL COMMENT '模型的key(ollama不需要)',
`secret_key` varchar(255) DEFAULT NULL COMMENT '模型secret',
`url` varchar(255) DEFAULT NULL COMMENT '模型url',
`dimensions` int DEFAULT NULL COMMENT '向量模型维度数',
`ctime` datetime DEFAULT NULL,
`utime` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
`delete_flag` tinyint DEFAULT NULL COMMENT '是否删除 0:否 1:是',
`cby` bigint DEFAULT NULL COMMENT '创建人',
`uby` bigint DEFAULT NULL COMMENT '创建人',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
向量库表:
CREATE TABLE `rag_embedding_store` (
`id` bigint NOT NULL AUTO_INCREMENT,
`code` varchar(255) NOT NULL COMMENT '用于唯一确定bean',
`name` varchar(255) NOT NULL COMMENT '向量数据库名称',
`supplier` varchar(10) NOT NULL COMMENT '向量数据库类型(PG:pgvector , MILVUS:Milvus ES:Elasticsearch)',
`port` int NOT NULL COMMENT '端口号',
`host` varchar(255) NOT NULL COMMENT '数据库ip',
`user_name` varchar(255) NOT NULL COMMENT '用户名',
`password` varchar(255) NOT NULL COMMENT '密码',
`database` varchar(255) NOT NULL COMMENT '数据库名',
`table_name` varchar(255) NOT NULL COMMENT '表名',
`dimensions` int DEFAULT NULL COMMENT '向量维度',
`ctime` datetime DEFAULT NULL,
`utime` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
`delete_flag` tinyint DEFAULT NULL,
`cby` bigint DEFAULT NULL,
`uby` bigint DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
知识库表:
CREATE TABLE `rag_knowledge` (
`id` bigint NOT NULL AUTO_INCREMENT,
`code` varchar(255) NOT NULL,
`embedding_store_id` bigint NOT NULL COMMENT '向量数据库id',
`embedding_model_id` bigint NOT NULL COMMENT '向量模型id',
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '知识库名称',
`descr` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '知识库描述',
`ctime` datetime DEFAULT NULL,
`utime` datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP,
`delete_flag` tinyint NOT NULL,
`cby` bigint DEFAULT NULL,
`uby` bigint DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
文档表:
CREATE TABLE `rag_doc` (
`id` bigint NOT NULL AUTO_INCREMENT,
`code` varchar(255) NOT NULL,
`knowledge_id` bigint NOT NULL COMMENT '知识库id',
`name` varchar(255) NOT NULL COMMENT '文档名称',
`path` varchar(255) NOT NULL COMMENT '文档路径',
`url` varchar(255) NOT NULL COMMENT '文档url',
`source` tinyint NOT NULL COMMENT '0:本地上传 1:网页',
`size` int NOT NULL COMMENT '文档大小',
`slice_num` int DEFAULT NULL COMMENT '切片数',
`slice_status` tinyint DEFAULT NULL COMMENT '切片状态(0:未处理 , 1:已处理)',
`ctime` datetime DEFAULT NULL,
`utime` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
`delete_flag` tinyint DEFAULT NULL,
`cby` tinyint DEFAULT NULL,
`uby` tinyint DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
会话表:
CREATE TABLE `rag_message` (
`id` bigint NOT NULL AUTO_INCREMENT,
`user_id` bigint NOT NULL,
`chat_id` bigint NOT NULL COMMENT '聊天id(每个会话一个id)',
`user_name` varchar(255) NOT NULL COMMENT '用户名',
`message` varchar(1000) DEFAULT NULL COMMENT '会话内容',
`knowledge_id` bigint DEFAULT NULL COMMENT '知识库id',
`model_id` bigint DEFAULT NULL COMMENT '模型id',
`tokens` int DEFAULT NULL COMMENT '消耗的token数',
`promote_tokens` int DEFAULT NULL COMMENT '请求token数',
`ctime` datetime DEFAULT NULL,
`utime` datetime DEFAULT NULL,
`delete_flag` tinyint DEFAULT NULL,
`cby` tinyint DEFAULT NULL,
`uby` tinyint DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
基础框架搭建:
pom依赖:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.