diff --git a/Partner-Core/src/main/java/work/slhaf/partner/core/cognition/CognitionCapability.java b/Partner-Core/src/main/java/work/slhaf/partner/core/cognition/CognitionCapability.java index 8838f532..30bc238b 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/core/cognition/CognitionCapability.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/core/cognition/CognitionCapability.java @@ -2,10 +2,12 @@ package work.slhaf.partner.core.cognition; import org.w3c.dom.Element; import work.slhaf.partner.core.cognition.context.ContextWorkspace; +import work.slhaf.partner.core.cognition.impression.ActiveEntity; import work.slhaf.partner.framework.agent.factory.capability.annotation.Capability; import work.slhaf.partner.framework.agent.model.pojo.Message; import java.util.List; +import java.util.Set; import java.util.concurrent.locks.Lock; @Capability("cognition") @@ -27,4 +29,6 @@ public interface CognitionCapability { Lock getMessageLock(); + Set projectEntity(String input); + } diff --git a/Partner-Core/src/main/java/work/slhaf/partner/module/impression/ImpressionRecaller.java b/Partner-Core/src/main/java/work/slhaf/partner/module/impression/ImpressionRecaller.java new file mode 100644 index 00000000..ad59394b --- /dev/null +++ b/Partner-Core/src/main/java/work/slhaf/partner/module/impression/ImpressionRecaller.java @@ -0,0 +1,54 @@ +package work.slhaf.partner.module.impression; + +import lombok.val; +import org.jetbrains.annotations.NotNull; +import work.slhaf.partner.core.cognition.CognitionCapability; +import work.slhaf.partner.core.cognition.context.ContextBlock; +import work.slhaf.partner.framework.agent.factory.capability.annotation.InjectCapability; +import work.slhaf.partner.framework.agent.factory.component.abstracts.AbstractAgentModule; +import work.slhaf.partner.runtime.PartnerRunningFlowContext; + +import java.util.Collection; +import java.util.Set; +import java.util.stream.Collectors; + +public class ImpressionRecaller extends AbstractAgentModule.Running { + + @InjectCapability + private CognitionCapability cognitionCapability; + + /** + * 从交互中积累谈论的内容的特征(证据),基于证据创建 ActiveEntity,然后交给 CognitionCapability 进行投影并更新上下文 + */ + @Override + protected void doExecute(@NotNull PartnerRunningFlowContext context) { + val contextWorkspace = cognitionCapability.contextWorkspace(); + context.getInputs() + .stream() + .map(inputEntry -> { + val content = inputEntry.getContent(); + return cognitionCapability.projectEntity(content); + }) + .flatMap(Collection::stream) + .collect(Collectors.toSet()) + .forEach(activeEntity -> { + contextWorkspace.register(new ContextBlock( + activeEntity, + activeEntity, + activeEntity, + Set.of( + ContextBlock.FocusedDomain.COGNITION, + ContextBlock.FocusedDomain.MEMORY + ), + 100, + 0.5, + 20 + )); + }); + } + + @Override + public int order() { + return 2; + } +}