基于ollama,langchain,springboot从零搭建知识库四【设计通用rag系统】

需求:

        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.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

麦田小猪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值