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

相关推荐
c++之路21 分钟前
C++20概述
java·开发语言·c++20
Championship.23.2425 分钟前
Linux Top 命令族深度解析与实战指南
java·linux·服务器·top·linux调试
橘子海全栈攻城狮40 分钟前
【最新源码】养老院系统管理A013
java·spring boot·后端·web安全·微信小程序
逻辑驱动的ken1 小时前
Java高频面试考点18
java·开发语言·数据库·算法·面试·职场和发展·哈希算法
冷雨夜中漫步1 小时前
Claude Code源码分析——Claude Code Agent Loop 详细设计文档
java·开发语言·人工智能·ai
直奔標竿1 小时前
Java开发者AI转型第二十六课!Spring AI 个人知识库实战(五)——联网搜索增强实战
java·开发语言·人工智能·spring boot·后端·spring
one_love_zfl2 小时前
java面试-微服务组件篇
java·微服务·面试
一只大袋鼠2 小时前
Java进阶:CGLIB动态代理解析
java·开发语言
环流_2 小时前
HTTP 协议的基本格式
java·网络协议·http
爱滑雪的码农2 小时前
Java基础十三:Java中的继承、重写(Override)与重载(Overload)详解
java·开发语言