赞
踩
运行pgvector容器 根据需要进行容器目录挂载
- docker run --name pgvector \
- -e POSTGRES_PASSWORD=123456 \
- -p 5432:5432 \
- -d --platform linux/amd64 ankane/pgvector:latest
进入docker容器并创建vector字段类型
docker exec -it pgvector bash
psql -U postgres -c "CREATE EXTENSION IF NOT EXISTS vector;"
- <dependency>
- <groupId>dev.langchain4j</groupId>
- <artifactId>langchain4j-spring-boot-starter</artifactId>
- <version>0.30.0</version>
- </dependency>
- <!-- 主要用于查询向量数据库-->
- <dependency>
- <groupId>dev.langchain4j</groupId>
- <artifactId>langchain4j-pgvector</artifactId>
- <version>0.31.0</version>
- </dependency>
-
- <dependency>
- <groupId>dev.langchain4j</groupId>
- <artifactId>langchain4j</artifactId>
- <version>0.30.0</version>
- </dependency>
-
- <dependency>
- <groupId>dev.langchain4j</groupId>
- <artifactId>langchain4j-open-ai</artifactId>
- <version>0.30.0</version>
- </dependency>
-
- <dependency>
- <groupId>dev.langchain4j</groupId>
- <artifactId>langchain4j-hugging-face</artifactId>
- <version>0.30.0</version>
- </dependency>
-
- <dependency>
- <groupId>dev.langchain4j</groupId>
- <artifactId>langchain4j-vertex-ai</artifactId>
- <version>0.30.0</version>
- </dependency>
-
- <dependency>
- <groupId>dev.langchain4j</groupId>
- <artifactId>langchain4j-embeddings</artifactId>
- <version>0.30.0</version>
- </dependency>
-
- <dependency>
- <groupId>dev.langchain4j</groupId>
- <artifactId>langchain4j-embeddings-all-minilm-l6-v2</artifactId>
- <version>0.30.0</version>
- </dependency>
-
-
- <dependency>
- <groupId>dev.langchain4j</groupId>
- <artifactId>langchain4j-document-parser-apache-tika</artifactId>
- <version>0.30.0</version>
- </dependency>
- <dependency>
- <groupId>org.apache.poi</groupId>
- <artifactId>poi-ooxml</artifactId>
- <version>5.2.3</version>
- </dependency>
- <dependency>
- <groupId>net.sourceforge.tess4j</groupId>
- <artifactId>tess4j</artifactId>
- <version>4.5.2</version>
- </dependency>
- <dependency>
- <groupId>org.postgresql</groupId>
- <artifactId>postgresql</artifactId>
- </dependency>

- spring:
- datasource:
- url: jdbc:postgresql://localhost:5432/postgres
- username: postgres
- password: postgres
配置类
- @Configuration
- public class PgVectorConfiguration {
-
- @Bean
- public PgVectorEmbeddingStore embeddingStore() {
- return PgVectorEmbeddingStore.builder()
- //指定主机地址
- .host("localhost")
- //指定端口
- .port(5432)
- //指定数据库名
- .database("postgres")
- //指定用户名
- .user("postgres")
- //指定密码
- .password("postgres")
- //指定向量数据所在表名
- .table("knowledge_vector")
- //指定向量维度
- .dimension(384)
- .build();
- }
- }

@TableName、@TableId以及@TableField集成MyBatis-plus根据自己ORM框架修改
- @TableName("knowledge_vector")
- @Data
- public class KnowledgeVectorDO {
-
- @TableId(value = "embedding_id", type = IdType.ASSIGN_ID)
- private Long embeddingId;
- @TableField("knowledge_id")
- private Long knowledgeId;
- @TableField("text")
- private String text;
- @TableField("embedding")
- private List<Float> embedding;
- @TableField("metadata")
- private String metaData;
- }
注:embedding_id、text、embedding、metadata是必备字段 字段名不能修改 如果embedding需要处理大量的向量数据,并且这些数据的精度要求不高,使用float会更高效,占用更少的存储空间。如果应用场景对数值精度要求较高,例如科学计算或金融应用,应该选择 double。
- /**
- *
- * @param text 匹配的内容
- */
- public void getKnowledgeByText(String text){
- //它是一个使用 AllMiniLmL6V2 模型的实例。文本嵌入模型通常是由预训练的神经网络组成,用于将文本转换为高维向量表示,以捕捉文本之间的语义关系。
- EmbeddingModel embeddingModel = new AllMiniLmL6V2EmbeddingModel();
- //将给定的文本 text 嵌入到高维向量空间中,返回一个表示该文本的嵌入向量
- Embedding queryEmbedding = embeddingModel.embed(text).content();
- //用于在嵌入向量空间中查找与给定查询向量最相似的文本片段。queryEmbedding 是我们之前嵌入的查询文本的向量表示,而参数 1 表示要返回与查询向量最相似的文本片段数量。
- List<EmbeddingMatch<TextSegment>> relevant = embeddingStore.findRelevant(queryEmbedding, 1);
- //从返回的相似文本片段列表 relevant 中获取第一个匹配结果,即与查询向量最相似的文本片段。这个结果被存储在 embeddingMatch 变量中,可以通过它来访问相似度分数和文本内容等信息。
- EmbeddingMatch<TextSegment> embeddingMatch = relevant.get(0);
-
- //对应数据表的Id
- System.out.println("tableId:"+embeddingMatch.embeddingId());
- //根据向量查询到的内容
- System.out.println("text:"+embeddingMatch.embedded().text());
- //表示查询向量与返回的相似文本片段之间的相似度得分。 得分越高表示两个向量之间的语义关系越相似。值越接近1表示相似度越高,值越接近0表示相似度越低
- System.out.println("score:"+embeddingMatch.score());
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。