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

相关推荐
某空m1 分钟前
【Android】BottomNavigationView实现底部导航栏
android·java
顾漂亮5 分钟前
Spring AOP 实战案例+避坑指南
java·后端·spring
SimonKing34 分钟前
Mybatis-Plus的竞争对手来了,试试 MyBatis-Flex
java·后端·程序员
光军oi41 分钟前
JAVA全栈JVM篇————初识JVM
java·开发语言·jvm
我命由我123451 小时前
PDFBox - PDFBox 加载 PDF 异常清单(数据为 null、数据为空、数据异常、文件为 null、文件不存在、文件异常)
java·服务器·后端·java-ee·pdf·intellij-idea·intellij idea
7哥♡ۣۖᝰꫛꫀꪝۣℋ1 小时前
Spring Boot
java·spring boot·后端
Moniane1 小时前
C++深度解析:从核心特性到现代编程实践
java·开发语言·jvm
攻城狮CSU1 小时前
C# 数据加载专题 之泛型序列化
java·servlet·c#
浩泽学编程1 小时前
【源码深度 第1篇】LinkedList:双向链表的设计与实现
java·数据结构·后端·链表·jdk
哲此一生9841 小时前
创建一个SpringBoot项目(连接数据库)
java·spring boot·后端