大模型springai,Rag,redis-stack向量数据库存储

1.利用docker搭建redis-stack

bash 复制代码
docker pull redis-stack :latest

2.运行

bash 复制代码
docker run -d \
  --name redis-stack \
  -p 6379:6379 \  # Redis服务端口(默认)
  -p 8001:8001 \  # RedisInsight可视化工具端口(可选)
  -v /root/redis-stack/data:/data \  # 挂载数据目录(持久化数据)
  -v /root/redis-stack/config/redis.config:/etc/redis-stack/redis.conf \  # 挂载自定义配置
  --restart always \  # 容器开机自启
  redis/redis-stack:latest  # 使用最新版redis-stack镜像

3.引入依赖

XML 复制代码
<!--向量库redis-->
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-advisors-vector-store</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-starter-vector-store-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-starter-model-transformers</artifactId>
        </dependency>

        <!--解析文档-->
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-tika-document-reader</artifactId>
        </dependency>

启动时会从github上拉取这个文件,直接下载到本地,就不用拉取了

https://github.com/spring-projects/spring-ai/raw/main/models/spring-ai-transformers/src/main/resources/onnx/all-MiniLM-L6-v2/model.onnx

前缀为spring:

ai:

填写存储的配置

配置redis连接。。。。。

4.自定义文档解析器,自定义如何解析文档

java 复制代码
public class CustomTextSplitter extends TextSplitter {

    @Override
    protected List<String> splitText(String text) {
        // 自定义文本分割逻辑
        return List.of(split(text));
    }

    public String[] split(String text) {
        return text.split("\\s*\\R\\s*\\R\\s*");
    }
}

5.controller仅为参考

java 复制代码
@RestController
@RequestMapping("rag")
@RequiredArgsConstructor
public class RagController {
    private final ChatService chatService;
    private final RagService ragService;


      @PostMapping("uploadRagDoc")
      public MikasResult doChat(@RequestParam("file")MultipartFile file){
          String fileName=file.getOriginalFilename();
          ragService.loadText(file.getResource(),fileName);
          return MikasResult.ok();
      }




}

6.service

resource是springai提供的一个读取文件的内容的

文本读取器TextReader读取划分为Documents对象

采用自定义的文本分割器按自己定义的划分流程来划分文档

redisVectorStore来存入数据库

java 复制代码
@Service
@RequiredArgsConstructor
public class RagServiceImpl implements RagService {
    private final RedisVectorStore redisVectorStore;
    @Override
    public void loadText(Resource resource, String fileName) {
        //加载读取文档转换为Document对象
        TextReader textReader = new TextReader(resource);
        textReader.getCustomMetadata().put("fileName",fileName);
        List<Document> documents = textReader.get();

        //默认的文本分割器
       /* TokenTextSplitter tokenTextSplitter = new TokenTextSplitter();
        List<Document> apply = tokenTextSplitter.apply(documents);*/

        //自定义文本分割器
        CustomTextSplitter customTextSplitter = new CustomTextSplitter();
        List<Document> apply = customTextSplitter.apply(documents);

        //向量存储
        redisVectorStore.add(apply);
    }
}
相关推荐
北北~Simple10 小时前
接口调不通的情况
java
talenteddriver10 小时前
mysql: MySQL索引基础概念
数据库·mysql
king_harry10 小时前
PostgreSQL WAL 原理剖析、日志堆积治理与流复制监控
数据库·postgresql·wal·流复制
默默前行的虫虫10 小时前
nicegui网页多用户数据隔离总结
数据库·sql
Kiyra10 小时前
八股篇(1):LocalThread、CAS和AQS
java·开发语言·spring boot·后端·中间件·性能优化·rocketmq
开心比对错重要10 小时前
进程、线程、虚拟线程详解及线程个数设置
java·jvm·算法·面试
被风吹过的会不会要逝去10 小时前
Java后端开发性能优化排查思路及工具
java·性能优化
程序员阿鹏10 小时前
分布式事务管理
java·开发语言·分布式
爱学大树锯10 小时前
【594 · 字符串查找 II】
java·开发语言·算法
zhixingheyi_tian10 小时前
Yarn 之 run job
java·开发语言·前端