mirror of
https://github.com/slhaf/Partner.git
synced 2026-05-12 08:43:02 +08:00
refactor(core): use chat message user IDs for single-user check in
`MemorySelector`
This commit is contained in:
@@ -5,6 +5,7 @@ import lombok.Data;
|
|||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
import work.slhaf.partner.api.agent.factory.capability.annotation.InjectCapability;
|
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.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.cognation.CognationCapability;
|
||||||
import work.slhaf.partner.core.memory.MemoryCapability;
|
import work.slhaf.partner.core.memory.MemoryCapability;
|
||||||
import work.slhaf.partner.core.memory.exception.UnExistedDateIndexException;
|
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.time.LocalDate;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
|
import static work.slhaf.partner.common.util.ExtractUtil.extractUserId;
|
||||||
|
|
||||||
@EqualsAndHashCode(callSuper = true)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@Data
|
@Data
|
||||||
public class MemorySelector extends PreRunningAbstractAgentModuleAbstract {
|
public class MemorySelector extends PreRunningAbstractAgentModuleAbstract {
|
||||||
@@ -130,7 +133,7 @@ public class MemorySelector extends PreRunningAbstractAgentModuleAbstract {
|
|||||||
map.put("[记忆缓存] <你最近两日和所有聊天者的对话记忆印象>", dialogMapStr);
|
map.put("[记忆缓存] <你最近两日和所有聊天者的对话记忆印象>", dialogMapStr);
|
||||||
}
|
}
|
||||||
String userDialogMapStr = memoryCapability.getUserDialogMapStr(userId);
|
String userDialogMapStr = memoryCapability.getUserDialogMapStr(userId);
|
||||||
if (userDialogMapStr != null && !userDialogMapStr.isEmpty() && !cognationCapability.isSingleUser()) {
|
if (userDialogMapStr != null && !userDialogMapStr.isEmpty() && !isSingleUser()) {
|
||||||
map.put("[用户记忆缓存] <与最新一条消息的发送者的近两天对话记忆印象, 可能与[记忆缓存]稍有重复>", userDialogMapStr);
|
map.put("[用户记忆缓存] <与最新一条消息的发送者的近两天对话记忆印象, 可能与[记忆缓存]稍有重复>", userDialogMapStr);
|
||||||
}
|
}
|
||||||
String sliceStr = memoryCapability.getActivatedSlicesStr(userId);
|
String sliceStr = memoryCapability.getActivatedSlicesStr(userId);
|
||||||
@@ -140,6 +143,22 @@ public class MemorySelector extends PreRunningAbstractAgentModuleAbstract {
|
|||||||
return map;
|
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
|
@Override
|
||||||
public int order() {
|
public int order() {
|
||||||
return 2;
|
return 2;
|
||||||
|
|||||||
Reference in New Issue
Block a user