Sfoglia il codice sorgente

add function calls

tycoding 1 anno fa
parent
commit
022e1eab65

+ 17 - 1
langchat-aigc/src/main/java/cn/tycoding/langchat/aigc/controller/AigcKnowledgeController.java

@@ -1,7 +1,9 @@
 package cn.tycoding.langchat.aigc.controller;
 
 import cn.hutool.core.util.StrUtil;
+import cn.tycoding.langchat.aigc.entity.AigcDocs;
 import cn.tycoding.langchat.aigc.entity.AigcKnowledge;
+import cn.tycoding.langchat.aigc.mapper.AigcDocsMapper;
 import cn.tycoding.langchat.aigc.service.AigcKnowledgeService;
 import cn.tycoding.langchat.common.utils.MybatisUtil;
 import cn.tycoding.langchat.common.utils.QueryPage;
@@ -13,6 +15,8 @@ import lombok.RequiredArgsConstructor;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * @author tycoding
@@ -24,6 +28,7 @@ import java.util.List;
 public class AigcKnowledgeController {
 
     private final AigcKnowledgeService kbService;
+    private final AigcDocsMapper docsMapper;
 
     @GetMapping("/list")
     public R<List<AigcKnowledge>> list(AigcKnowledge data) {
@@ -36,7 +41,18 @@ public class AigcKnowledgeController {
         LambdaQueryWrapper<AigcKnowledge> queryWrapper = Wrappers.<AigcKnowledge>lambdaQuery()
                 .like(!StrUtil.isBlank(data.getName()), AigcKnowledge::getName, data.getName())
                 .orderByDesc(AigcKnowledge::getCreateTime);
-        return R.ok(MybatisUtil.getData(kbService.page(page, queryWrapper)));
+        Page<AigcKnowledge> iPage = kbService.page(page, queryWrapper);
+
+        Map<String, List<AigcDocs>> docsMap = docsMapper.selectList(Wrappers.lambdaQuery()).stream().collect(Collectors.groupingBy(AigcDocs::getKnowledgeId));
+        iPage.getRecords().forEach(i -> {
+            List<AigcDocs> docs = docsMap.get(i.getId());
+            if (docs != null) {
+                i.setDocsNum(docs.size());
+                i.setTotalSize(docs.stream().filter(d -> d.getSize() != null).mapToLong(AigcDocs::getSize).sum());
+            }
+        });
+
+        return R.ok(MybatisUtil.getData(iPage));
     }
 
     @GetMapping("/{id}")

+ 2 - 2
langchat-aigc/src/main/java/cn/tycoding/langchat/aigc/endpoint/EmbeddingEndpoint.java

@@ -71,7 +71,7 @@ public class EmbeddingEndpoint {
         AigcDocs data = new AigcDocs()
                 .setName(oss.getFileName())
                 .setSliceStatus(false)
-                .setSize(oss.getSize())
+                .setSize(file.getSize())
                 .setType(DocsTypeEnum.UPLOAD.name())
                 .setKnowledgeId(knowledgeId);
         aigcKnowledgeService.addDocs(data);
@@ -99,7 +99,7 @@ public class EmbeddingEndpoint {
         AigcDocs data = new AigcDocs()
                 .setName(oss.getFileName())
                 .setSliceStatus(false)
-                .setSize(oss.getSize())
+                .setSize(file.getSize())
                 .setType(DocsTypeEnum.UPLOAD.name())
                 .setKnowledgeId(knowledgeId);
         aigcKnowledgeService.addDocs(data);

+ 5 - 0
langchat-aigc/src/main/java/cn/tycoding/langchat/aigc/entity/AigcKnowledge.java

@@ -1,6 +1,7 @@
 package cn.tycoding.langchat.aigc.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
@@ -42,5 +43,9 @@ public class AigcKnowledge implements Serializable {
      */
     private String createTime;
 
+    @TableField(exist = false)
+    private Integer docsNum = 0;
+    @TableField(exist = false)
+    private Long totalSize = 0L;
 }
 

+ 6 - 1
langchat-aigc/src/main/java/cn/tycoding/langchat/aigc/listener/StructExcelListener.java

@@ -55,7 +55,12 @@ public class StructExcelListener extends AnalysisEventListener<Map<Integer, Stri
         List<AigcStructRow> rows = new ArrayList<>();
         list.forEach(i -> {
             i.forEach((k,v) -> {
-                rows.add(new AigcStructRow().setValue(v).setColId(cols.get(k).getId()).setDocsId(docsId).setKnowledgeId(knowledgeId));
+                rows.add(new AigcStructRow()
+                        .setValue(v)
+                        .setColIndex(k)
+                        .setColId(cols.get(k).getId())
+                        .setDocsId(docsId)
+                        .setKnowledgeId(knowledgeId));
             });
         });
         structRowService.saveBatch(rows);

+ 1 - 0
langchat-common/src/main/java/cn/tycoding/langchat/common/dto/DocR.java

@@ -17,6 +17,7 @@ public class DocR {
     private String id;
 
     private String knowledgeId;
+    private String docsId;
     private String path;
 
     private Prompt prompt;

+ 5 - 0
langchat-core/src/main/java/cn/tycoding/langchat/core/entity/AigcStructRow.java

@@ -37,6 +37,11 @@ public class AigcStructRow implements Serializable {
      */
     private String colId;
 
+    /**
+     * 列索引
+     */
+    private Integer colIndex;
+
     /**
      * 行值
      */

+ 15 - 10
langchat-core/src/main/java/cn/tycoding/langchat/core/tools/StructTools.java

@@ -1,8 +1,11 @@
 package cn.tycoding.langchat.core.tools;
 
 import cn.tycoding.langchat.common.dto.DocR;
+import cn.tycoding.langchat.core.entity.AigcStructCol;
+import cn.tycoding.langchat.core.entity.AigcStructRow;
 import cn.tycoding.langchat.core.service.AigcStructColService;
 import cn.tycoding.langchat.core.service.AigcStructRowService;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import dev.langchain4j.agent.tool.Tool;
 
 import java.util.List;
@@ -25,20 +28,22 @@ public class StructTools {
         this.structRowService = structRowService;
     }
 
-    @Tool("Gets column name data in Excel")
+    @Tool("Gets column name data in Data")
     List<String> getCols() {
-        System.out.println("get col names ");
-        return List.of("一级菜单", "二级菜单", "三级菜单");
+        List<AigcStructCol> list = structColService.list(Wrappers.<AigcStructCol>lambdaQuery()
+                .eq(AigcStructCol::getKnowledgeId, req.getKnowledgeId())
+                .eq(AigcStructCol::getDocsId, req.getDocsId())
+        );
+        return list.stream().map(AigcStructCol::getLabel).toList();
     }
 
     @Tool("Gets all the data for a column")
     List<String> getColData(int col) {
-        System.out.println("get col names " + col);
-
-        if (col == 1) {
-            return List.of("menu1", "menu2", "menu3");
-        } else {
-            return List.of("1.1", "2.1", "3.1");
-        }
+        List<AigcStructRow> list = structRowService.list(Wrappers.<AigcStructRow>lambdaQuery()
+                .eq(AigcStructRow::getKnowledgeId, req.getKnowledgeId())
+                .eq(AigcStructRow::getDocsId, req.getDocsId())
+                .eq(AigcStructRow::getColIndex, col)
+        );
+        return list.stream().map(AigcStructRow::getValue).toList();
     }
 }

+ 1 - 7
langchat-server/src/main/java/cn/tycoding/langchat/aigc/endpoint/DocsEndpoint.java

@@ -1,6 +1,5 @@
 package cn.tycoding.langchat.aigc.endpoint;
 
-import cn.tycoding.langchat.aigc.service.AigcOssService;
 import cn.tycoding.langchat.aigc.service.ChatService;
 import cn.tycoding.langchat.common.component.AsyncFuture;
 import cn.tycoding.langchat.common.dto.DocR;
@@ -9,11 +8,7 @@ import cn.tycoding.langchat.common.utils.PromptUtil;
 import cn.tycoding.langchat.common.utils.R;
 import cn.tycoding.langchat.common.utils.StreamEmitter;
 import lombok.AllArgsConstructor;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
 
 /**
@@ -26,7 +21,6 @@ import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
 public class DocsEndpoint {
 
     private final ChatService chatService;
-    private final AigcOssService aigcOssService;
     private final AsyncFuture asyncFuture;
 
     @PostMapping("/chat")

+ 2 - 2
langchat-ui/src/views/aigc/knowledge/index.vue

@@ -108,7 +108,7 @@
               <n-icon size="18">
                 <FolderOutlined />
               </n-icon>
-              <span>文档数:100</span>
+              <span>文档数:{{ item.docsNum }}</span>
             </button>
           </div>
           <div class="p-4 pt-0">
@@ -117,7 +117,7 @@
           <div class="py-3 px-4 border-t flex justify-between items-center">
             <div class="flex gap-1 items-center">
               <n-icon size="20"> <AntCloudOutlined /> </n-icon>
-              <span>文件大小:20kb</span>
+              <span>文件大小:{{ item.totalSize }}kb</span>
             </div>
             <div class="flex gap-3">
               <n-button @click="handleEdit(item)" text type="primary">