SpringAI基于内存存储向量

一、环境信息

1、参看如下:

SpringAI入门学习

二、测试使用

1、创建SimpleVectorStore

java 复制代码
public interface VectorStore extends DocumentWriter {
    default String getName() {
        return this.getClass().getSimpleName();
    }

    void add(List<Document> documents);

    default void accept(List<Document> documents) {
        this.add(documents);
    }

    void delete(List<String> idList);

    void delete(Filter.Expression filterExpression);

    default void delete(String filterExpression) {
        SearchRequest searchRequest = SearchRequest.builder().filterExpression(filterExpression).build();
        Filter.Expression textExpression = searchRequest.getFilterExpression();
        Assert.notNull(textExpression, "Filter expression must not be null");
        this.delete(textExpression);
    }

    @Nullable
    List<Document> similaritySearch(SearchRequest request);

    @Nullable
    default List<Document> similaritySearch(String query) {
        return this.similaritySearch(SearchRequest.builder().query(query).build());
    }

    default <T> Optional<T> getNativeClient() {
        return Optional.empty();
    }

    public interface Builder<T extends Builder<T>> {
        T observationRegistry(ObservationRegistry observationRegistry);

        T customObservationConvention(VectorStoreObservationConvention convention);

        T batchingStrategy(BatchingStrategy batchingStrategy);

        VectorStore build();
    }
}
java 复制代码
    /**
     * 向量模型配置VectorStore
     * @return
     */
    @Bean
    public VectorStore vectorStore(){
        DashScopeEmbeddingModel model = new DashScopeEmbeddingModel(new DashScopeApi(apiKey));
        SimpleVectorStore vectorStore = SimpleVectorStore.builder(model)
                .build();
        return vectorStore;
    }

2、控制器测试

java 复制代码
package org.spring.springaiprojet.controller;

import com.alibaba.cloud.ai.dashscope.api.DashScopeApi;
import com.alibaba.cloud.ai.dashscope.embedding.DashScopeEmbeddingModel;
import org.springframework.ai.document.Document;
import org.springframework.ai.vectorstore.SimpleVectorStore;
import org.springframework.ai.vectorstore.VectorStore;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ClassPathResource;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.List;

@RestController
@RequestMapping("/ai/")
public class AiVectorController {

    @Autowired
    private VectorStore vectorStore;

    @RequestMapping("/qwen/vector/api")
    public String vector() throws IOException {
        StringBuilder text = new StringBuilder();
        ClassLoader classLoader = getClass().getClassLoader();
        InputStream inputStream = classLoader.getResourceAsStream("springai.txt");
        ClassPathResource classPathResource = new ClassPathResource("springai.txt");
        try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))){
            String line;
            while ((line = reader.readLine()) != null){
                text.append(line);
            }
        }
        List<Document> list = Arrays.stream(text.toString().split("。")).map(Document::new).toList();
       // 存储向量,内部会自动向量化
        vectorStore.add(list);
        // 相似性检索,similaritySearch实现
        List<Document> documentList = vectorStore.similaritySearch("文本");
        for(Document document : documentList){
            System.out.println(document.getText());
            System.out.println(document.getScore());
            System.out.println("-----------------");
        }
        return "success";
    }

3、测试文件内容如下:springai.txt

XML 复制代码
SpringAI 是 Spring 官方推出的 AI 应用开发框架,通过提供统一的 API 抽象简化 AI 模型(如大语言模型、嵌入模型)与 Spring 生态的集成,支持多类 AI 服务(OpenAI、Azure OpenAI、Hugging Face 等)和向量存储(Redis、Milvus 等),让开发者聚焦业务逻辑。其核心组件按功能可分为‌数据处理、模型交互、向量存储、工具集成‌等维度,各组件分工明确以支撑 AI 应用开发全流程:

一、数据处理组件
数据是 AI 应用的基石,SpringAI 提供工具帮助开发者处理和准备数据,核心逻辑包括:

‌数据预处理‌:对原始数据进行清洗、格式转换、特征提取等操作,为后续 AI 模型训练或推理提供合规输入。
‌数据存储与管理‌:整合向量存储(如 Redis、Milvus)等技术,实现嵌入向量的存储与相似性检索(核心用于 RAG 场景),确保数据高效存取与检索。
二、模型交互组件
模型交互是 AI 应用的核心环节,SpringAI 通过统一接口屏蔽不同厂商(OpenAI、Anthropic 等)的差异,核心功能包括:

‌模型抽象‌:将大语言模型、嵌入模型等抽象为统一接口,开发者无需关注底层实现细节,直接调用接口即可完成模型调用。
‌提示与响应管理‌:支持提示文本(Prompt Text)和系统消息(System Message)的动态生成与管理,同时处理模型返回的响应(包含生成文本、元数据等),确保交互流程标准化。
三、向量存储组件
向量存储是 RAG(Retrieval Augmented Generation)场景的核心,SpringAI 提供工具支持向量存储的‌存储、检索、管理‌全流程:

‌存储‌:将文本的嵌入向量存储到 Redis、Milvus 等存储系统,为后续检索提供数据基础。
‌检索‌:基于向量相似性算法(如余弦相似度)快速定位与输入文本最相关的向量,支撑 RAG 场景下的知识检索。
‌管理‌:提供向量存储的生命周期管理(如创建、更新、删除),确保存储系统的高效与稳定。
四、工具集成组件
工具集成是 AI 应用扩展能力的关键,SpringAI 支持‌函数调用(Function Calling)‌等机制,核心逻辑包括:

‌工具注册‌:开发者可注册外部工具(如数据库查询、API 调用),让模型根据问题自动调用工具获取信息。
‌调用机制‌:通过统一接口调用注册工具,模型可基于问题自动触发工具执行,实现"AI + 工具"的协同工作流。
五、环境与生态组件
SpringAI 基于 Spring Boot 构建,通过‌Starters 引入依赖‌简化环境搭建,核心优势包括:

‌依赖管理‌:通过 Maven/Gradle 的 Starters 依赖,快速引入 SpringAI 及其生态组件,避免版本兼容性问题。
‌生态整合‌:无缝集成 Spring Boot、Spring Web、Spring Data 等现有 Spring 组件,开发者可复用 Spring 生态的开发经验,快速构建 AI 驱动的应用。
六、其他组件(如评估器 - 优化器)
部分组件(如评估器 - 优化器)聚焦‌模型评估与优化‌,核心逻辑包括:

‌评估‌:对模型生成内容的准确性和相关性进行评估,为优化提供数据依据。
‌优化‌:基于评估结果调整模型参数或流程,持续提升 AI 应用的性能与效果。
SpringAI 的组件设计遵循"简化开发、聚焦业务"的理念,通过各组件的分工协作,帮助开发者高效构建 AI 驱动的应用,同时保障技术栈的稳定性与可扩展性。

4、测试内容如下:

XML 复制代码
GET http://localhost:8088/boot/ai/qwen/vector/api

5、基于SearchRequest实现

java 复制代码
        SearchRequest request= SearchRequest.builder().query("文本")
                .topK(1)
                .similarityThreshold(0.2).build();
相关推荐
算法与双吉汉堡2 小时前
【短链接项目笔记】Day2 用户注册
java·redis·笔记·后端·spring
北漂IT民工_程序员_ZG3 小时前
SpringBean生命周期,动态代理
java·spring boot·spring
老华带你飞3 小时前
建筑材料管理|基于springboot 建筑材料管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·学习·spring
木心爱编程3 小时前
【Qt 5.14.2 新手实战】QTC++入门筑基——按钮与标签联动:QPushButton + QLabel 实现图片切换器
java·c++·qt
椰羊~王小美4 小时前
setScale没传roudingmode,为什么会报错
java
WizLC4 小时前
【JAVA】JVM类加载器知识笔记
java·jvm·笔记
喝汽水的猫^4 小时前
Java实现Excel 导出(多 Sheet、复杂格式)
java·excel
毕设源码-朱学姐4 小时前
【开题答辩全过程】以 基于JavaWeb的疾病查询系统的设计与实现为例,包含答辩的问题和答案
java·eclipse
雨中飘荡的记忆4 小时前
Java面向对象编程详解
java·开发语言