From ffc78462c8509d7e65530cb5bd0679dd48187526 Mon Sep 17 00:00:00 2001 From: chenxudong Date: Tue, 29 Apr 2025 13:59:38 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=86=E5=90=91=E9=87=8F=E5=BA=93=E4=BB=8Ees?= =?UTF-8?q?=E5=88=87=E6=8D=A2=E5=88=B0mariadb?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- electrmangnetic/pom.xml | 5 ++- .../software/manage/config/AiAdvisor.java | 11 ----- .../service/serviceimpl/ChatService.java | 42 +++++++++---------- pom.xml | 2 +- 4 files changed, 24 insertions(+), 36 deletions(-) diff --git a/electrmangnetic/pom.xml b/electrmangnetic/pom.xml index 700ca56..bca4a62 100644 --- a/electrmangnetic/pom.xml +++ b/electrmangnetic/pom.xml @@ -41,11 +41,11 @@ org.springframework.ai - spring-ai-elasticsearch-store-spring-boot-starter + spring-ai-starter-model-ollama org.springframework.ai - spring-ai-ollama-spring-boot-starter + spring-ai-starter-vector-store-mariadb org.springframework.ai @@ -71,6 +71,7 @@ org.mariadb.jdbc mariadb-java-client + 3.5.1 com.electromagnetic.data diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/config/AiAdvisor.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/config/AiAdvisor.java index d475b11..678e661 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/config/AiAdvisor.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/config/AiAdvisor.java @@ -1,24 +1,13 @@ package com.electromagnetic.industry.software.manage.config; -import jakarta.annotation.Resource; import org.springframework.ai.chat.client.advisor.MessageChatMemoryAdvisor; -import org.springframework.ai.chat.client.advisor.QuestionAnswerAdvisor; import org.springframework.ai.chat.memory.InMemoryChatMemory; -import org.springframework.ai.vectorstore.VectorStore; import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Component; @Component public class AiAdvisor { - @Resource - private VectorStore vectorStore; - - @Bean - public QuestionAnswerAdvisor questionAnswerAdvisor() { - return new QuestionAnswerAdvisor(vectorStore); - } - @Bean public MessageChatMemoryAdvisor messageChatMemoryAdvisor() { return new MessageChatMemoryAdvisor(new InMemoryChatMemory()); diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/ChatService.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/ChatService.java index 5378e02..960fe99 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/ChatService.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/ChatService.java @@ -24,7 +24,6 @@ import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.ai.chat.client.ChatClient; import org.springframework.ai.chat.client.advisor.MessageChatMemoryAdvisor; -import org.springframework.ai.chat.client.advisor.QuestionAnswerAdvisor; import org.springframework.ai.chat.messages.UserMessage; import org.springframework.ai.chat.model.ChatResponse; import org.springframework.ai.chat.prompt.Prompt; @@ -56,29 +55,24 @@ public class ChatService { @Resource private MessageChatMemoryAdvisor messageChatMemoryAdvisor; @Resource - private QuestionAnswerAdvisor questionAnswerAdvisor; - @Resource private AiFileUploadRecordMapper aiFileUploadRecordMapper; @Resource private AiQuestionRecordMapper aiQuestionRecordMapper; @Resource private ElePropertyConfig elePropertyConfig; - public ElectromagneticResult deleteDocument(List ids) { - List vectorIds = aiFileUploadRecordMapper.selectList(Wrappers.lambdaQuery(AiFileUploadRecord.class) - .in(AiFileUploadRecord::getId, ids)) - .stream() - .map(AiFileUploadRecord::getVectorId) - .toList(); - Optional delete = vectorStore.delete(vectorIds); - if (null != delete && delete.isPresent() && delete.get()) { - aiFileUploadRecordMapper.update(Wrappers.lambdaUpdate(AiFileUploadRecord.class) - .in(AiFileUploadRecord::getId, ids) - .set(AiFileUploadRecord::getEffectFlag, EffectFlagEnum.NOT_EFFECTIVE.code)); - return ElectromagneticResultUtil.success(true); - } - return ElectromagneticResultUtil.fail("-1", "删除失败。"); - } +// public ElectromagneticResult deleteDocument(List ids) { +// List vectorIds = aiFileUploadRecordMapper.selectList(Wrappers.lambdaQuery(AiFileUploadRecord.class) +// .in(AiFileUploadRecord::getId, ids)) +// .stream() +// .map(AiFileUploadRecord::getVectorId) +// .toList(); +// vectorStore.delete(vectorIds); +// aiFileUploadRecordMapper.update(Wrappers.lambdaUpdate(AiFileUploadRecord.class) +// .in(AiFileUploadRecord::getId, ids) +// .set(AiFileUploadRecord::getEffectFlag, EffectFlagEnum.NOT_EFFECTIVE.code)); +// return ElectromagneticResultUtil.success(true); +// } @Transactional(rollbackFor = Exception.class) public ElectromagneticResult addFromUpload(MultipartFile file) throws Exception { @@ -172,15 +166,17 @@ public class ChatService { UserThreadLocal.set(userLoginInfo); aiQuestionRecordMapper.insert(record); UserThreadLocal.remove(); + List documents = vectorStore.similaritySearch(queryDTO.getMsg()); + String augmentedPrompt = "基于以下信息回答:" + documents + "\n\n" + queryDTO.getMsg(); return ChatClient.builder(model) .defaultSystem("必须用中文回答") - .defaultAdvisors(messageChatMemoryAdvisor, questionAnswerAdvisor) + .defaultAdvisors(messageChatMemoryAdvisor) .defaultOptions(OllamaOptions .builder() .temperature(0.3) .build()) .build() - .prompt(queryDTO.getMsg()) + .prompt(augmentedPrompt) .stream() .content(); } @@ -192,15 +188,17 @@ public class ChatService { UserThreadLocal.set(userLoginInfo); aiQuestionRecordMapper.insert(record); UserThreadLocal.remove(); + List documents = vectorStore.similaritySearch(queryDTO.getMsg()); + String augmentedPrompt = "基于以下信息回答:" + documents + "\n\n" + queryDTO.getMsg(); return ChatClient.builder(model) .defaultSystem("必须用中文回答") - .defaultAdvisors(messageChatMemoryAdvisor, questionAnswerAdvisor) + .defaultAdvisors(messageChatMemoryAdvisor) .defaultOptions(OllamaOptions .builder() .temperature(0.3) .build()) .build() - .prompt(new Prompt(new UserMessage(queryDTO.getMsg()))) + .prompt(new Prompt(new UserMessage(augmentedPrompt))) .stream() .chatResponse(); } diff --git a/pom.xml b/pom.xml index cb43fc7..a67f584 100644 --- a/pom.xml +++ b/pom.xml @@ -20,7 +20,7 @@ 17 UTF-8 3.3.8 - 1.0.0-M5 + 1.0.0-M7