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记录上下文

相关推荐
欣欣之王来了1 小时前
国外主流大模型深度对比:GPT、Claude、Gemini技术细节与实战选型指南
人工智能·ai·大模型
MicrosoftReactor1 小时前
技术速递|使用 GitHub Security Lab Taskflow Agent 实现 AI 驱动的模糊测试
人工智能·ai·github·copilot·agent·模糊测试·ai-agent
wang_yb2 小时前
Scikit-Learn实战:5步搞定PCA降维
ai·databook
Anastasiozzzz2 小时前
深度拆解 Jev 模型:扒开“系统一模型”的底层工作原理
ai·语言模型
codigger2 小时前
Redis 正式接入 AI:当"最懂速度的数据库"开始解决"记忆问题"
redis·分布式·后端·ai·向量检索
七夜zippoe2 小时前
Agent 编排引擎设计:任务 DAG、条件分支与循环控制
ai·agent·循环控制·条件分支·任务dag
涛思数据(TDengine)2 小时前
栖息地 AI 超恒气候系统用 TDengine 支撑全屋环境品质实时监测与历史追溯
人工智能·ai·时序数据库·tdengine·工业ai
ndsc_d2 小时前
2026年有哪些好用的AI UI设计工具?主流工具功能和适用场景对比
前端·人工智能·ui·ai·设计师·ai ui·ai ui工具
ofoxcoding3 小时前
借助 CLAUDE.md 约束 Sonnet 5.5 多文件重构行为的提示词实践
大数据·elasticsearch·ai·重构
c萱3 小时前
AI产品经理——04RAG 检索增强生成
ai·aigc·产品经理·ai编程·ai-native