From 9e031a6dad06b9e57f63cbdbd4a0cec380a2c6c9 Mon Sep 17 00:00:00 2001 From: liu Date: Tue, 6 Aug 2024 16:11:03 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 4 ++ .../chat/client/LangChainChatConfig.java | 37 +++++++++++++++++++ .../chat/client/LangChainChatService.java | 19 ++++++++++ .../chat/client/LangChainChatServiceImpl.java | 32 ++++++++++++++++ .../chat/client/dto/CreateBaseDTO.java | 13 +++++++ .../chat/client/dto/LangChainChatRes.java | 13 +++++++ .../chat/controller/TestController.java | 34 +++++++++++++++++ .../service/impl/ModelCaseServiceImpl.java | 17 ++++++++- src/main/resources/application-dev.yml | 6 ++- 9 files changed, 173 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/supervision/chat/client/LangChainChatConfig.java create mode 100644 src/main/java/com/supervision/chat/client/LangChainChatService.java create mode 100644 src/main/java/com/supervision/chat/client/LangChainChatServiceImpl.java create mode 100644 src/main/java/com/supervision/chat/client/dto/CreateBaseDTO.java create mode 100644 src/main/java/com/supervision/chat/client/dto/LangChainChatRes.java create mode 100644 src/main/java/com/supervision/chat/controller/TestController.java diff --git a/pom.xml b/pom.xml index bf19772..f8d2e31 100644 --- a/pom.xml +++ b/pom.xml @@ -55,6 +55,10 @@ 5.8.26 + + org.springframework.boot + spring-boot-starter-webflux + com.baomidou mybatis-plus-spring-boot3-starter diff --git a/src/main/java/com/supervision/chat/client/LangChainChatConfig.java b/src/main/java/com/supervision/chat/client/LangChainChatConfig.java new file mode 100644 index 0000000..e523f03 --- /dev/null +++ b/src/main/java/com/supervision/chat/client/LangChainChatConfig.java @@ -0,0 +1,37 @@ +package com.supervision.chat.client; + +import cn.hutool.core.util.ArrayUtil; +import org.checkerframework.checker.units.qual.C; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.client.RestClient; +import org.springframework.web.client.support.RestClientAdapter; +import org.springframework.web.service.invoker.HttpServiceProxyFactory; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.concurrent.CompletableFuture; + +@Configuration +public class LangChainChatConfig { + + @Value("${langChain-chat.url}") + private String LangChainChatClientUrl; + + + @Bean + public RestClient restClient() { + return RestClient.builder().baseUrl(LangChainChatClientUrl).build(); + } + @Bean + public LangChainChatService langChainChatClient(RestClient restClient) { + + RestClientAdapter adapter = RestClientAdapter.create(restClient); + HttpServiceProxyFactory factory = HttpServiceProxyFactory.builderFor(adapter).build(); + + return factory.createClient(LangChainChatService.class); + } + + +} diff --git a/src/main/java/com/supervision/chat/client/LangChainChatService.java b/src/main/java/com/supervision/chat/client/LangChainChatService.java new file mode 100644 index 0000000..dc65edc --- /dev/null +++ b/src/main/java/com/supervision/chat/client/LangChainChatService.java @@ -0,0 +1,19 @@ +package com.supervision.chat.client; + +import com.supervision.chat.client.dto.CreateBaseDTO; +import com.supervision.chat.client.dto.LangChainChatRes; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.service.annotation.HttpExchange; +import org.springframework.web.service.annotation.PostExchange; + +@HttpExchange +public interface LangChainChatService { + + @PostExchange(url = "create_knowledge_base", contentType = "application/json") + void chat(@RequestBody CreateBaseDTO createBaseDTO); + + @PostExchange(url = "chat/test/testPost", contentType = "application/json") + LangChainChatRes test(@RequestBody CreateBaseDTO createBaseDTO); + + +} diff --git a/src/main/java/com/supervision/chat/client/LangChainChatServiceImpl.java b/src/main/java/com/supervision/chat/client/LangChainChatServiceImpl.java new file mode 100644 index 0000000..17885d4 --- /dev/null +++ b/src/main/java/com/supervision/chat/client/LangChainChatServiceImpl.java @@ -0,0 +1,32 @@ +package com.supervision.chat.client; + +import cn.hutool.http.HttpUtil; +import cn.hutool.json.JSONUtil; +import com.supervision.chat.client.dto.CreateBaseDTO; +import com.supervision.chat.client.dto.LangChainChatRes; +import org.apache.hc.client5.http.classic.HttpClient; +import org.apache.hc.client5.http.classic.methods.HttpPost; +import org.apache.hc.core5.http.HttpEntity; +import org.apache.hc.core5.http.HttpResponse; +import org.apache.hc.core5.http.io.entity.EntityUtils; +import org.apache.hc.core5.http.io.entity.StringEntity; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.io.IOException; + +@Service +public class LangChainChatServiceImpl{ + + @Value("${langChain-chat.url}") + private String LangChainChatClientUrl; + + + public LangChainChatRes chat(CreateBaseDTO createBaseDTO) { + String post = HttpUtil.post(LangChainChatClientUrl + "create_knowledge_base", JSONUtil.toJsonStr(createBaseDTO)); + if (JSONUtil.isTypeJSON(post)) { + return JSONUtil.toBean(post, LangChainChatRes.class); + } + return null; + } +} diff --git a/src/main/java/com/supervision/chat/client/dto/CreateBaseDTO.java b/src/main/java/com/supervision/chat/client/dto/CreateBaseDTO.java new file mode 100644 index 0000000..e9807ec --- /dev/null +++ b/src/main/java/com/supervision/chat/client/dto/CreateBaseDTO.java @@ -0,0 +1,13 @@ +package com.supervision.chat.client.dto; + +import lombok.Data; + +@Data +public class CreateBaseDTO { + + private String knowledge_base_name; + + private String vector_store_type = "faiss"; + + private String embed_model = "bge-large-zh"; +} diff --git a/src/main/java/com/supervision/chat/client/dto/LangChainChatRes.java b/src/main/java/com/supervision/chat/client/dto/LangChainChatRes.java new file mode 100644 index 0000000..130513f --- /dev/null +++ b/src/main/java/com/supervision/chat/client/dto/LangChainChatRes.java @@ -0,0 +1,13 @@ +package com.supervision.chat.client.dto; + +import lombok.Data; + +@Data +public class LangChainChatRes { + + private Integer code; + + private String msg; + + private String data; +} diff --git a/src/main/java/com/supervision/chat/controller/TestController.java b/src/main/java/com/supervision/chat/controller/TestController.java new file mode 100644 index 0000000..d83b094 --- /dev/null +++ b/src/main/java/com/supervision/chat/controller/TestController.java @@ -0,0 +1,34 @@ +package com.supervision.chat.controller; + +import cn.hutool.json.JSONUtil; +import com.supervision.chat.client.LangChainChatService; +import com.supervision.chat.client.dto.CreateBaseDTO; +import com.supervision.chat.client.dto.LangChainChatRes; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.service.annotation.PostExchange; + +import java.util.concurrent.Executors; + +@Slf4j +@RequestMapping("chat/test/") +@RestController +@RequiredArgsConstructor +public class TestController { + + private final LangChainChatService langChainChatClient; + + @GetMapping("test") + public void test(){ + CreateBaseDTO createBaseDTO = new CreateBaseDTO(); + createBaseDTO.setKnowledge_base_name("11111111"); + langChainChatClient.chat(createBaseDTO); +// log.info(JSONUtil.toJsonStr(chat)); + } + + @PostMapping("testPost") + public void testPost(@RequestBody CreateBaseDTO createBaseDTO){ + System.out.println(JSONUtil.toJsonStr(createBaseDTO)); + } +} diff --git a/src/main/java/com/supervision/police/service/impl/ModelCaseServiceImpl.java b/src/main/java/com/supervision/police/service/impl/ModelCaseServiceImpl.java index 2b4e0b9..84af73d 100644 --- a/src/main/java/com/supervision/police/service/impl/ModelCaseServiceImpl.java +++ b/src/main/java/com/supervision/police/service/impl/ModelCaseServiceImpl.java @@ -17,6 +17,7 @@ import com.supervision.common.exception.CustomException; import com.supervision.common.utils.ExcelReader; import com.supervision.common.utils.IPages; import com.supervision.common.utils.StringUtils; +import com.supervision.config.BusinessException; import com.supervision.police.domain.CasePerson; import com.supervision.police.domain.ComDictionary; import com.supervision.police.dto.*; @@ -29,6 +30,7 @@ import com.supervision.police.service.ModelCaseService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; @@ -130,10 +132,20 @@ public class ModelCaseServiceImpl extends ServiceImpl addOrUpd(ModelCaseBase modelCaseBase) { int i = 0; + if (StrUtil.isBlank(modelCaseBase.getCaseNo())) { + throw new BusinessException("案件编号不能为空"); + } ModelCase modelCase = modelCaseBase.toModelCase(); if (modelCase.getId() != null) { + // 如果更新,则校验案件编码,案件编码不允许修改(案件编码作为和知识库交互的主键,是唯一的) + ModelCase exist = modelCaseMapper.selectById(modelCase.getId()); + if (!StrUtil.equals(exist.getCaseNo(), modelCase.getCaseNo())) { + throw new BusinessException("案件编号不允许修改"); + } i = modelCaseMapper.updateById(modelCase); } else { Long num = modelCaseMapper.selectCount(null); @@ -141,12 +153,15 @@ public class ModelCaseServiceImpl extends ServiceImpl 0) { + // TODO 这里需要调用知识库的接口,去保存知识库 return R.okMsg("保存成功"); } else { return R.fail("保存失败"); } } + + @Override public R del(String id) { ModelCase modelCase = modelCaseMapper.selectById(id); @@ -274,7 +289,7 @@ public class ModelCaseServiceImpl extends ServiceImpl