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

相关推荐
雨中飘荡的记忆11 小时前
LangChain4j 实战指南
java·langchain
okseekw11 小时前
Java 中的方法:从定义到重载的完整指南
java
雨中飘荡的记忆11 小时前
深入理解设计模式之适配器模式
java·设计模式
用户849137175471611 小时前
生产级故障排查实战:从制造 OOM 到 IDEA Profiler 深度破案
java·jvm
雨中飘荡的记忆11 小时前
深入理解设计模式之装饰者模式
java·设计模式
雨中飘荡的记忆11 小时前
秒杀系统设计与实现
java·redis·lua
小坏讲微服务11 小时前
Spring Cloud Alibaba 整合 Scala 教程完整使用
java·开发语言·分布式·spring cloud·sentinel·scala·后端开发
老鼠只爱大米12 小时前
Java设计模式之外观模式(Facade)详解
java·设计模式·外观模式·facade·java设计模式
vx_dmxq21112 小时前
【微信小程序学习交流平台】(免费领源码+演示录像)|可做计算机毕设Java、Python、PHP、小程序APP、C#、爬虫大数据、单片机、文案
java·spring boot·python·mysql·微信小程序·小程序·idea
9号达人12 小时前
优惠系统演进:从"实时结算"到"所见即所得",前端传参真的鸡肋吗?
java·后端·面试