diff --git a/Partner-Core/src/main/java/work/slhaf/partner/core/perceive/PerceiveCapability.java b/Partner-Core/src/main/java/work/slhaf/partner/core/perceive/PerceiveCapability.java index eac9deea..e0a40965 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/core/perceive/PerceiveCapability.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/core/perceive/PerceiveCapability.java @@ -1,18 +1,9 @@ package work.slhaf.partner.core.perceive; import work.slhaf.partner.api.agent.factory.capability.annotation.Capability; -import work.slhaf.partner.core.perceive.pojo.User; @Capability(value = "perceive") public interface PerceiveCapability { - User getUser(String userInfo, String client); - - User getUser(String id); - - User addUser(String userInfo, String platform, String userNickName); - - void updateUser(User user); - String refreshInteract(); long showLastInteract(); diff --git a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/perceive/updater/PerceiveUpdater.java b/Partner-Core/src/main/java/work/slhaf/partner/module/modules/perceive/updater/PerceiveUpdater.java deleted file mode 100644 index 2111e637..00000000 --- a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/perceive/updater/PerceiveUpdater.java +++ /dev/null @@ -1,91 +0,0 @@ -package work.slhaf.partner.module.modules.perceive.updater; - -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.Init; -import work.slhaf.partner.api.agent.factory.component.annotation.InjectModule; -import work.slhaf.partner.common.thread.InteractionThreadPoolExecutor; -import work.slhaf.partner.core.cognation.CognationCapability; -import work.slhaf.partner.core.perceive.PerceiveCapability; -import work.slhaf.partner.core.perceive.pojo.User; -import work.slhaf.partner.module.common.module.PostRunningAgentModule; -import work.slhaf.partner.module.modules.perceive.updater.relation_extractor.RelationExtractor; -import work.slhaf.partner.module.modules.perceive.updater.relation_extractor.entity.RelationExtractResult; -import work.slhaf.partner.module.modules.perceive.updater.static_extractor.StaticMemoryExtractor; -import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.concurrent.Callable; -import java.util.concurrent.locks.ReentrantLock; - -/** - * 感知更新,异步 - */ -@EqualsAndHashCode(callSuper = true) -@Data -public class PerceiveUpdater extends PostRunningAgentModule { - @InjectCapability - private PerceiveCapability perceiveCapability; - @InjectCapability - private CognationCapability cognationCapability; - @InjectModule - private RelationExtractor relationExtractor; - @InjectModule - private StaticMemoryExtractor staticMemoryExtractor; - private InteractionThreadPoolExecutor executor; - - @Init - public void init() { - this.executor = InteractionThreadPoolExecutor.getInstance(); - } - - @Override - public void doExecute(PartnerRunningFlowContext context) { - executor.execute(() -> { - ReentrantLock userLock = new ReentrantLock(); - User user = new User(); - user.setUuid(context.getSource()); - List> tasks = new ArrayList<>(); - tasks.add(() -> { - runStaticExtractorAction(context, userLock, user); - return null; - }); - tasks.add(() -> { - runRelationExtractorAction(context, userLock, user); - return null; - }); - executor.invokeAll(tasks); - perceiveCapability.updateUser(user); - }); - } - - @Override - protected boolean relyOnMessage() { - return true; - } - - private void runRelationExtractorAction(PartnerRunningFlowContext context, ReentrantLock userLock, User user) { - RelationExtractResult relationExtractResult = relationExtractor.execute(context); - userLock.lock(); - user.setRelation(relationExtractResult.getRelation()); - user.setImpressions(relationExtractResult.getImpressions()); - user.setAttitude(relationExtractResult.getAttitude()); - user.updateRelationChange(relationExtractResult.getRelationChangeHistory()); - userLock.unlock(); - } - - private void runStaticExtractorAction(PartnerRunningFlowContext context, ReentrantLock userLock, User user) { - HashMap newStaticMemory = staticMemoryExtractor.execute(context); - userLock.lock(); - user.setStaticMemory(newStaticMemory); - userLock.unlock(); - } - - @Override - public int order() { - return 7; - } -} diff --git a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/perceive/updater/relation_extractor/RelationExtractor.java b/Partner-Core/src/main/java/work/slhaf/partner/module/modules/perceive/updater/relation_extractor/RelationExtractor.java deleted file mode 100644 index 8d525aed..00000000 --- a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/perceive/updater/relation_extractor/RelationExtractor.java +++ /dev/null @@ -1,75 +0,0 @@ -package work.slhaf.partner.module.modules.perceive.updater.relation_extractor; - -import com.alibaba.fastjson2.JSONObject; -import lombok.Data; -import lombok.EqualsAndHashCode; -import work.slhaf.partner.api.agent.factory.capability.annotation.InjectCapability; -import work.slhaf.partner.api.agent.factory.component.abstracts.AbstractAgentModule; -import work.slhaf.partner.api.agent.factory.component.abstracts.ActivateModel; -import work.slhaf.partner.api.chat.pojo.Message; -import work.slhaf.partner.core.cognation.CognationCapability; -import work.slhaf.partner.core.perceive.PerceiveCapability; -import work.slhaf.partner.core.perceive.pojo.User; -import work.slhaf.partner.module.modules.perceive.updater.relation_extractor.entity.RelationExtractInput; -import work.slhaf.partner.module.modules.perceive.updater.relation_extractor.entity.RelationExtractResult; -import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -@EqualsAndHashCode(callSuper = true) -@Data -public class RelationExtractor extends AbstractAgentModule.Sub implements ActivateModel { - @InjectCapability - private CognationCapability cognationCapability; - @InjectCapability - private PerceiveCapability perceiveCapability; - private List tempMessages; - - @Override - public RelationExtractResult execute(PartnerRunningFlowContext context) { - tempMessages = new ArrayList<>(cognationCapability.getChatMessages()); - String userId = context.getSource(); - RelationExtractInput input = getRelationInput(userId); - RelationExtractResult relationExtractResult = getRelationResult(input); - User user = getTempUser(context, relationExtractResult); - perceiveCapability.updateUser(user); - return relationExtractResult; - } - - private User getTempUser(PartnerRunningFlowContext context, RelationExtractResult relationExtractResult) { - User user = new User(); - user.setUuid(context.getSource()); - user.setRelation(relationExtractResult.getRelation()); - user.setImpressions(relationExtractResult.getImpressions()); - user.setAttitude(relationExtractResult.getAttitude()); - return user; - } - - private RelationExtractResult getRelationResult(RelationExtractInput input) { - return formattedChat( - List.of(new Message(Message.Character.USER, JSONObject.toJSONString(input))), - RelationExtractResult.class - ); - } - - private RelationExtractInput getRelationInput(String userId) { - HashMap map = new HashMap<>(); - User user = perceiveCapability.getUser(userId); - map.put("[用户昵称] <用户的昵称信息>", user.getNickName()); - map.put("[关系] <你与用户的关系>", user.getRelation()); - map.put("[态度] <你对于用户的态度>", user.getAttitude().toString()); - map.put("[印象] <你对于用户的印象>", user.getImpressions().toString()); - map.put("[静态记忆] <你对该用户的事实性记忆>", user.getStaticMemory().toString()); - RelationExtractInput input = new RelationExtractInput(); - input.setPrimaryUserPerceive(map); - input.setChatMessages(tempMessages); - return input; - } - - @Override - public String modelKey() { - return "relation_extractor"; - } -} diff --git a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/perceive/updater/relation_extractor/entity/RelationExtractInput.java b/Partner-Core/src/main/java/work/slhaf/partner/module/modules/perceive/updater/relation_extractor/entity/RelationExtractInput.java deleted file mode 100644 index 36eb1aa5..00000000 --- a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/perceive/updater/relation_extractor/entity/RelationExtractInput.java +++ /dev/null @@ -1,13 +0,0 @@ -package work.slhaf.partner.module.modules.perceive.updater.relation_extractor.entity; - -import lombok.Data; -import work.slhaf.partner.api.chat.pojo.Message; - -import java.util.HashMap; -import java.util.List; - -@Data -public class RelationExtractInput { - private HashMap primaryUserPerceive; - private List chatMessages; -} diff --git a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/perceive/updater/relation_extractor/entity/RelationExtractResult.java b/Partner-Core/src/main/java/work/slhaf/partner/module/modules/perceive/updater/relation_extractor/entity/RelationExtractResult.java deleted file mode 100644 index 286820ba..00000000 --- a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/perceive/updater/relation_extractor/entity/RelationExtractResult.java +++ /dev/null @@ -1,13 +0,0 @@ -package work.slhaf.partner.module.modules.perceive.updater.relation_extractor.entity; - -import lombok.Data; - -import java.util.List; - -@Data -public class RelationExtractResult { - private String relation; - private List impressions; - private List attitude; - private String relationChangeHistory; -} diff --git a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/perceive/updater/static_extractor/StaticMemoryExtractor.java b/Partner-Core/src/main/java/work/slhaf/partner/module/modules/perceive/updater/static_extractor/StaticMemoryExtractor.java deleted file mode 100644 index c2fb700c..00000000 --- a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/perceive/updater/static_extractor/StaticMemoryExtractor.java +++ /dev/null @@ -1,45 +0,0 @@ -package work.slhaf.partner.module.modules.perceive.updater.static_extractor; - -import cn.hutool.json.JSONUtil; -import com.alibaba.fastjson2.JSONObject; -import lombok.Data; -import lombok.EqualsAndHashCode; -import work.slhaf.partner.api.agent.factory.capability.annotation.InjectCapability; -import work.slhaf.partner.api.agent.factory.component.abstracts.AbstractAgentModule; -import work.slhaf.partner.api.agent.factory.component.abstracts.ActivateModel; -import work.slhaf.partner.api.chat.pojo.Message; -import work.slhaf.partner.core.cognation.CognationCapability; -import work.slhaf.partner.core.perceive.PerceiveCapability; -import work.slhaf.partner.module.modules.perceive.updater.static_extractor.entity.StaticMemoryExtractInput; -import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext; - -import java.util.HashMap; -import java.util.List; - -@EqualsAndHashCode(callSuper = true) -@Data -public class StaticMemoryExtractor extends AbstractAgentModule.Sub> implements ActivateModel { - @InjectCapability - private CognationCapability cognationCapability; - @InjectCapability - private PerceiveCapability perceiveCapability; - - @Override - public HashMap execute(PartnerRunningFlowContext context) { - StaticMemoryExtractInput input = StaticMemoryExtractInput.builder() - .userId(context.getSource()) - .messages(cognationCapability.getChatMessages()) - .existedStaticMap(perceiveCapability.getUser(context.getSource()).getStaticMemory()) - .build(); - String response = chat(List.of(new Message(Message.Character.USER, JSONUtil.toJsonPrettyStr(input)))); - JSONObject jsonObject = JSONObject.parseObject(response); - HashMap result = new HashMap<>(); - jsonObject.forEach((k, v) -> result.put(k, (String) v)); - return result; - } - - @Override - public String modelKey() { - return "static_extractor"; - } -} diff --git a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/perceive/updater/static_extractor/entity/StaticMemoryExtractInput.java b/Partner-Core/src/main/java/work/slhaf/partner/module/modules/perceive/updater/static_extractor/entity/StaticMemoryExtractInput.java deleted file mode 100644 index 846e1804..00000000 --- a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/perceive/updater/static_extractor/entity/StaticMemoryExtractInput.java +++ /dev/null @@ -1,16 +0,0 @@ -package work.slhaf.partner.module.modules.perceive.updater.static_extractor.entity; - -import lombok.Builder; -import lombok.Data; -import work.slhaf.partner.api.chat.pojo.Message; - -import java.util.List; -import java.util.Map; - -@Data -@Builder -public class StaticMemoryExtractInput { - private String userId; - private List messages; - private Map existedStaticMap; -} diff --git a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/process/PreprocessExecutor.java b/Partner-Core/src/main/java/work/slhaf/partner/module/modules/process/PreprocessExecutor.java deleted file mode 100644 index 20c7919b..00000000 --- a/Partner-Core/src/main/java/work/slhaf/partner/module/modules/process/PreprocessExecutor.java +++ /dev/null @@ -1,59 +0,0 @@ -package work.slhaf.partner.module.modules.process; - -import lombok.Data; -import lombok.EqualsAndHashCode; -import work.slhaf.partner.api.agent.factory.capability.annotation.InjectCapability; -import work.slhaf.partner.api.agent.factory.component.abstracts.AbstractAgentModule; -import work.slhaf.partner.core.cognation.CognationCapability; -import work.slhaf.partner.core.memory.MemoryCapability; -import work.slhaf.partner.core.perceive.PerceiveCapability; -import work.slhaf.partner.core.perceive.pojo.User; -import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext; - -@EqualsAndHashCode(callSuper = true) -@Data -public class PreprocessExecutor extends AbstractAgentModule.Running { - private static final String INFO_PLATFORM = "platform"; - private static final String INFO_NICKNAME = "nickname"; - - @InjectCapability - private CognationCapability cognationCapability; - @InjectCapability - private MemoryCapability memoryCapability; - @InjectCapability - private PerceiveCapability perceiveCapability; - - @Override - public void execute(PartnerRunningFlowContext context) { - getInteractionContext(context); - } - - - private void getInteractionContext(PartnerRunningFlowContext context) { - log.debug("[PreprocessExecutor] 预处理原始输入: {}", context); - String platform = context.getAdditionalUserInfo().getOrDefault(INFO_PLATFORM, ""); - String nickName = context.getAdditionalUserInfo().getOrDefault(INFO_NICKNAME, ""); - String sourceUserId = parseSourceUserId(context.getSource()); - User user = perceiveCapability.getUser(sourceUserId, platform); - if (user == null) { - user = perceiveCapability.addUser(sourceUserId, platform, nickName); - } - String userId = user.getUuid(); - String userStr = "[" + nickName + "(" + userId + ")]"; - log.debug("[PreprocessExecutor] 已识别用户: {} {}", userStr, context.getSource()); - log.debug("[PreprocessExecutor] 预处理结果: {}", context); - } - - private String parseSourceUserId(String source) { - int split = source.indexOf(':'); - if (split < 0 || split + 1 >= source.length()) { - return source; - } - return source.substring(split + 1).trim(); - } - - @Override - public int order() { - return 1; - } -}