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

相关推荐
ID_18007905473几秒前
Python解析小红书(XHS)笔记评论 API,json数据返回参考
java·服务器·数据库
努力努力再努力wz1 分钟前
【C++高阶系列】告别内查找局限:基于磁盘 I/O 视角的 B 树深度剖析与 C++ 泛型实现!(附B树实现源码)
java·linux·开发语言·数据结构·c++·b树·算法
hero.fei3 分钟前
RoaringBitmap在SpringBoot中的使用以及与BitSet对比
java·spring boot·spring
Traving Yu5 分钟前
Spring源码与框架原理
java·后端·spring
Lyyaoo.9 分钟前
【JAVA基础面经】线程安全的单例模式
java·安全·单例模式
_李小白14 分钟前
【OSG学习笔记】Day 39: NodeCallback(帧回调机制)
java·笔记·学习
如来神掌十八式16 分钟前
设计模式之装饰器模式
java·设计模式
cch891823 分钟前
C++、Python与汇编语言终极对比
java·开发语言·jvm
好家伙VCC34 分钟前
**InfluxDB实战进阶:基于Golang的高性能时序数据采集与可视化方
java·开发语言·后端·python·golang
斌味代码35 分钟前
Java SpringBoot 微服务实战:企业级架构设计与性能调优完全指南
java·spring boot·微服务