大模型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);
    }
}
相关推荐
程序员二叉2 分钟前
【Java】集合面试全套精讲|HashMap/ArrayList高频考点完整版
java·面试·哈希算法
cfm_291424 分钟前
JVM GC垃圾回收初步了解
java·开发语言·jvm
心之伊始34 分钟前
LangChain4j RAG 实战:Java 后端如何把本地文档接入 Embedding 检索链路
java·架构·源码分析·csdn
许彰午1 小时前
17_synchronized关键字深度解析
java·开发语言
闪电悠米2 小时前
黑马点评-Redis 消息队列-03_stream_consumer_group
开发语言·数据库·redis·分布式·缓存·junit·lua
DIY源码阁2 小时前
JavaSwing航班订票管理系统 - MySQL版
数据库·mysql
Xzh04232 小时前
AI Agent 学习路线(Java 后端方向)
java·人工智能·学习
艾利克斯冰3 小时前
Java 设计模式-行为型模式(更新中)
java·开发语言·设计模式
倒霉蛋小马3 小时前
Java新特性:record关键字
java·开发语言
浪客灿心4 小时前
项目篇:模块设计与实现
数据库·c++