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

相关推荐
云烟成雨TD5 小时前
LlamaIndex 系列【31】检索增强策略:命名实体识别(NER)
ai·agent·rag·llamaindex
2601_954811826 小时前
AI科学实验室自律系统:闭环自动化与智能实验设计技术路径 — 自动化技术
ai
2601_954811827 小时前
AI智能教育多智能体协同:备教辅全链路架构实现 — 技术架构
ai
Java后端的Ai之路7 小时前
Python进阶探索17 - Python中的深拷贝与浅拷贝
人工智能·python·ai·浅拷贝·深拷贝
龙智DevSecOps解决方案8 小时前
AI驱动的知识管理指南:基于Atlassian Intelligence、Rovo、Teamwork Collection打造团队知识引擎
ai·atlassian·需求管理·团队协作·知识管理
李燚8 小时前
Agent 要用 API key,但明文一次都不能进模型——Secret Runtime 落地实录(第110篇)
ai·agent·credential·secret·eino·deepflux·secret runtime
奇牙coding8 小时前
gpt-5.6-luna 接入踩坑实录:model_not_found 排查与 reasoning_summary 字段使用说明
ai
霸道流氓气质8 小时前
Prompt 工程最佳实践与企业级模板库建设
ai
海带紫菜菠萝汤9 小时前
本周 AI 观察:嘴上喊着降速,手上全踩油门
人工智能·深度学习·ai·开源·大模型
全栈技术负责人9 小时前
让 Agent 动手前先“听懂人话”:意图识别插件的设计与实践
ai·ai编程