diff --git a/src/main/java/com/ai/config/EmbeddingConfig.java b/src/main/java/com/ai/config/EmbeddingConfig.java new file mode 100644 index 0000000..8294294 --- /dev/null +++ b/src/main/java/com/ai/config/EmbeddingConfig.java @@ -0,0 +1,42 @@ +package com.ai.config; + +import dev.langchain4j.community.model.dashscope.QwenEmbeddingModel; +import dev.langchain4j.data.segment.TextSegment; +import dev.langchain4j.store.embedding.EmbeddingStore; +import dev.langchain4j.store.embedding.milvus.MilvusEmbeddingStore; +import io.milvus.common.clientenum.ConsistencyLevelEnum; +import io.milvus.param.IndexType; +import io.milvus.param.MetricType; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class EmbeddingConfig { + + @Value("${langchain4j.api-key}") + private String apiKey; + + @Bean + public QwenEmbeddingModel embeddingModel() { + return QwenEmbeddingModel.builder().apiKey(apiKey).build(); + } + + @Bean + public EmbeddingStore embeddingStore() { + return MilvusEmbeddingStore.builder() + .host("localhost") + .port(19530) + .collectionName("langchain4j_collection") + .dimension(1536) + .indexType(IndexType.FLAT) + .metricType(MetricType.COSINE) + .consistencyLevel(ConsistencyLevelEnum.EVENTUALLY) + .autoFlushOnInsert(true) + .idFieldName("id") + .textFieldName("text") + .metadataFieldName("metadata") + .vectorFieldName("vector") + .build(); + } +} diff --git a/src/main/java/com/ai/config/SegmentConfig.java b/src/main/java/com/ai/config/SegmentConfig.java index dd83f15..e3d8d08 100644 --- a/src/main/java/com/ai/config/SegmentConfig.java +++ b/src/main/java/com/ai/config/SegmentConfig.java @@ -18,6 +18,7 @@ import dev.langchain4j.store.embedding.milvus.MilvusEmbeddingStore; import io.milvus.common.clientenum.ConsistencyLevelEnum; import io.milvus.param.IndexType; import io.milvus.param.MetricType; +import jakarta.annotation.Resource; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; @@ -38,35 +39,19 @@ public class SegmentConfig { @Value("${rag.path}") private String ragPath; + @Resource + private QwenEmbeddingModel embeddingModel; + + @Resource + private EmbeddingStore embeddingStore; + @Bean public SegmentAssist segmentAssist() { ChatLanguageModel qwenModel = QwenChatModel.builder() .apiKey(apiKey) .modelName(model) .build(); - QwenEmbeddingModel embeddingModel = QwenEmbeddingModel.builder().apiKey(apiKey).build(); // InMemoryEmbeddingStore embeddingStore = new InMemoryEmbeddingStore<>(); - EmbeddingStore embeddingStore = MilvusEmbeddingStore.builder() - .host("localhost") - .port(19530) - .collectionName("langchain4j_collection") - .dimension(1536) - .indexType(IndexType.FLAT) - .metricType(MetricType.COSINE) - .consistencyLevel(ConsistencyLevelEnum.EVENTUALLY) - .autoFlushOnInsert(true) - .idFieldName("id") - .textFieldName("text") - .metadataFieldName("metadata") - .vectorFieldName("vector") - .build(); - List documents = FileSystemDocumentLoader.loadDocuments(ragPath); - for (Document document : documents) { - DocumentByLineSplitter splitter = new DocumentByLineSplitter(300,30); - List segments = splitter.split(document); - List embeddings = embeddingModel.embedAll(segments).content(); - embeddingStore.addAll(embeddings, segments); - } ContentRetriever contentRetriever = EmbeddingStoreContentRetriever.builder() .embeddingStore(embeddingStore) diff --git a/src/main/java/com/ai/controller/MilvusController.java b/src/main/java/com/ai/controller/MilvusController.java index c30baea..5d44663 100644 --- a/src/main/java/com/ai/controller/MilvusController.java +++ b/src/main/java/com/ai/controller/MilvusController.java @@ -1,10 +1,21 @@ package com.ai.controller; import com.ai.service.SimilarService; +import dev.langchain4j.community.model.dashscope.QwenEmbeddingModel; +import dev.langchain4j.data.document.Document; +import dev.langchain4j.data.document.loader.FileSystemDocumentLoader; +import dev.langchain4j.data.document.splitter.DocumentByLineSplitter; +import dev.langchain4j.data.embedding.Embedding; +import dev.langchain4j.data.segment.TextSegment; +import dev.langchain4j.store.embedding.EmbeddingStore; +import jakarta.annotation.Resource; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + @RestController @RequestMapping("/milvus") public class MilvusController { @@ -12,6 +23,15 @@ public class MilvusController { @Autowired private SimilarService similarService; + @Resource + private QwenEmbeddingModel embeddingModel; + + @Resource + private EmbeddingStore embeddingStore; + + @Value("${rag.path}") + private String ragPath; + @RequestMapping("/create") public String create() { similarService.createCollection(); @@ -23,4 +43,15 @@ public class MilvusController { similarService.insertProducts(); return "vector create"; } + + @RequestMapping("/import") + public void ImportShopData() { + List documents = FileSystemDocumentLoader.loadDocuments(ragPath); + for (Document document : documents) { + DocumentByLineSplitter splitter = new DocumentByLineSplitter(150,30); + List segments = splitter.split(document); + List embeddings = embeddingModel.embedAll(segments).content(); + embeddingStore.addAll(embeddings, segments); + } + } }