hazelcast langchain4j 持久化

hazelcast langchain4j 持久化

java 复制代码
hazelcast langchain4j 持久化

package org.folio.rest.util;

import dev.langchain4j.data.message.ChatMessage;
import dev.langchain4j.data.message.ChatMessageDeserializer;
import dev.langchain4j.data.message.ChatMessageSerializer;
import dev.langchain4j.memory.chat.ChatMemoryProvider;
import dev.langchain4j.memory.chat.MessageWindowChatMemory;
import dev.langchain4j.store.memory.chat.ChatMemoryStore;
import com.hazelcast.core.HazelcastInstance;
import com.hazelcast.map.IMap;

import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;

public class HazelcastChatMemoryStore implements ChatMemoryStore {

private final IMap<Object, String> memoryMap;
private final ConcurrentMap<Object, Object> locks = new ConcurrentHashMap<>();

public HazelcastChatMemoryStore(HazelcastInstance hazelcastInstance) {
this.memoryMap = hazelcastInstance.getMap("chat-memories");
}

@Override
public List<ChatMessage> getMessages(Object memoryId) {
String value = memoryMap.get(memoryId);
return ChatMessageDeserializer.messagesFromJson(value);
// return value != null ? ChatMessageDeserializer.messagesFromJson(value) : null;
}

@Override
public void updateMessages(Object memoryId, List<ChatMessage> messages) {
memoryMap.set(memoryId, ChatMessageSerializer.messagesToJson(messages));
}

@Override
public void deleteMessages(Object memoryId) {
memoryMap.delete(memoryId);
locks.remove(memoryId);
}

// 获取锁,用于并发控制
public Object getLock(Object memoryId) {
return locks.computeIfAbsent(memoryId, k -> new Object());
}
}

package org.folio.rest.util;

import dev.langchain4j.data.message.ChatMessage;
import dev.langchain4j.data.message.ChatMessageDeserializer;
import dev.langchain4j.data.message.ChatMessageSerializer;
import dev.langchain4j.memory.chat.ChatMemoryProvider;
import dev.langchain4j.memory.chat.MessageWindowChatMemory;
import dev.langchain4j.store.memory.chat.ChatMemoryStore;
import com.hazelcast.core.HazelcastInstance;
import com.hazelcast.map.IMap;

import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;

public class HazelcastChatMemoryStore implements ChatMemoryStore {

private final IMap<Object, String> memoryMap;
private final ConcurrentMap<Object, Object> locks = new ConcurrentHashMap<>();

public HazelcastChatMemoryStore(HazelcastInstance hazelcastInstance) {
this.memoryMap = hazelcastInstance.getMap("chat-memories");
}

@Override
public List<ChatMessage> getMessages(Object memoryId) {
String value = memoryMap.get(memoryId);
return ChatMessageDeserializer.messagesFromJson(value);
// return value != null ? ChatMessageDeserializer.messagesFromJson(value) : null;
}

@Override
public void updateMessages(Object memoryId, List<ChatMessage> messages) {
memoryMap.set(memoryId, ChatMessageSerializer.messagesToJson(messages));
}

@Override
public void deleteMessages(Object memoryId) {
memoryMap.delete(memoryId);
locks.remove(memoryId);
}

// 获取锁,用于并发控制
public Object getLock(Object memoryId) {
return locks.computeIfAbsent(memoryId, k -> new Object());
}
}

hazlcast记录上下文

相关推荐
xzlAwin37 分钟前
Win10 安装OpenClaw 龙虾
ai·openclaw·龙虾
IDIOT___IDIOT5 小时前
DSH 对话回收站(dsh-session-trash)
ai·dsh
玩AI的奶茶5 小时前
MiniMax H3 出 30 秒长片:显存账、拼接法和一次的成本
大数据·人工智能·ai·gpu算力·算力租赁
犀思云6 小时前
从SD-WAN到AI WAN:企业广域网能力演进与架构变化解读
ai·sd-wan·wan·企业广域网
犀思云7 小时前
AI WAN实践:分布式AI训练与推理如何通过智能广域网提升效率?
ai·wan·分布式ai训练·分布式ai推理·智能广域网
Maynor9967 小时前
ChatGPT Pro 额度档位怎么理解:5x / 20x / 50x 使用笔记
ai·chatgpt·教程
吴名氏.8 小时前
Java转AI Agent教程(第一周)让模型先跑起来
人工智能·python·ai·ai agent
FPGA小迷弟9 小时前
FPGA 与无人机:从飞控实时性到智能载荷的硬件加速实践
人工智能·ai·fpga开发·架构·无人机·ai编程
zhangphil9 小时前
Agent决定做什么,Skill定义怎么做,MCP让它能调用外部能力
ai
玫瑰互动GEO10 小时前
GEM优化广告六要素: 从命名一致到落地页双对齐的工程化落地
人工智能·ai·chatgpt·gem优化