Эх сурвалжийг харах

知识库模块--日常提交

Gaokun Wang 5 сар өмнө
parent
commit
5afbaeb753

+ 5 - 0
eco-ai/ai-knowledge-biz/pom.xml

@@ -25,6 +25,7 @@
             <groupId>org.eco.vip</groupId>
             <artifactId>com-web</artifactId>
         </dependency>
+
         <dependency>
             <groupId>io.github.pig-mesh.ai</groupId>
             <artifactId>deepseek-spring-boot-starter</artifactId>
@@ -34,6 +35,10 @@
             <groupId>io.milvus</groupId>
             <artifactId>milvus-sdk-java</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.eco.vip</groupId>
+            <artifactId>com-orm</artifactId>
+        </dependency>
 
     </dependencies>
 

+ 71 - 0
eco-ai/ai-knowledge-biz/src/main/java/org/eco/vip/ai/knowledge/constant/MilvusConstant.java

@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2025 GaoKunW
+ *
+ */
+
+package org.eco.vip.ai.knowledge.constant;
+
+
+/**
+ * @description MilvusConstant
+ *
+ * @author GaoKunW
+ * @date 2025/3/17 01:02
+ */
+public class MilvusConstant {
+    /**
+     * 向量数据库名称
+     */
+    public static final String DB_NAME = "default";
+
+    /**
+     * 集合名称
+     */
+    public static final String COLLECTION_NAME = "rag_collection";
+
+    /**
+     * 分片数量
+     */
+    public static final int SHARDS_NUM = 1;
+
+    /**
+     * 分区数量
+     */
+    public static final int PARTITION_NUM = 1;
+
+    /**
+     * 特征向量维度
+     */
+    public static final Integer FEATURE_DIM = 768;
+
+    /**
+     * 字段
+     */
+    public static class Field {
+
+        /**
+         * id
+         */
+        public static final String ID = "id";
+
+        /**
+         * 文本特征向量
+         */
+        public static final String FEATURE = "feature";
+
+        /**
+         * 文本
+         */
+        public static final String TEXT = "text";
+
+        /**
+         * 文件名
+         */
+        public static final String FILE_NAME = "file_name";
+
+        /**
+         * 元数据
+         */
+        public static final String METADATA = "metadata";
+    }
+}

+ 15 - 4
eco-ai/ai-knowledge-biz/src/main/java/org/eco/vip/ai/knowledge/controller/KnowledgeController.java

@@ -16,10 +16,10 @@ import io.milvus.v2.service.vector.request.SearchReq;
 import io.milvus.v2.service.vector.request.data.FloatVec;
 import io.milvus.v2.service.vector.response.SearchResp;
 import jakarta.annotation.Resource;
+import org.eco.vip.ai.knowledge.domain.knowledge.Knowledge;
+import org.eco.vip.ai.knowledge.service.IKnowledgeService;
 import org.springframework.http.MediaType;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 import reactor.core.publisher.Flux;
 
 import java.util.ArrayList;
@@ -33,7 +33,7 @@ import java.util.List;
  * @date 2025/3/16 22:41
  */
 @RestController
-@RequestMapping("/ai/ollama")
+@RequestMapping("/ai/knowledge")
 public class KnowledgeController {
 
     @Resource
@@ -42,6 +42,17 @@ public class KnowledgeController {
     @Resource
     private DeepSeekClient deepSeekClient;
 
+    @Resource
+    private IKnowledgeService knowledgeService;
+
+
+    @PostMapping("/save")
+    public Void save(@RequestBody Knowledge bo) {
+
+        return null;
+    }
+
+
     @GetMapping(value = "/chat", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
     public Flux<ChatCompletionResponse> chat(String prompt) {
         ConnectConfig connectConfig = ConnectConfig.builder()

+ 88 - 0
eco-ai/ai-knowledge-biz/src/main/java/org/eco/vip/ai/knowledge/domain/knowledge/Knowledge.java

@@ -0,0 +1,88 @@
+/*
+ * Copyright (c) 2025 GaoKunW
+ *
+ */
+
+package org.eco.vip.ai.knowledge.domain.knowledge;
+
+
+import com.mybatisflex.annotation.Id;
+import com.mybatisflex.annotation.Table;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.eco.vip.orm.domain.BaseEntity;
+
+/**
+ * @description Knowledge
+ *
+ * @author GaoKunW
+ * @date 2025/3/16 23:58
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Table(value = "ai_knowledge_t")
+public class Knowledge extends BaseEntity {
+
+    @Id
+    private Long id;
+
+    /**
+     * 知识库ID
+     */
+    private String kId;
+
+    /**
+     * 用户ID
+     */
+    private Long uId;
+
+    /**
+     * 知识库名称
+     */
+    private String kName;
+
+    /**
+     * 是否公开知识库(0 否 1是)
+     */
+    private String share;
+
+    /**
+     * 描述
+     */
+    private String description;
+
+    /**
+     * 知识分隔符
+     */
+    private String knowledgeSeparator;
+
+    /**
+     * 提问分隔符
+     */
+    private String questionSeparator;
+
+    /**
+     * 重叠字符数
+     */
+    private Integer overlapChar;
+
+    /**
+     * 知识库中检索的条数
+     */
+    private Integer retrieveLimit;
+
+    /**
+     * 文本块大小
+     */
+    private Integer textBlockSize;
+
+    /**
+     * 向量库
+     */
+    private String vector;
+
+    /**
+     * 向量模型
+     */
+    private String vectorModel;
+}

+ 19 - 0
eco-ai/ai-knowledge-biz/src/main/java/org/eco/vip/ai/knowledge/mapper/KnowledgeMapper.java

@@ -0,0 +1,19 @@
+/*
+ * Copyright (c) 2025 GaoKunW
+ *
+ */
+
+package org.eco.vip.ai.knowledge.mapper;
+
+
+import com.mybatisflex.core.BaseMapper;
+import org.eco.vip.ai.knowledge.domain.knowledge.Knowledge;
+
+/**
+ * @description KnowledgeMapper
+ *
+ * @author GaoKunW
+ * @date 2025/3/17 00:13
+ */
+public interface KnowledgeMapper extends BaseMapper<Knowledge> {
+}

+ 20 - 0
eco-ai/ai-knowledge-biz/src/main/java/org/eco/vip/ai/knowledge/service/EmbeddingService.java

@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2025 GaoKunW
+ *
+ */
+
+package org.eco.vip.ai.knowledge.service;
+
+
+/**
+ * @description EmbeddingService
+ *
+ * @author GaoKunW
+ * @date 2025/3/17 00:16
+ */
+public class EmbeddingService implements IEmbeddingService {
+    @Override
+    public void createSchema(String kid) {
+
+    }
+}

+ 17 - 0
eco-ai/ai-knowledge-biz/src/main/java/org/eco/vip/ai/knowledge/service/IEmbeddingService.java

@@ -0,0 +1,17 @@
+/*
+ * Copyright (c) 2025 GaoKunW
+ *
+ */
+
+package org.eco.vip.ai.knowledge.service;
+
+
+/**
+ * @description IEmbeddingService
+ *
+ * @author GaoKunW
+ * @date 2025/3/17 00:15
+ */
+public interface IEmbeddingService {
+    void createSchema(String kid);
+}

+ 26 - 0
eco-ai/ai-knowledge-biz/src/main/java/org/eco/vip/ai/knowledge/service/IKnowledgeService.java

@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2025 GaoKunW
+ *
+ */
+
+package org.eco.vip.ai.knowledge.service;
+
+
+import org.eco.vip.ai.knowledge.domain.knowledge.Knowledge;
+
+/**
+ * @description IKnowledgeService
+ *
+ * @author GaoKunW
+ * @date 2025/3/16 23:57
+ */
+public interface IKnowledgeService {
+
+    /**
+     *功能描述
+     *
+     * @param knowledge knowledge
+     *
+     */
+    void saveOne(Knowledge knowledge);
+}

+ 24 - 0
eco-ai/ai-knowledge-biz/src/main/java/org/eco/vip/ai/knowledge/service/KnowledgeService.java

@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2025 GaoKunW
+ *
+ */
+
+package org.eco.vip.ai.knowledge.service;
+
+
+import org.eco.vip.ai.knowledge.domain.knowledge.Knowledge;
+import org.springframework.stereotype.Service;
+
+/**
+ * @description KnowledgeService
+ *
+ * @author GaoKunW
+ * @date 2025/3/17 00:05
+ */
+@Service
+public class KnowledgeService implements IKnowledgeService {
+    @Override
+    public void saveOne(Knowledge knowledge) {
+
+    }
+}

+ 91 - 0
eco-ai/ai-knowledge-biz/src/main/java/org/eco/vip/ai/knowledge/vectorstore/MilvusVectorStore.java

@@ -0,0 +1,91 @@
+/*
+ * Copyright (c) 2025 GaoKunW
+ *
+ */
+
+package org.eco.vip.ai.knowledge.vectorstore;
+
+import io.milvus.v2.client.MilvusClientV2;
+import io.milvus.v2.common.DataType;
+import io.milvus.v2.common.IndexParam;
+import io.milvus.v2.service.collection.request.AddFieldReq;
+import io.milvus.v2.service.collection.request.CreateCollectionReq;
+import io.milvus.v2.service.index.request.CreateIndexReq;
+
+import java.util.Collections;
+
+/**
+ * @author GaoKunW
+ * @description MilvusVectorStore
+ * @date 2025/3/17 00:21
+ */
+public class MilvusVectorStore implements VectorStore {
+
+    private volatile Integer dimension;
+    private volatile String collectionName;
+    private MilvusClientV2 milvusServiceClient;
+
+    @Override
+    public void newSchema(String kid) {
+
+    }
+
+    private void createSchema(String kid) {
+        CreateCollectionReq.CollectionSchema schema = milvusServiceClient.createSchema();
+
+
+        schema.addField(AddFieldReq.builder()
+                .fieldName("row_id")
+                .description("主键ID")
+                .dataType(DataType.VarChar)
+                .isPrimaryKey(true)
+                .autoID(false)
+                .build());
+        schema.addField(AddFieldReq.builder()
+                .fieldName("content")
+                .description("内容")
+                .dataType(DataType.VarChar)
+                .maxLength(1000)
+                .build());
+        schema.addField(AddFieldReq.builder()
+                .fieldName("kid")
+                .dataType(DataType.VarChar)
+                .isPrimaryKey(true)
+                .maxLength(20)
+                .build());
+        schema.addField(AddFieldReq.builder()
+                .fieldName("docId")
+                .dataType(DataType.VarChar)
+                .maxLength(20)
+                .build());
+        schema.addField(AddFieldReq.builder()
+                .fieldName("fid")
+                .dataType(DataType.VarChar)
+                .maxLength(20)
+                .build());
+        schema.addField(AddFieldReq.builder()
+                .fieldName("fv")
+                .dataType(DataType.FloatVector)
+                .dimension(dimension)
+                .build());
+
+        CreateCollectionReq collectionReq = CreateCollectionReq.builder()
+                .collectionName(collectionName + kid)
+                .description("本地知识库")
+                .collectionSchema(schema)
+                .build();
+        milvusServiceClient.createCollection(collectionReq);
+        IndexParam indexParam = IndexParam.builder()
+                .fieldName("title_vector")
+                .indexType(IndexParam.IndexType.IVF_FLAT)
+                .metricType(IndexParam.MetricType.COSINE)
+                .build();
+        CreateIndexReq createIndexReq = CreateIndexReq.builder()
+                .collectionName("")
+                .indexParams(Collections.singletonList(indexParam))
+                .build();
+        // 创建向量的索引
+        milvusServiceClient.createIndex(createIndexReq);
+
+    }
+}

+ 17 - 0
eco-ai/ai-knowledge-biz/src/main/java/org/eco/vip/ai/knowledge/vectorstore/VectorStore.java

@@ -0,0 +1,17 @@
+/*
+ * Copyright (c) 2025 GaoKunW
+ *
+ */
+
+package org.eco.vip.ai.knowledge.vectorstore;
+
+
+/**
+ * @description VectorStore
+ *
+ * @author GaoKunW
+ * @date 2025/3/17 00:21
+ */
+public interface VectorStore {
+    void newSchema(String kid);
+}