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();

成功了!!!!

相关推荐
用户4099322502129 小时前
只给表子集建索引?用函数结果建索引?PostgreSQL这俩操作凭啥能省空间又加速?
后端·ai编程·trae
oak隔壁找我9 小时前
SpringMVC 教程
后端
oak隔壁找我9 小时前
MyBatis和SpringBoot集成的原理详解
后端
oak隔壁找我9 小时前
SpringBoot @Import 注解详解
后端
oak隔壁找我9 小时前
Spring Bean 生命周期详解
后端
Tony Bai9 小时前
【Go 网络编程全解】06 UDP 数据报编程:速度、不可靠与应用层弥补
开发语言·网络·后端·golang·udp
半夏知半秋9 小时前
lua对象池管理工具剖析
服务器·开发语言·后端·学习·lua
卷福同学9 小时前
【AI绘画】你有多久没有打开SD了?
后端·aigc·ai编程
Moniane9 小时前
时序数据库全面重构指南
java·后端·struts