大模型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);
    }
}
相关推荐
这个DBA有点耶8 小时前
NULL不是空——数据库里最反直觉的设计,90%新人踩过的坑
数据库·mysql·代码规范
karry_k8 小时前
MyBatis批量insert-select踩坑:useGeneratedKeys=true 可能让PostgreSQL返回大量插入结果
java·后端
karry_k9 小时前
PostgreSQL 在 MyBatis 中执行正常 SQL 失效:一次 DELETE USING 踩坑记录
java·后端
这个DBA有点耶10 小时前
AI写的SQL跑崩了生产库,这锅谁背?
数据库·人工智能·程序员
镜舟科技11 小时前
Databricks 再提 LTAP,AI 时代的数据底座为何重回大一统叙事?
数据库·架构·agent
Databend12 小时前
从湖仓升级为 Agent 时代的数据控制面,Snowflake 和 Databricks 有哪些布局
大数据·数据库·agent
SamDeepThinking12 小时前
从源码到代码:MyBatis-Flex 与 MyBatis-Plus 的逐项对比
java·后端·程序员
ClouGence15 小时前
SQL Server CDC 能放到 Always On 备库读吗?一文讲透原理与实践
数据库·sql server
她的男孩15 小时前
Spring Boot 接 Flowable 工作流:用 3 个注解搭一个请假审批流程
java·后端·架构
荣码17 小时前
LLM结构化输出:让AI返回JSON而不是废话,我踩了4个坑
java·python