mirror of
https://github.com/slhaf/Partner.git
synced 2026-05-12 16:53:04 +08:00
refactor(memory): compute memory slice in MemoryCore
This commit is contained in:
@@ -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();
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user