新增知识库相关接口
This commit is contained in:
@@ -1,6 +1,5 @@
|
||||
package com.gxwebsoft.ai.controller;
|
||||
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
@@ -20,13 +19,13 @@ import com.gxwebsoft.ai.config.TemplateConfig;
|
||||
import com.gxwebsoft.ai.dto.AuditReportRequest;
|
||||
import com.gxwebsoft.ai.dto.KnowledgeBaseRequest;
|
||||
import com.gxwebsoft.ai.enums.AuditReportEnum;
|
||||
import com.gxwebsoft.ai.service.KnowledgeBaseService;
|
||||
import com.gxwebsoft.ai.util.AuditReportUtil;
|
||||
import com.gxwebsoft.common.core.web.ApiResult;
|
||||
import com.gxwebsoft.common.core.web.BaseController;
|
||||
import com.gxwebsoft.common.system.entity.User;
|
||||
|
||||
import cn.afterturn.easypoi.word.WordExportUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.http.HttpUtil;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
@@ -45,7 +44,7 @@ public class AuditReportController extends BaseController {
|
||||
private TemplateConfig templateConfig;
|
||||
|
||||
@Autowired
|
||||
private KnowledgeBaseController knowledgeBaseController;
|
||||
private KnowledgeBaseService knowledgeBaseService;
|
||||
|
||||
private String invok(String query, String knowledge, String history, String suggestion, String title, String userName) {
|
||||
// 构建请求体
|
||||
@@ -91,7 +90,7 @@ public class AuditReportController extends BaseController {
|
||||
KnowledgeBaseRequest knowledgeBaseRequest = new KnowledgeBaseRequest();
|
||||
knowledgeBaseRequest.setKbId(req.getKbId());
|
||||
knowledgeBaseRequest.setFormCommit((req.getFormCommit() >= 10) ? req.getFormCommit() / 10 : req.getFormCommit());
|
||||
String knowledge = knowledgeBaseController.query(knowledgeBaseRequest).getData().toString();
|
||||
String knowledge = knowledgeBaseService.queryKnowledgeBase(knowledgeBaseRequest).toString();
|
||||
|
||||
String query = AuditReportEnum.getByCode(req.getFormCommit()).getDesc();
|
||||
// String ret = this.invok(query, knowledge, AuditReportUtil.generateReportContent(req), req.getSuggestion(), loginUser.getUsername());
|
||||
|
||||
@@ -1,25 +1,15 @@
|
||||
package com.gxwebsoft.ai.controller;
|
||||
|
||||
import com.aliyun.bailian20231229.Client;
|
||||
import com.aliyun.bailian20231229.models.RetrieveResponse;
|
||||
import com.aliyun.bailian20231229.models.RetrieveResponseBody.RetrieveResponseBodyDataNodes;
|
||||
import com.gxwebsoft.ai.config.KnowledgeBaseConfig;
|
||||
import com.gxwebsoft.ai.constants.KnowledgeBaseConstants;
|
||||
import com.gxwebsoft.ai.factory.KnowledgeBaseClientFactory;
|
||||
import com.gxwebsoft.ai.util.KnowledgeBaseRetrieve;
|
||||
import com.gxwebsoft.ai.dto.KnowledgeBaseRequest;
|
||||
import com.gxwebsoft.ai.service.KnowledgeBaseService;
|
||||
import com.gxwebsoft.common.core.web.ApiResult;
|
||||
import com.gxwebsoft.common.core.web.BaseController;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
@Tag(name = "知识库")
|
||||
@RestController
|
||||
@@ -27,33 +17,80 @@ import java.util.Set;
|
||||
public class KnowledgeBaseController extends BaseController {
|
||||
|
||||
@Autowired
|
||||
private KnowledgeBaseConfig config;
|
||||
|
||||
@Autowired
|
||||
private KnowledgeBaseClientFactory clientFactory;
|
||||
private KnowledgeBaseService knowledgeBaseService;
|
||||
|
||||
@Operation(summary = "查询知识库")
|
||||
@GetMapping("/query")
|
||||
public ApiResult<?> query(KnowledgeBaseRequest req) {
|
||||
Set<String> ret = new LinkedHashSet<>();
|
||||
String workspaceId = config.getWorkspaceId();
|
||||
List<String> keyWords = Arrays.asList(KnowledgeBaseConstants.KEY_WORDS);
|
||||
String indexId = req.getKbId();
|
||||
String query = StrUtil.isEmpty(req.getQuery()) ? keyWords.get(req.getFormCommit()) : req.getQuery();
|
||||
Integer topK = req.getTopK() == null ? 10 : req.getTopK();
|
||||
|
||||
try {
|
||||
Client client = clientFactory.createClient();
|
||||
RetrieveResponse resp = KnowledgeBaseRetrieve.retrieveIndex(client, workspaceId, indexId, query);
|
||||
for (RetrieveResponseBodyDataNodes node : resp.getBody().getData().getNodes()) {
|
||||
ret.add(node.getText());
|
||||
if (ret.size() >= topK) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return success(knowledgeBaseService.queryKnowledgeBase(req));
|
||||
} catch (Exception e) {
|
||||
return fail("查询失败:" + e.getMessage());
|
||||
}
|
||||
return success(ret);
|
||||
}
|
||||
|
||||
@Operation(summary = "创建知识库")
|
||||
@PostMapping("/create")
|
||||
public ApiResult<?> create(@RequestParam String companyName, @RequestParam String companyCode) {
|
||||
try {
|
||||
String indexId = knowledgeBaseService.createKnowledgeBase(companyName, companyCode);
|
||||
return success(indexId);
|
||||
} catch (Exception e) {
|
||||
return fail("创建失败:" + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Operation(summary = "查询知识库下的文档列表")
|
||||
@GetMapping("/documents")
|
||||
public ApiResult<?> listDocuments(String kbId) {
|
||||
try {
|
||||
return success(knowledgeBaseService.listDocuments(kbId));
|
||||
} catch (Exception e) {
|
||||
return fail("查询文档列表失败:" + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Operation(summary = "删除知识库下的文档")
|
||||
@DeleteMapping("/document")
|
||||
public ApiResult<?> deleteDocument(String kbId, String fileIds) {
|
||||
try {
|
||||
boolean result = knowledgeBaseService.deleteIndexDocument(kbId, fileIds);
|
||||
if (result) {
|
||||
return success("删除成功");
|
||||
} else {
|
||||
return fail("删除失败");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
return fail("删除文档失败: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Operation(summary = "上传文档到知识库")
|
||||
@PostMapping("/upload")
|
||||
public ApiResult<?> uploadDocuments(@RequestParam String kbId, @RequestParam("files") MultipartFile[] files) {
|
||||
try {
|
||||
if (files == null || files.length == 0) {
|
||||
return fail("请选择要上传的文件");
|
||||
}
|
||||
|
||||
for (MultipartFile file : files) {
|
||||
if (file.isEmpty()) {
|
||||
return fail("文件不能为空: " + file.getOriginalFilename());
|
||||
}
|
||||
if (file.getSize() > 100 * 1024 * 1024) {
|
||||
return fail("文件大小不能超过100MB: " + file.getOriginalFilename());
|
||||
}
|
||||
}
|
||||
|
||||
boolean result = knowledgeBaseService.uploadDocuments(kbId, files);
|
||||
|
||||
if (result) {
|
||||
return success("成功上传 " + files.length + " 个文件");
|
||||
} else {
|
||||
return success("部分文件上传成功");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
return fail("上传失败: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user