spring Ai---向量知识库(一)

在一些垂直领域以及公司内部信息相关或者实时性相关的大模型应用,就无法直接使用chatGPT。

这个时候,向量知识库就进入了。

通过坐标向量最接近的即为匹配相关答案。

向量模型定义:将文档向量化,保证内容越相似的文本,在向量空间中距离越近;

第一步:引入依赖

java 复制代码
    <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-starter-model-openai</artifactId>
        </dependency>

测试输入一段文本,被存储在里面的坐标

java 复制代码
 float[] textFlot = openAiEmbeddingModel.embed("我是中国人");
        System.out.println("输出"+ Arrays.toString(textFlot));

第二步,配置:

java 复制代码
      embedding:
        options:
          model: text-embedding-v3
          dimensions: 1024

存储文档的可以用redis, es等;

对于API调用层,都是如下的调用方法

本次案例使用自带的SimpleVectorStore

java 复制代码
    @Bean
    public VectorStore vectorStore(OpenAiEmbeddingModel embeddingModel) {
        return SimpleVectorStore.builder(embeddingModel).build();
    }

第三步:实现测试

我们需要先将文档转为Document,存入向量库

java 复制代码
        // 1.创建PDF的读取器
        PagePdfDocumentReader reader = new PagePdfDocumentReader(
                resource, // 文件源
                PdfDocumentReaderConfig.builder()
                        .withPageExtractedTextFormatter(ExtractedTextFormatter.defaults())
                        .withPagesPerDocument(1) // 每1页PDF作为一个Document
                        .build()
        );
        // 2.读取PDF文档,拆分为Document
        List<Document> documents = reader.read();
        // 3.写入向量库
        vectorStore.add(documents);

然后进行组装搜索

java 复制代码
    
        SearchRequest request = SearchRequest.builder()
                .query("论语中教育的目的是什么")
                .topK(1)
                .similarityThreshold(0.6)
                .filterExpression("file_name == '知识笔记.pdf'")
                .build();

最后通过调用接口搜索

java 复制代码
 List<Document> docs = vectorStore.similaritySearch(request);

以上就实现了一个简单的自带存储PDF,然后进行向量接口搜索的demo

相关推荐
Goldn.1 小时前
Java核心技术栈全景解析:从Web开发到AI融合
java· spring boot· 微服务· ai· jvm· maven· hibernate
李慕婉学姐2 小时前
【开题答辩过程】以《基于Android的出租车运行监测系统设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·后端·vue
m0_740043732 小时前
SpringBoot05-配置文件-热加载/日志框架slf4j/接口文档工具Swagger/Knife4j
java·spring boot·后端·log4j
编织幻境的妖2 小时前
SQL查询连续登录用户方法详解
java·数据库·sql
未若君雅裁3 小时前
JVM面试篇总结
java·jvm·面试
kk哥88993 小时前
C++ 对象 核心介绍
java·jvm·c++
招风的黑耳3 小时前
我用SpringBoot撸了一个智慧水务监控平台
java·spring boot·后端
xunyan62343 小时前
面向对象(下)-接口的理解
java·开发语言
程序员游老板3 小时前
基于SpringBoot3+vue3的爱心陪诊平台
java·spring boot·毕业设计·软件工程·课程设计·信息与通信
期待のcode3 小时前
Springboot核心构建插件
java·spring boot·后端