refactor(memory): compute memory slice in MemoryCore

This commit is contained in:
2026-04-07 17:13:51 +08:00
parent 6fd12cd19f
commit b80ff8400c
3 changed files with 22 additions and 6 deletions

View File

@@ -3,18 +3,20 @@ package work.slhaf.partner.core.memory;
import work.slhaf.partner.core.memory.pojo.MemorySlice; import work.slhaf.partner.core.memory.pojo.MemorySlice;
import work.slhaf.partner.core.memory.pojo.MemoryUnit; import work.slhaf.partner.core.memory.pojo.MemoryUnit;
import work.slhaf.partner.framework.agent.factory.capability.annotation.Capability; import work.slhaf.partner.framework.agent.factory.capability.annotation.Capability;
import work.slhaf.partner.framework.agent.model.pojo.Message;
import java.util.Collection; import java.util.Collection;
import java.util.List;
@Capability(value = "memory") @Capability(value = "memory")
public interface MemoryCapability { public interface MemoryCapability {
void saveMemoryUnit(MemoryUnit memoryUnit);
MemoryUnit getMemoryUnit(String unitId); MemoryUnit getMemoryUnit(String unitId);
MemorySlice getMemorySlice(String unitId, String sliceId); MemorySlice getMemorySlice(String unitId, String sliceId);
MemoryUnit updateMemoryUnit(List<Message> chatMessages, String summary);
Collection<MemoryUnit> listMemoryUnits(); Collection<MemoryUnit> listMemoryUnits();
void refreshMemorySession(); void refreshMemorySession();

View File

@@ -8,6 +8,7 @@ import work.slhaf.partner.core.memory.pojo.MemorySlice;
import work.slhaf.partner.core.memory.pojo.MemoryUnit; import work.slhaf.partner.core.memory.pojo.MemoryUnit;
import work.slhaf.partner.framework.agent.factory.capability.annotation.CapabilityCore; import work.slhaf.partner.framework.agent.factory.capability.annotation.CapabilityCore;
import work.slhaf.partner.framework.agent.factory.capability.annotation.CapabilityMethod; import work.slhaf.partner.framework.agent.factory.capability.annotation.CapabilityMethod;
import work.slhaf.partner.framework.agent.model.pojo.Message;
import work.slhaf.partner.framework.agent.state.State; import work.slhaf.partner.framework.agent.state.State;
import work.slhaf.partner.framework.agent.state.StateSerializable; import work.slhaf.partner.framework.agent.state.StateSerializable;
import work.slhaf.partner.framework.agent.state.StateValue; import work.slhaf.partner.framework.agent.state.StateValue;
@@ -33,11 +34,25 @@ public class MemoryCore implements StateSerializable {
} }
@CapabilityMethod @CapabilityMethod
public void saveMemoryUnit(MemoryUnit memoryUnit) { public MemoryUnit updateMemoryUnit(List<Message> chatMessages, String summary) {
memoryLock.lock(); memoryLock.lock();
try { try {
normalizeMemoryUnit(memoryUnit); MemoryUnit unit = getMemoryUnit(memorySessionId);
memoryUnits.put(memoryUnit.getId(), memoryUnit); unit.updateTimestamp();
List<Message> conversationMessages = unit.getConversationMessages();
int startIndex = conversationMessages.size();
MemorySlice memorySlice = new MemorySlice(
startIndex,
startIndex + chatMessages.size(),
summary
);
conversationMessages.addAll(chatMessages);
unit.getSlices().add(memorySlice);
return unit;
} finally { } finally {
memoryLock.unlock(); memoryLock.unlock();
} }

View File

@@ -78,7 +78,6 @@ public class MemoryRuntime extends AbstractAgentModule.Standalone {
} }
public void recordMemory(MemoryUnit memoryUnit, String topicPath, List<String> relatedTopicPaths) { public void recordMemory(MemoryUnit memoryUnit, String topicPath, List<String> relatedTopicPaths) {
memoryCapability.saveMemoryUnit(memoryUnit);
MemorySlice memorySlice = memoryUnit.getSlices().getLast(); MemorySlice memorySlice = memoryUnit.getSlices().getLast();
SliceRef sliceRef = new SliceRef(memoryUnit.getId(), memorySlice.getId()); SliceRef sliceRef = new SliceRef(memoryUnit.getId(), memorySlice.getId());
indexMemoryUnit(memoryUnit); indexMemoryUnit(memoryUnit);