From 822b76689060de9b07d6d3e3e07c47cd1e294128 Mon Sep 17 00:00:00 2001 From: liu <liujiatong112@163.com> Date: Wed, 10 Jul 2024 14:31:35 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application.yml | 5 +++ know_sub_rag/pom.xml | 17 ++++++++-- .../ElasticsearchVectorStoreConfig.java | 17 +++++++--- ...gClient.java => VectorEmbeddingModel.java} | 4 +-- .../knowsub/controller/EsTestController.java | 33 +++++++++++++++++++ pom.xml | 19 +++++++++++ 6 files changed, 86 insertions(+), 9 deletions(-) rename know_sub_rag/src/main/java/com/supervision/knowsub/config/{VectorEmbeddingClient.java => VectorEmbeddingModel.java} (93%) create mode 100644 know_sub_rag/src/main/java/com/supervision/knowsub/controller/EsTestController.java diff --git a/know_sub_business/src/main/resources/application.yml b/know_sub_business/src/main/resources/application.yml index 99b2b45..620bc3d 100644 --- a/know_sub_business/src/main/resources/application.yml +++ b/know_sub_business/src/main/resources/application.yml @@ -14,6 +14,11 @@ server: spring: elasticsearch: uris: http://192.168.10.137:9200 + ai: + vectorstore: + elasticsearch: + index-name: 11 + main: allow-bean-definition-overriding: true servlet: diff --git a/know_sub_rag/pom.xml b/know_sub_rag/pom.xml index 6a704b5..9f80975 100644 --- a/know_sub_rag/pom.xml +++ b/know_sub_rag/pom.xml @@ -25,10 +25,10 @@ <artifactId>spring-ai-ollama-spring-boot-starter</artifactId> </dependency> + <dependency> - <groupId>io.springboot.ai</groupId> + <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-elasticsearch-store</artifactId> - <version>1.0.3</version> </dependency> <dependency> @@ -73,6 +73,19 @@ </dependencies> + <repositories> + <repository> + <id>spring-milestones</id> + <name>Spring Milestones</name> + <url>https://repo.spring.io/milestone</url> + <snapshots> + <enabled>false</enabled> + </snapshots> + </repository> + </repositories> + + + <build> <plugins> diff --git a/know_sub_rag/src/main/java/com/supervision/knowsub/config/ElasticsearchVectorStoreConfig.java b/know_sub_rag/src/main/java/com/supervision/knowsub/config/ElasticsearchVectorStoreConfig.java index 5b1f441..7b5cf8e 100644 --- a/know_sub_rag/src/main/java/com/supervision/knowsub/config/ElasticsearchVectorStoreConfig.java +++ b/know_sub_rag/src/main/java/com/supervision/knowsub/config/ElasticsearchVectorStoreConfig.java @@ -1,7 +1,10 @@ package com.supervision.knowsub.config; import org.elasticsearch.client.RestClient; +import org.springframework.ai.embedding.EmbeddingClient; +import org.springframework.ai.embedding.EmbeddingModel; import org.springframework.ai.vectorstore.ElasticsearchVectorStore; +import org.springframework.ai.vectorstore.ElasticsearchVectorStoreOptions; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; @@ -13,15 +16,19 @@ import org.springframework.util.Assert; public class ElasticsearchVectorStoreConfig { @Bean -// @ConditionalOnProperty(prefix = "embedding", name = "url") - public VectorEmbeddingClient vectorEmbeddingClient(EmbeddingProperties embeddingProperties) { + @ConditionalOnProperty(prefix = "embedding", name = "url") + public EmbeddingModel embeddingModel(EmbeddingProperties embeddingProperties) { Assert.notNull(embeddingProperties.getUrl(), "配置文件embedding:url未找到"); - return new VectorEmbeddingClient(embeddingProperties.getUrl()); + return new VectorEmbeddingModel(embeddingProperties.getUrl()); } @Bean - public ElasticsearchVectorStore vectorStore(VectorEmbeddingClient embeddingModel, RestClient restClient) { - return new ElasticsearchVectorStore(restClient, embeddingModel); + @ConditionalOnProperty(prefix = "embedding", name = "url") + public ElasticsearchVectorStore vectorStore(EmbeddingModel embeddingModel, RestClient restClient) { + ElasticsearchVectorStoreOptions options = new ElasticsearchVectorStoreOptions(); + options.setIndexName("test_rag"); + options.setDimensions(1024); + return new ElasticsearchVectorStore(options, restClient, embeddingModel, true); } } diff --git a/know_sub_rag/src/main/java/com/supervision/knowsub/config/VectorEmbeddingClient.java b/know_sub_rag/src/main/java/com/supervision/knowsub/config/VectorEmbeddingModel.java similarity index 93% rename from know_sub_rag/src/main/java/com/supervision/knowsub/config/VectorEmbeddingClient.java rename to know_sub_rag/src/main/java/com/supervision/knowsub/config/VectorEmbeddingModel.java index 481761e..60b3487 100644 --- a/know_sub_rag/src/main/java/com/supervision/knowsub/config/VectorEmbeddingClient.java +++ b/know_sub_rag/src/main/java/com/supervision/knowsub/config/VectorEmbeddingModel.java @@ -14,11 +14,11 @@ import java.util.Map; import java.util.concurrent.atomic.AtomicInteger; @Slf4j -public class VectorEmbeddingClient extends AbstractEmbeddingClient { +public class VectorEmbeddingModel implements EmbeddingModel { private final String embeddingUrl; - public VectorEmbeddingClient(String embeddingUrl) { + public VectorEmbeddingModel(String embeddingUrl) { this.embeddingUrl = embeddingUrl; } diff --git a/know_sub_rag/src/main/java/com/supervision/knowsub/controller/EsTestController.java b/know_sub_rag/src/main/java/com/supervision/knowsub/controller/EsTestController.java new file mode 100644 index 0000000..791103d --- /dev/null +++ b/know_sub_rag/src/main/java/com/supervision/knowsub/controller/EsTestController.java @@ -0,0 +1,33 @@ +package com.supervision.knowsub.controller; + +import cn.hutool.json.JSONUtil; +import org.springframework.ai.document.Document; +import org.springframework.ai.vectorstore.ElasticsearchVectorStore; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@RestController +@RequestMapping("esTest") +public class EsTestController { + + @Autowired + private ElasticsearchVectorStore elasticsearchVectorStore; + + @GetMapping("add") + public void add(){ + Document document = new Document("测试测试"); + elasticsearchVectorStore.add(List.of(document)); + } + + @GetMapping("search") + public void search(){ + List<Document> result = elasticsearchVectorStore.similaritySearch(""); + for (Document document : result) { + System.out.println(JSONUtil.toJsonStr(document)); + } + } +} diff --git a/pom.xml b/pom.xml index 2236a84..d92d209 100644 --- a/pom.xml +++ b/pom.xml @@ -52,6 +52,14 @@ <scope>import</scope> </dependency> + <dependency> + <groupId>org.springframework.ai</groupId> + <artifactId>spring-ai-bom</artifactId> + <version>1.0.0-M1</version> + <type>pom</type> + <scope>import</scope> + </dependency> + <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> @@ -112,4 +120,15 @@ </dependencies> </dependencyManagement> + <repositories> + <repository> + <id>spring-milestones</id> + <name>Spring Milestones</name> + <url>https://repo.spring.io/milestone</url> + <snapshots> + <enabled>false</enabled> + </snapshots> + </repository> + </repositories> + </project>