parent
fa03927579
commit
fede04c70d
@ -0,0 +1,62 @@
|
|||||||
|
package cn.teammodel.ai.cache;
|
||||||
|
|
||||||
|
import cn.hutool.cache.CacheUtil;
|
||||||
|
import cn.hutool.cache.impl.TimedCache;
|
||||||
|
import cn.hutool.core.collection.ListUtil;
|
||||||
|
import cn.teammodel.model.entity.ai.ChatSession.Message;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.commons.lang3.ObjectUtils;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 聊天记录上下文的缓存
|
||||||
|
* @author winter
|
||||||
|
* @create 2023-12-20 11:02
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public class HistoryCache {
|
||||||
|
private static TimedCache<Object, Object> HISTORY;
|
||||||
|
private static Integer contextSize = 3;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 初始化缓存
|
||||||
|
*/
|
||||||
|
public static void init(Long timeout, Integer contextNum) {
|
||||||
|
contextSize = contextNum;
|
||||||
|
HISTORY = CacheUtil.newTimedCache(timeout);
|
||||||
|
// 一分钟清理一次
|
||||||
|
HISTORY.schedulePrune(60 * 1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<Message> getContext(String sessionId) {
|
||||||
|
return (List<Message>) HISTORY.get(sessionId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void putContext(String sessionId, List<Message> context) {
|
||||||
|
HISTORY.put(sessionId, context);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void removeContext(String sessionId) {
|
||||||
|
HISTORY.remove(sessionId);}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新上下文, 保证上下文的数量在 contextSize 之内
|
||||||
|
*/
|
||||||
|
public static void updateContext(String sessionId, Message message) {
|
||||||
|
List<Message> messages = (List<Message>)HISTORY.get(sessionId);
|
||||||
|
|
||||||
|
if (ObjectUtils.isEmpty(messages)) {
|
||||||
|
List<Message> context = ListUtil.of(message);
|
||||||
|
HISTORY.put(sessionId, context);
|
||||||
|
} else if (messages.size() >= contextSize) {
|
||||||
|
// 队列
|
||||||
|
messages.remove(0);
|
||||||
|
messages.add(message);
|
||||||
|
} else {
|
||||||
|
messages.add(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in new issue