refactor(core): use chat message user IDs for single-user check in

`MemorySelector`
This commit is contained in:
2026-03-02 20:34:16 +08:00
parent fe8031d9ac
commit 868b17b56b

View File

@@ -5,6 +5,7 @@ import lombok.Data;
import lombok.EqualsAndHashCode;
import work.slhaf.partner.api.agent.factory.capability.annotation.InjectCapability;
import work.slhaf.partner.api.agent.factory.component.annotation.InjectModule;
import work.slhaf.partner.api.chat.constant.ChatConstant;
import work.slhaf.partner.core.cognation.CognationCapability;
import work.slhaf.partner.core.memory.MemoryCapability;
import work.slhaf.partner.core.memory.exception.UnExistedDateIndexException;
@@ -23,6 +24,8 @@ import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowCon
import java.time.LocalDate;
import java.util.*;
import static work.slhaf.partner.common.util.ExtractUtil.extractUserId;
@EqualsAndHashCode(callSuper = true)
@Data
public class MemorySelector extends PreRunningAbstractAgentModuleAbstract {
@@ -130,7 +133,7 @@ public class MemorySelector extends PreRunningAbstractAgentModuleAbstract {
map.put("[记忆缓存] <你最近两日和所有聊天者的对话记忆印象>", dialogMapStr);
}
String userDialogMapStr = memoryCapability.getUserDialogMapStr(userId);
if (userDialogMapStr != null && !userDialogMapStr.isEmpty() && !cognationCapability.isSingleUser()) {
if (userDialogMapStr != null && !userDialogMapStr.isEmpty() && !isSingleUser()) {
map.put("[用户记忆缓存] <与最新一条消息的发送者的近两天对话记忆印象, 可能与[记忆缓存]稍有重复>", userDialogMapStr);
}
String sliceStr = memoryCapability.getActivatedSlicesStr(userId);
@@ -140,6 +143,22 @@ public class MemorySelector extends PreRunningAbstractAgentModuleAbstract {
return map;
}
// TODO 本次重构暂时仅以 chatMessages 用作判定基准,原实现额外结合了近两日的对话缓存(但缓存结构的引用确实存在问题)
private boolean isSingleUser() {
Set<String> userIdSet = new HashSet<>();
cognationCapability.getChatMessages().forEach(m -> {
if (m.getRole().equals(ChatConstant.Character.ASSISTANT)) {
return;
}
String userId = extractUserId(m.getContent());
if (userId == null || userId.isEmpty()) {
return;
}
userIdSet.add(userId);
});
return userIdSet.size() <= 1;
}
@Override
public int order() {
return 2;