大模型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);
    }
}
相关推荐
爱学习的阿磊6 小时前
使用Fabric自动化你的部署流程
jvm·数据库·python
摇滚侠6 小时前
阿里云安装的 Redis 在什么位置,如何找到 Redis 的安装位置
redis·阿里云·云计算
枷锁—sha6 小时前
【SRC】SQL注入快速判定与应对策略(一)
网络·数据库·sql·安全·网络安全·系统安全
Maynor9966 小时前
OpenClaw 玩家必备:用 AI 自动追踪社区最新动态
java·服务器·人工智能
堕2746 小时前
java数据结构当中的《排序》(一 )
java·数据结构·排序算法
惜分飞6 小时前
ORA-600 kcratr_nab_less_than_odr和ORA-600 4193故障处理--惜分飞
数据库·oracle
chian-ocean6 小时前
CANN 生态进阶:利用 `profiling-tools` 优化模型性能
数据库·mysql
m0_550024637 小时前
持续集成/持续部署(CI/CD) for Python
jvm·数据库·python
AC赳赳老秦7 小时前
代码生成超越 GPT-4:DeepSeek-V4 编程任务实战与 2026 开发者效率提升指南
数据库·数据仓库·人工智能·科技·rabbitmq·memcache·deepseek
亓才孓7 小时前
[Class的应用]获取类的信息
java·开发语言