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

成功了!!!!

相关推荐
红尘散仙5 小时前
我把终端小说阅读器接上了 AI Agent:TRNovel 现在能用 skill 生成书源了
人工智能·后端·rust
卷毛的技术笔记6 小时前
告别硬编码!Spring AI Alibaba 实现 AI Agent 智能工具调用(Tool Calling)
java·人工智能·后端·python·spring·ai编程
会编程的土豆6 小时前
Go 语言反射(Reflection)详解
开发语言·后端·golang
喵个咪6 小时前
GoWind Toolkit Go后端代码生成 完整全流程实战
后端·go·orm
basketball6167 小时前
Go 语言从入门到进阶:4. 数组和MAP使用方法总结
开发语言·后端·golang
qq_2518364577 小时前
SpringBoot+Vue 共享电池柜管理系统 完整实现 前后端分离项目实战 完整代码
vue.js·spring boot·后端
zhangxingchao7 小时前
AI 大模型核心六:量化、Workflow 与 Agent、多轮 RAG
前端·人工智能·后端
IT_陈寒8 小时前
Vite打包时遇到的坑,原来问题出在这里
前端·人工智能·后端
ayqy贾杰10 小时前
基层管理的三板斧,在AI时代行不通了
前端·后端·团队管理
Apifox10 小时前
Apifox 5 月更新|Postman 导入优化、Runner 支持非 root 运行、请求代码自动带鉴权
前端·后端·安全