Spring AI Alibaba中使用Redis Vector报错修改过程

Spring AI alibaba使用Redis Vector报错修改过程

spring-AI集成向量数据库redis使用实现RAG_让springai实现rag-CSDN博客

Spring AI 1.0 正式 GA

docs.spring.io/spring-ai/r...

阅读官网示例代码

这里可以看spring ai alibaba的官网提供的示例使用源码,我是在官网示例代码基础上改的,pom文件看他的依赖

github.com/spring-ai-a...

这里要用RedisStack,不能用之前用的Redis,会报错,也不需要RedisConfig(大概是自动装配了,不太清楚)RedisStack 是redis 的增强版

这个是用虚拟机配置的docker-compose.yml,因为我想快速测试,就没用服务器的了,也没密码,服务器上的最好设置密码,端口和原来的redis冲突了,改成6380了

xml 复制代码
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-starter-vector-store-redis</artifactId>
</dependency>

这里自动注入,不需要用RedisVectorStore这个类

上面可以运行成功的

应用到项目里报错

Spring 容器中没有 VectorStore 类型的 Bean

在自己项目里面用报错,Spring 容器中没有 VectorStore 类型的 Bean

markdown 复制代码
***************************
APPLICATION FAILED TO START
***************************

Description:

Field vectorStore in com.acecomp.ai.service.impl.DocumentProcessServiceImpl required a bean of type 'org.springframework.ai.vectorstore.VectorStore' that could not be found.

The injection point has the following annotations:
	- @org.springframework.beans.factory.annotation.Autowired(required=true)


Action:

Consider defining a bean of type 'org.springframework.ai.vectorstore.VectorStore' in your configuration.

已与地址为 ''127.0.0.1:63705',传输: '套接字'' 的目标虚拟机断开连接

这里上面的文章说是因为我项目里面引入了spring-boot-starter-data-redis, 会导致无法自动注入,但是没办法项目是基于这个写的,再改配置怕出问题

spring ai 会自动配置redis,现在Vector无法注入,需要现在手动配置 但是我Redis数据库连接池在 yml 里是用lettuce,这里用Jedis,真是神奇,能跑成功

依赖版本冲突导致的 `NoSuchFieldError: batchingStrategy

又报错,依赖版本冲突 导致的 NoSuchFieldError: batchingStrategy, 版本M5+Jedis自配置后出现这个情况

ini 复制代码
    22:39:52.946 [http-nio-8080-exec-1] INFO  o.a.c.c.C.[.[.[/] - [log,168] - Initializing Spring DispatcherServlet 'dispatcherServlet'
22:39:53.076 [http-nio-8080-exec-1] INFO  c.a.a.s.i.FileServiceImpl - [extractFromMultipartFile,56] - 开始提取文本,文件: AI智赛通测试文档.docx, 大小: 0.01681041717529297MB, 类型: application/octet-stream
22:39:53.192 [http-nio-8080-exec-1] INFO  c.a.a.s.i.FileServiceImpl - [detectFileType,104] - 文件类型检测 - 文件名: AI智赛通测试文档.docx, 声明类型: application/octet-stream, 检测类型: application/vnd.openxmlformats-officedocument.wordprocessingml.document
22:39:55.015 [http-nio-8080-exec-1] ERROR c.a.f.w.e.GlobalExceptionHandler - [handleException,111] - 请求地址'/ai/doc/upload/vector',发生系统异常.
jakarta.servlet.ServletException: Handler dispatch failed: java.lang.NoSuchFieldError: batchingStrategy
22:39:55.055 [http-nio-8080-exec-1] WARN  o.s.w.s.m.m.a.ExceptionHandlerExceptionResolver - [logException,254] - Resolved [jakarta.servlet.ServletException: Handler dispatch failed: java.lang.NoSuchFieldError: batchingStrategy]

关键修改步骤

  • spring ai alibaba和spring ai 的版本兼容
    • spring ai alibaba 改成1.0.0.3
    • spring ai为1.0.0
    • AI聊天改成兼容的写法

spring ai alibaba依赖导入不再导入spring-ai-alibaba-starter

xml 复制代码
<dependency>
    <groupId>com.alibaba.cloud.ai</groupId>
    <artifactId>spring-ai-alibaba-starter</artifactId>
    <version>1.0.0-M5.1</version>
<dependency>

我的项目有父工程和子工程,下面是正确的导入

spring boot是3.5.4,这里用bom

xml 复制代码
<properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>17</java.version>
        <lombok.version>1.18.30</lombok.version>
        <!-- Spring AI -->
        <spring-ai.version>1.0.0</spring-ai.version>
        <!-- Spring AI Alibaba -->
        <spring-ai-alibaba.version>1.0.0.3</spring-ai-alibaba.version>
    </properties>
<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.ai</groupId>
                <artifactId>spring-ai-bom</artifactId>
                <version>${spring-ai.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud.ai</groupId>
                <artifactId>spring-ai-alibaba-bom</artifactId>
                <version>${spring-ai-alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>

注意这里spring-ai-alibaba工件用dashcope,spring-ai-advisors-vector-store这个是AI对话记忆要用的包

xml 复制代码
<dependency>
    <groupId>com.alibaba.cloud.ai</groupId>
    <artifactId>spring-ai-alibaba-starter-dashscope</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-advisors-vector-store</artifactId>
</dependency>

之后根据版本改AI的写法

这里可以参考官网的example的例子,github.com/spring-ai-a...

scss 复制代码
Flux<String> text = chatClient.prompt()
                .user(inputMsg)
                .advisors(MessageChatMemoryAdvisor.builder(chatMemory).build())
                .advisors(a -> a
                        .param(CONVERSATION_ID, conversationId)
                        .param(TOP_K, CHAT_HISTORY_SIZE)
                )
                .stream()
                .content();

成功了!!!!

相关推荐
Victor35621 小时前
https://editor.csdn.net/md/?articleId=139321571&spm=1011.2415.3001.9698
后端
Victor35621 小时前
Hibernate(89)如何在压力测试中使用Hibernate?
后端
灰子学技术1 天前
go response.Body.close()导致连接异常处理
开发语言·后端·golang
Gogo8161 天前
BigInt 与 Number 的爱恨情仇,为何大佬都劝你“能用 Number 就别用 BigInt”?
后端
fuquxiaoguang1 天前
深入浅出:使用MDC构建SpringBoot全链路请求追踪系统
java·spring boot·后端·调用链分析
毕设源码_廖学姐1 天前
计算机毕业设计springboot招聘系统网站 基于SpringBoot的在线人才对接平台 SpringBoot驱动的智能求职与招聘服务网
spring boot·后端·课程设计
野犬寒鸦1 天前
从零起步学习并发编程 || 第六章:ReentrantLock与synchronized 的辨析及运用
java·服务器·数据库·后端·学习·算法
逍遥德1 天前
如何学编程之01.理论篇.如何通过阅读代码来提高自己的编程能力?
前端·后端·程序人生·重构·软件构建·代码规范
MX_93591 天前
Spring的bean工厂后处理器和Bean后处理器
java·后端·spring
程序员泠零澪回家种桔子1 天前
Spring AI框架全方位详解
java·人工智能·后端·spring·ai·架构