(improvement)(Chat) Optimize memory management (#1741)

Co-authored-by: lxwcodemonkey
This commit is contained in:
LXW
2024-09-29 17:13:06 +08:00
committed by GitHub
parent 23f29fee3e
commit 6c2553ab8f
6 changed files with 45 additions and 3 deletions

View File

@@ -26,4 +26,11 @@ public class ChatMemoryFilter {
private MemoryReviewResult llmReviewRet;
private MemoryReviewResult humanReviewRet;
private String sort = "desc";
private String orderCondition;
public boolean isAsc() {
return "asc".equalsIgnoreCase(sort);
}
}

View File

@@ -10,6 +10,8 @@ public interface ChatMemoryRepository {
void updateMemory(ChatMemoryDO chatMemoryDO);
void batchDelete(List<Long> ids);
ChatMemoryDO getMemory(Long id);
List<ChatMemoryDO> getMemories(QueryWrapper<ChatMemoryDO> queryWrapper);

View File

@@ -8,6 +8,7 @@ import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Repository;
import java.util.List;
import org.springframework.util.CollectionUtils;
@Repository
@Primary
@@ -29,6 +30,17 @@ public class ChatMemoryRepositoryImpl implements ChatMemoryRepository {
chatMemoryMapper.updateById(chatMemoryDO);
}
@Override
public void batchDelete(List<Long> ids) {
if (CollectionUtils.isEmpty(ids)) {
return;
}
for (Long id : ids) {
chatMemoryMapper.deleteById(id);
}
}
@Override
public ChatMemoryDO getMemory(Long id) {
return chatMemoryMapper.selectById(id);

View File

@@ -1,8 +1,5 @@
package com.tencent.supersonic.chat.server.rest;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.github.pagehelper.PageInfo;
import com.tencent.supersonic.auth.api.authentication.pojo.User;
import com.tencent.supersonic.auth.api.authentication.utils.UserHolder;
@@ -10,6 +7,9 @@ import com.tencent.supersonic.chat.api.pojo.request.ChatMemoryUpdateReq;
import com.tencent.supersonic.chat.api.pojo.request.PageMemoryReq;
import com.tencent.supersonic.chat.server.persistence.dataobject.ChatMemoryDO;
import com.tencent.supersonic.chat.server.service.MemoryService;
import com.tencent.supersonic.headless.api.pojo.request.MetaBatchReq;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@@ -36,4 +36,10 @@ public class MemoryController {
public PageInfo<ChatMemoryDO> pageMemories(@RequestBody PageMemoryReq pageMemoryReq) {
return memoryService.pageMemories(pageMemoryReq);
}
@PostMapping("batchDelete")
public Boolean batchDelete(@RequestBody MetaBatchReq metaBatchReq) {
memoryService.batchDelete(metaBatchReq.getIds());
return true;
}
}

View File

@@ -20,6 +20,8 @@ public interface MemoryService {
void disableMemory(ChatMemoryDO memory);
void batchDelete(List<Long> ids);
PageInfo<ChatMemoryDO> pageMemories(PageMemoryReq pageMemoryReq);
List<ChatMemoryDO> getMemories(ChatMemoryFilter chatMemoryFilter);

View File

@@ -55,8 +55,16 @@ public class MemoryServiceImpl implements MemoryService {
chatMemoryRepository.updateMemory(memory);
}
@Override
public void batchDelete(List<Long> ids) {
chatMemoryRepository.batchDelete(ids);
}
@Override
public PageInfo<ChatMemoryDO> pageMemories(PageMemoryReq pageMemoryReq) {
ChatMemoryFilter chatMemoryFilter = pageMemoryReq.getChatMemoryFilter();
chatMemoryFilter.setSort(pageMemoryReq.getSort());
chatMemoryFilter.setOrderCondition(pageMemoryReq.getOrderCondition());
return PageHelper.startPage(pageMemoryReq.getCurrent(), pageMemoryReq.getPageSize())
.doSelectPageInfo(() -> getMemories(pageMemoryReq.getChatMemoryFilter()));
}
@@ -86,6 +94,11 @@ public class MemoryServiceImpl implements MemoryService {
.lambda()
.eq(ChatMemoryDO::getLlmReviewRet, chatMemoryFilter.getLlmReviewRet());
}
if (StringUtils.isBlank(chatMemoryFilter.getOrderCondition())) {
queryWrapper.orderByDesc("id");
} else {
queryWrapper.orderBy(true, chatMemoryFilter.isAsc(), chatMemoryFilter.getOrderCondition());
}
return chatMemoryRepository.getMemories(queryWrapper);
}