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