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

相关推荐
土星云SaturnCloud12 分钟前
超轻量 OCR 实战:PP-OCR 边缘部署实践
服务器·人工智能·ai·ocr·边缘计算
小江的记录本39 分钟前
【AI Agent】《2026年9月 AI Agent全栈开发技术选型专项面试宝典》
java·spring boot·python·spring·ai·面试·ai编程
心情无变化1 小时前
deepseek harness安装教程
程序人生·ai
CRMEB1 小时前
不懂设计也能有精美商城?CRMEB 主题广场与可视化装修的“千店千面“实操
人工智能·ai·小程序·开源·php
今天测什么2 小时前
零基础教程:用豆包快速生成动漫视频
人工智能·科技·ai·动漫
Jul1en_3 小时前
【Java 脚手架】封装通用工具类-3
java·开发语言·redis·缓存·ai·bootstrap·rabbitmq
VIP_CQCRE3 小时前
在 WorkBuddy 里一键接入 Claude、GPT、Gemini、DeepSeek:Ace Data Cloud 让 AI 模型调用更简单
ai·大模型·openai·workbuddy·ace data cloud
边吃番茄边敲代码3 小时前
从本地工具到 MCP:给 Agent 接入独立工具服务,并补齐自动化测试
人工智能·python·功能测试·ai·单元测试·pytest
菩提小狗3 小时前
每日极客日报 · 2026年08月28日
ai·开源·极客日报·it热点·技术资讯
木圭的AI时代指南4 小时前
我的8G显存电脑实测本地部署qwen3.8-27B记录
人工智能·ai·语言模型·电脑