作者 lixiang

增加redis智能助手设置

... ... @@ -18,6 +18,7 @@ import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.modules.airag.app.entity.AiragButton;
import org.jeecg.modules.airag.app.service.IAiragButtonService;
import org.jeecg.modules.airag.app.service.RedisChatSetService;
import org.jeecg.modules.airag.llm.entity.AiragKnowledge;
import org.jeecg.modules.airag.llm.entity.AiragModel;
import org.jeecg.modules.airag.llm.service.IAiragKnowledgeService;
... ... @@ -52,7 +53,8 @@ public class AiragChatsettingController extends JeecgController<AiragChatsetting
@Autowired
private IAiragButtonService airagButtonService;
@Autowired
private RedisChatSetService redisChatSetService;
/**
* 获取字段数据
*
... ... @@ -65,18 +67,26 @@ public class AiragChatsettingController extends JeecgController<AiragChatsetting
public Result<Map<String, Object>> getConfigData(AiragChatsetting airagChatsetting) {
Map<String, Object> result = new HashMap<>();
// 获取配置数据(只取第一条)
AiragChatsetting airagChatsettingConfig = airagChatsettingService.getOne(new QueryWrapper<>());
// 先从Redis获取配置数据
AiragChatsetting airagChatsettingConfig = redisChatSetService.getChatSetting();
// 如果Redis中没有,则从数据库查询并存入Redis
if (airagChatsettingConfig == null) {
airagChatsettingConfig = airagChatsettingService.getOne(new QueryWrapper<>());
if (airagChatsettingConfig != null) {
// 存入Redis
redisChatSetService.saveChatSetting(airagChatsettingConfig);
} else {
airagChatsettingConfig = new AiragChatsetting();
}
}
// 处理按钮ID为数组
if (StringUtils.isNotBlank(airagChatsettingConfig.getButtonId())) {
airagChatsettingConfig.setButtonIds(Arrays.asList(airagChatsettingConfig.getButtonId().split(",")));
}
// 直接查询选项数据
result.put("airagChatsettingConfig", airagChatsettingConfig);
result.put("embeddingOptions", getModelOptions("EMBED"));
result.put("llmOptions", getModelOptions("LLM"));
... ... @@ -160,18 +170,18 @@ public class AiragChatsettingController extends JeecgController<AiragChatsetting
config.setButtonId(null);
}
if(StringUtils.isNotBlank(config.getId())){
// 数据库操作
if(StringUtils.isNotBlank(config.getId())) {
airagChatsettingService.updateById(config);
return Result.OK("更新成功!");
}else{
if(airagChatsettingService.list().isEmpty()){
return Result.OK("只需要一条配置信息");
}
} else {
config.setId(UUID.randomUUID().toString());
airagChatsettingService.save(config);
return Result.OK("创建成功!");
}
// 更新Redis缓存(无论新增还是修改都同步)
redisChatSetService.saveChatSetting(config);
return Result.OK(StringUtils.isNotBlank(config.getId()) ? "更新成功!" : "创建成功!");
}
}
... ...
... ... @@ -32,7 +32,7 @@ public class AiragLog implements Serializable {
/**
* 主键
*/
@TableId(type = IdType.ASSIGN_ID)
@TableId(type = IdType.AUTO)
@Schema(description = "主键")
private String id;
/**
... ...
package org.jeecg.modules.airag.app.service;
import lombok.extern.log4j.Log4j2;
import org.jeecg.modules.airag.airagchatsetting.entity.AiragChatsetting;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
@Service
@Log4j2
public class RedisChatSetService {
private static final String CHAT_SETTING_KEY = "airag:chat:setting";
@Autowired
private RedisTemplate<String, Object> redisTemplate;
// 存值
public void saveChatSetting(AiragChatsetting setting) {
redisTemplate.opsForValue().set(CHAT_SETTING_KEY, setting);
log.info("储存/更新配置成功:{}" , setting);
}
// 取值
public AiragChatsetting getChatSetting() {
AiragChatsetting chatsetting = (AiragChatsetting) redisTemplate.opsForValue().get(CHAT_SETTING_KEY);
log.info("获取配置成功:{}" , chatsetting);
return chatsetting;
}
}
\ No newline at end of file
... ...
package org.jeecg.modules.airag.app.timer;
import lombok.extern.log4j.Log4j2;
import org.jeecg.modules.airag.airagchatsetting.entity.AiragChatsetting;
import org.jeecg.modules.airag.airagchatsetting.service.IAiragChatsettingService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
@Component
@Log4j2
public class TimeTask {
@Autowired
private IAiragChatsettingService airagChatsettingService;
@Autowired
private RedisTemplate<String, Object> redisTemplate;
private static final String CHAT_SETTING_KEY = "airag:chat:setting";
@PostConstruct
public void chatSetting() {
AiragChatsetting chatsetting = airagChatsettingService.getOne(null);
if (chatsetting != null) {
redisTemplate.opsForValue().set(CHAT_SETTING_KEY, chatsetting);
log.info("加载智能助手配置成功: {}", chatsetting);
} else {
log.info("加载智能助手配置失败: {}", chatsetting);
}
}
}
... ...