diff --git a/pom.xml b/pom.xml
index 9bcfd4e..e8a648a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -29,7 +29,7 @@
UTF-8
16.0.1
2.3.1
- 3.5.14
+ 3.5.5
8.0.33
1.18.30
3.23.6
@@ -118,6 +118,11 @@
compile
+
+ com.baomidou
+ mybatis-plus-spring-boot3-starter
+ ${mybatis-plus-spring-boot.version}
+
mysql
mysql-connector-java
@@ -141,6 +146,13 @@
3.15.0
+
+
+ com.alibaba.fastjson2
+ fastjson2
+ 2.0.51
+
+
org.springframework.boot
spring-boot-starter
diff --git a/xservice-server/src/main/resources/application-local.yml b/xservice-server/src/main/resources/application-local.yml
index 0972201..bc138ef 100644
--- a/xservice-server/src/main/resources/application-local.yml
+++ b/xservice-server/src/main/resources/application-local.yml
@@ -1,8 +1,8 @@
spring:
datasource:
- url: jdbc:mysql://rm-bp15t34gqx62jm069ro.mysql.rds.aliyuncs.com:3306/xservice-ai-center?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true
+ url: jdbc:mysql://120.27.153.87:3306/xe-service-ai?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true
username: root
- password: xb#UWqnhH24&XpX
+ password: sdkljfikdfn@123
driver-class-name: com.mysql.cj.jdbc.Driver
ai:
diff --git a/xservice-server/src/main/resources/application.yml b/xservice-server/src/main/resources/application.yml
index 994e2c3..4e85cd7 100644
--- a/xservice-server/src/main/resources/application.yml
+++ b/xservice-server/src/main/resources/application.yml
@@ -5,6 +5,11 @@ spring:
profiles:
active: local
+ cloud:
+ nacos:
+ config:
+ import-check:
+ enabled: false
server:
port: 38020
@@ -14,4 +19,9 @@ server:
charset: UTF-8
enabled: true
force: true
+mybatis:
+ mapper-locations:
+ - classpath*:mapper/*/*.xml
+ configuration:
+ map-underscore-to-camel-case: true
diff --git a/xservice-service/src/main/java/com/xiang/xservice/ai/agent/SimpleChatAgent.java b/xservice-service/src/main/java/com/xiang/xservice/ai/agent/SimpleChatAgent.java
index b53aa7f..1f6f662 100644
--- a/xservice-service/src/main/java/com/xiang/xservice/ai/agent/SimpleChatAgent.java
+++ b/xservice-service/src/main/java/com/xiang/xservice/ai/agent/SimpleChatAgent.java
@@ -9,7 +9,9 @@ import com.xiang.xservice.ai.core.enums.ModelStrategyEnum;
import com.xiang.xservice.ai.core.enums.ModelTypeEnum;
import com.xiang.xservice.ai.core.handler.MyStreamingHandler;
import com.xiang.xservice.ai.core.route.TaskRouter;
+import com.xiang.xservice.ai.core.storage.DbPersistentStore;
import com.xiang.xservice.ai.core.storage.MemoryPersistentStore;
+import com.xiang.xservice.ai.repository.manage.IAiSimpleChatMessageManage;
import dev.langchain4j.data.message.SystemMessage;
import dev.langchain4j.data.message.UserMessage;
import dev.langchain4j.memory.chat.ChatMemoryProvider;
@@ -26,12 +28,13 @@ public class SimpleChatAgent implements BaseAgent {
private final TaskRouter router;
private final OpenAIBaseConfig openAIBaseConfig;
+ private final IAiSimpleChatMessageManage aiSimpleChatMessageManage;
@Override
public void chat(ModelTypeEnum modelType, Long id, String message) {
- MemoryPersistentStore store = new MemoryPersistentStore();
+ DbPersistentStore store = new DbPersistentStore(aiSimpleChatMessageManage);
ChatMemoryProvider chatMemoryProvider = memoryId -> MessageWindowChatMemory.builder()
.id(memoryId)
diff --git a/xservice-service/src/main/java/com/xiang/xservice/ai/core/handler/MyStreamingHandler.java b/xservice-service/src/main/java/com/xiang/xservice/ai/core/handler/MyStreamingHandler.java
index 75a0422..4add9cc 100644
--- a/xservice-service/src/main/java/com/xiang/xservice/ai/core/handler/MyStreamingHandler.java
+++ b/xservice-service/src/main/java/com/xiang/xservice/ai/core/handler/MyStreamingHandler.java
@@ -3,7 +3,6 @@ package com.xiang.xservice.ai.core.handler;
import dev.langchain4j.model.StreamingResponseHandler;
import dev.langchain4j.model.chat.response.ChatResponse;
import dev.langchain4j.model.chat.response.StreamingChatResponseHandler;
-import org.checkerframework.checker.units.qual.C;
import org.springframework.stereotype.Component;
@Component
diff --git a/xservice-service/src/main/java/com/xiang/xservice/ai/core/route/TaskRouter.java b/xservice-service/src/main/java/com/xiang/xservice/ai/core/route/TaskRouter.java
index 4d44fc8..a099dc9 100644
--- a/xservice-service/src/main/java/com/xiang/xservice/ai/core/route/TaskRouter.java
+++ b/xservice-service/src/main/java/com/xiang/xservice/ai/core/route/TaskRouter.java
@@ -3,15 +3,12 @@ package com.xiang.xservice.ai.core.route;
import com.xiang.xservice.ai.core.entity.ModelConfig;
import com.xiang.xservice.ai.core.enums.ModelStrategyEnum;
import com.xiang.xservice.ai.core.provider.BaseProvider;
-import dev.langchain4j.model.chat.ChatModel;
import dev.langchain4j.model.chat.StreamingChatModel;
-import org.checkerframework.checker.units.qual.C;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import java.util.stream.Collectors;
@Component
public class TaskRouter {
diff --git a/xservice-service/src/main/java/com/xiang/xservice/ai/core/storage/DbPersistentStore.java b/xservice-service/src/main/java/com/xiang/xservice/ai/core/storage/DbPersistentStore.java
index 0ae3339..ea7e87f 100644
--- a/xservice-service/src/main/java/com/xiang/xservice/ai/core/storage/DbPersistentStore.java
+++ b/xservice-service/src/main/java/com/xiang/xservice/ai/core/storage/DbPersistentStore.java
@@ -1,23 +1,97 @@
package com.xiang.xservice.ai.core.storage;
-import dev.langchain4j.data.message.ChatMessage;
+import com.alibaba.fastjson2.JSON;
+import com.google.common.collect.Lists;
+import com.xiang.xservice.ai.pojo.entity.AiSimpleChatMessageDO;
+import com.xiang.xservice.ai.repository.manage.IAiSimpleChatMessageManage;
+import dev.langchain4j.data.message.*;
import dev.langchain4j.store.memory.chat.ChatMemoryStore;
+import lombok.RequiredArgsConstructor;
+import org.apache.commons.collections4.CollectionUtils;
+import org.springframework.stereotype.Component;
+import java.time.LocalDateTime;
import java.util.List;
+/**
+ * 数据库持久化
+ */
+@RequiredArgsConstructor
public class DbPersistentStore implements ChatMemoryStore {
+
+ private final IAiSimpleChatMessageManage aiSimpleChatMessageManage;
+
@Override
public List getMessages(Object memoryId) {
- return List.of();
+ List msg = aiSimpleChatMessageManage.getMsgByMemoryId((Long) memoryId);
+ if (CollectionUtils.isEmpty(msg)) {
+ return Lists.newArrayList();
+ }
+ List result = Lists.newArrayList();
+ for (AiSimpleChatMessageDO chatMessageDO : msg) {
+ String role = chatMessageDO.getRole();
+ switch (role) {
+
+ case "SYSTEM":
+ result.add(SystemMessage.from(chatMessageDO.getMessage()));
+ break;
+
+ case "USER":
+ result.add(UserMessage.from(chatMessageDO.getMessage()));
+ break;
+
+ case "AI":
+ result.add(AiMessage.from(chatMessageDO.getMessage()));
+ break;
+
+ default:
+ break;
+ }
+ }
+ return result;
}
@Override
public void updateMessages(Object memoryId, List list) {
+ List result = Lists.newArrayList();
+ for (ChatMessage chatMessage : list) {
+ StringBuilder str = new StringBuilder();
+ String type = "";
+ if (chatMessage instanceof SystemMessage systemMessage) {
+ str = new StringBuilder(systemMessage.text());
+ type = "SYSTEM";
+ }
+ if (chatMessage instanceof UserMessage userMessage) {
+ for (Content content : userMessage.contents()) {
+ if (content instanceof TextContent textContent) {
+ str.append(textContent.text());
+ type = "USER";
+ }
+ }
+ }
+
+ if (chatMessage instanceof AiMessage aiMessage) {
+ str = new StringBuilder(aiMessage.text());
+ type = "AI";
+ }
+
+ AiSimpleChatMessageDO message = AiSimpleChatMessageDO.builder()
+ .userId(1L)
+ .memoryId((Long) memoryId)
+ .message(str.toString())
+ .createTime(LocalDateTime.now())
+ .delFlag(0)
+ .role(type)
+ .build();
+ result.add(message);
+
+ }
+ aiSimpleChatMessageManage.saveBatch(result);
}
@Override
public void deleteMessages(Object memoryId) {
-
+ aiSimpleChatMessageManage.deleteByMemoryId((Long) memoryId);
}
}
diff --git a/xservice-service/src/main/java/com/xiang/xservice/ai/core/storage/MemoryPersistentStore.java b/xservice-service/src/main/java/com/xiang/xservice/ai/core/storage/MemoryPersistentStore.java
index ed91329..6288bd5 100644
--- a/xservice-service/src/main/java/com/xiang/xservice/ai/core/storage/MemoryPersistentStore.java
+++ b/xservice-service/src/main/java/com/xiang/xservice/ai/core/storage/MemoryPersistentStore.java
@@ -8,9 +8,12 @@ import dev.langchain4j.store.memory.chat.ChatMemoryStore;
import java.util.List;
import java.util.Map;
+/**
+ * 内存持久化
+ */
public class MemoryPersistentStore implements ChatMemoryStore {
- private static Map> MAP = Maps.newHashMap();
+ private final static Map> MAP = Maps.newHashMap();
@Override
diff --git a/xservice-service/src/main/java/com/xiang/xservice/ai/pojo/entity/AiSimpleChatMessageDO.java b/xservice-service/src/main/java/com/xiang/xservice/ai/pojo/entity/AiSimpleChatMessageDO.java
new file mode 100644
index 0000000..a85fa2e
--- /dev/null
+++ b/xservice-service/src/main/java/com/xiang/xservice/ai/pojo/entity/AiSimpleChatMessageDO.java
@@ -0,0 +1,24 @@
+package com.xiang.xservice.ai.pojo.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName("ai_simple_chat_message")
+@Builder
+public class AiSimpleChatMessageDO {
+ private Long id;
+ private Long userId;
+ private Long memoryId;
+ private String role;
+ private String message;
+ private LocalDateTime createTime;
+ private Integer delFlag;
+}
diff --git a/xservice-service/src/main/java/com/xiang/xservice/ai/repository/manage/AiSimpleChatMessageManageImpl.java b/xservice-service/src/main/java/com/xiang/xservice/ai/repository/manage/AiSimpleChatMessageManageImpl.java
new file mode 100644
index 0000000..cbb8d4e
--- /dev/null
+++ b/xservice-service/src/main/java/com/xiang/xservice/ai/repository/manage/AiSimpleChatMessageManageImpl.java
@@ -0,0 +1,26 @@
+package com.xiang.xservice.ai.repository.manage;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xiang.xservice.ai.pojo.entity.AiSimpleChatMessageDO;
+import com.xiang.xservice.ai.repository.mapper.IAiSimpleChatMessageMapper;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class AiSimpleChatMessageManageImpl extends ServiceImpl implements IAiSimpleChatMessageManage {
+ @Override
+ public List getMsgByMemoryId(Long memoryId) {
+ LambdaQueryWrapper lambdaQueryWrapper = Wrappers.lambdaQuery();
+ lambdaQueryWrapper.eq(AiSimpleChatMessageDO::getMemoryId, memoryId);
+ lambdaQueryWrapper.eq(AiSimpleChatMessageDO::getDelFlag, 0);
+ return baseMapper.selectList(lambdaQueryWrapper);
+ }
+
+ @Override
+ public boolean deleteByMemoryId(Long memoryId) {
+ return baseMapper.deleteByMemoryId(memoryId) > 0;
+ }
+}
diff --git a/xservice-service/src/main/java/com/xiang/xservice/ai/repository/manage/IAiSimpleChatMessageManage.java b/xservice-service/src/main/java/com/xiang/xservice/ai/repository/manage/IAiSimpleChatMessageManage.java
new file mode 100644
index 0000000..1de7bd9
--- /dev/null
+++ b/xservice-service/src/main/java/com/xiang/xservice/ai/repository/manage/IAiSimpleChatMessageManage.java
@@ -0,0 +1,11 @@
+package com.xiang.xservice.ai.repository.manage;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.xiang.xservice.ai.pojo.entity.AiSimpleChatMessageDO;
+
+import java.util.List;
+
+public interface IAiSimpleChatMessageManage extends IService {
+ List getMsgByMemoryId(Long memoryId);
+ boolean deleteByMemoryId(Long memoryId);
+}
diff --git a/xservice-service/src/main/java/com/xiang/xservice/ai/repository/mapper/IAiSimpleChatMessageMapper.java b/xservice-service/src/main/java/com/xiang/xservice/ai/repository/mapper/IAiSimpleChatMessageMapper.java
new file mode 100644
index 0000000..99901e9
--- /dev/null
+++ b/xservice-service/src/main/java/com/xiang/xservice/ai/repository/mapper/IAiSimpleChatMessageMapper.java
@@ -0,0 +1,14 @@
+package com.xiang.xservice.ai.repository.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.xiang.xservice.ai.pojo.entity.AiSimpleChatMessageDO;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface IAiSimpleChatMessageMapper extends BaseMapper {
+ int deleteByMemoryId(@Param("id") Long memoryId);
+
+}
diff --git a/xservice-service/src/main/resources/mapper/AiSimpleChatMessageMapper.xml b/xservice-service/src/main/resources/mapper/AiSimpleChatMessageMapper.xml
new file mode 100644
index 0000000..f60324e
--- /dev/null
+++ b/xservice-service/src/main/resources/mapper/AiSimpleChatMessageMapper.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ id,
+ memory_id,
+ role,
+ message,
+ create_time,
+ user_id,
+ del_flag
+
+
+
+ update ai_simple_chat_message set del_flag = 1 where memory_id = #{id}
+
+
+
\ No newline at end of file