diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/dispatcher/executor/ActionExecutor.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/dispatcher/executor/ActionExecutor.java index e5d143f1..2b06362e 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/dispatcher/executor/ActionExecutor.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/dispatcher/executor/ActionExecutor.java @@ -4,7 +4,6 @@ import lombok.extern.slf4j.Slf4j; import work.slhaf.partner.api.agent.factory.capability.annotation.InjectCapability; import work.slhaf.partner.api.agent.factory.module.annotation.AgentSubModule; import work.slhaf.partner.api.agent.factory.module.annotation.Init; -import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.ActivateModel; import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.AgentRunningSubModule; import work.slhaf.partner.core.action.ActionCapability; import work.slhaf.partner.core.action.ActionCore; @@ -20,7 +19,7 @@ import java.util.concurrent.Phaser; @Slf4j @AgentSubModule -public class ActionExecutor extends AgentRunningSubModule, Void> implements ActivateModel { +public class ActionExecutor extends AgentRunningSubModule, Void> { @InjectCapability private ActionCapability actionCapability; @@ -37,59 +36,49 @@ public class ActionExecutor extends AgentRunningSubModule immediateActions) { for (ImmediateActionData actionData : immediateActions) { - handleActionData(actionData); + virtualExecutor.execute(() -> { + actionData.setStatus(ActionData.ActionStatus.EXECUTING); + Map> actionChain = actionData.getActionChain(); + List virtual = new ArrayList<>(); + List platform = new ArrayList<>(); + Phaser phaser = new Phaser(); + phaser.register(); + actionCapability.putPhaserRecord(phaser, actionData); + List orderList = new ArrayList<>(actionChain.keySet().stream().toList()); + orderList.sort(Integer::compareTo); + try { + for (Integer order : orderList) { + List metaActions = actionChain.get(order); + for (MetaAction metaAction : metaActions) { + // 根据io类型放入合适的列表 + if (metaAction.isIo()) { + virtual.add(metaAction); + } else { + platform.add(metaAction); + } + } + // 使用phaser来承担同组的动态任务新增 + runGroupAction(virtual, virtualExecutor, phaser); + runGroupAction(platform, platformExecutor, phaser); + phaser.arriveAndAwaitAdvance(); + virtual.clear(); + platform.clear(); + } + } finally { + phaser.arriveAndDeregister(); + actionCapability.removePhaserRecord(phaser); + } + }); } return null; } - private void handleActionData(ImmediateActionData actionData) { - virtualExecutor.execute(() -> { - actionData.setStatus(ActionData.ActionStatus.EXECUTING); - Map> actionChain = actionData.getActionChain(); - List virtual = new ArrayList<>(); - List platform = new ArrayList<>(); - Phaser phaser = new Phaser(); - phaser.register(); - actionCapability.putPhaserRecord(phaser, actionData); - List orderList = new ArrayList<>(actionChain.keySet().stream().toList()); - orderList.sort(Integer::compareTo); - try { - for (Integer order : orderList) { - List metaActions = actionChain.get(order); - for (MetaAction metaAction : metaActions) { - // 根据io类型放入合适的列表 - if (metaAction.isIo()) { - virtual.add(metaAction); - } else { - platform.add(metaAction); - } - } - runGroupAction(virtual, platform, phaser); - phaser.arriveAndAwaitAdvance(); - virtual.clear(); - platform.clear(); - } - } finally { - phaser.arriveAndDeregister(); - actionCapability.removePhaserRecord(phaser); - } - }); - - } - - // 使用phaser来承担同组的动态任务新增 - private void runGroupAction(List virtual, List platform, - Phaser phaser) { - runGroupAction(virtual, virtualExecutor, phaser); - runGroupAction(platform, platformExecutor, phaser); - } - private void runGroupAction(List actions, ExecutorService executor, Phaser phaser) { phaser.bulkRegister(actions.size()); for (MetaAction action : actions) { executor.execute(() -> { try { - //TODO 使用 LLM 填充行动参数信息 + //TODO 使用 ParamsExtractor 填充行动参数信息,如果已知内容不足以满足参数需求,则进行行动链调整(ActionRepairer) actionCapability.execute(action); MetaAction.Result result = action.getResult(); @@ -119,14 +108,4 @@ public class ActionExecutor extends AgentRunningSubModule implements ActivateModel { + + @Override + public RepairerResult execute(RepairerInput data) { + return null; + } + + @Override + public String modelKey() { + return ""; + } + + @Override + public boolean withBasicPrompt() { + return false; + } +} diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/dispatcher/executor/DynamicActionGenerator.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/dispatcher/executor/DynamicActionGenerator.java new file mode 100644 index 00000000..770036db --- /dev/null +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/dispatcher/executor/DynamicActionGenerator.java @@ -0,0 +1,29 @@ +package work.slhaf.partner.module.modules.action.dispatcher.executor; + +import work.slhaf.partner.api.agent.factory.module.annotation.AgentSubModule; +import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.ActivateModel; +import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.AgentRunningSubModule; +import work.slhaf.partner.module.modules.action.dispatcher.executor.entity.GeneratorInput; +import work.slhaf.partner.module.modules.action.dispatcher.executor.entity.GeneratorResult; + +/** + * 负责依据输入内容生成可执行的动态行动单元,并选择是否持久化至 SandboxRunner 容器内 + */ +@AgentSubModule +public class DynamicActionGenerator extends AgentRunningSubModule implements ActivateModel { + + @Override + public GeneratorResult execute(GeneratorInput data) { + return null; + } + + @Override + public String modelKey() { + return ""; + } + + @Override + public boolean withBasicPrompt() { + return false; + } +} diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/dispatcher/executor/ParamsExtractor.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/dispatcher/executor/ParamsExtractor.java new file mode 100644 index 00000000..f94b1aa6 --- /dev/null +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/dispatcher/executor/ParamsExtractor.java @@ -0,0 +1,29 @@ +package work.slhaf.partner.module.modules.action.dispatcher.executor; + +import work.slhaf.partner.api.agent.factory.module.annotation.AgentSubModule; +import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.ActivateModel; +import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.AgentRunningSubModule; +import work.slhaf.partner.module.modules.action.dispatcher.executor.entity.ParamsExtractorInput; + +/** + * 负责依据输入内容进行行动单元的参数信息提取 + */ +@AgentSubModule +public class ParamsExtractor extends AgentRunningSubModule implements ActivateModel { + + @Override + public String[] execute(ParamsExtractorInput data) { + return new String[0]; + } + + @Override + public String modelKey() { + return ""; + } + + @Override + public boolean withBasicPrompt() { + return false; + } + +} diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/dispatcher/executor/entity/GeneratorInput.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/dispatcher/executor/entity/GeneratorInput.java new file mode 100644 index 00000000..89d52ba8 --- /dev/null +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/dispatcher/executor/entity/GeneratorInput.java @@ -0,0 +1,7 @@ +package work.slhaf.partner.module.modules.action.dispatcher.executor.entity; + +import lombok.Data; + +@Data +public class GeneratorInput { +} diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/dispatcher/executor/entity/GeneratorResult.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/dispatcher/executor/entity/GeneratorResult.java new file mode 100644 index 00000000..6290856d --- /dev/null +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/dispatcher/executor/entity/GeneratorResult.java @@ -0,0 +1,7 @@ +package work.slhaf.partner.module.modules.action.dispatcher.executor.entity; + +import lombok.Data; + +@Data +public class GeneratorResult { +} diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/dispatcher/executor/entity/ParamsExtractorInput.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/dispatcher/executor/entity/ParamsExtractorInput.java new file mode 100644 index 00000000..b78dd7e0 --- /dev/null +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/dispatcher/executor/entity/ParamsExtractorInput.java @@ -0,0 +1,8 @@ +package work.slhaf.partner.module.modules.action.dispatcher.executor.entity; + +import lombok.Data; + +@Data +public class ParamsExtractorInput { + +} diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/dispatcher/executor/entity/RepairerInput.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/dispatcher/executor/entity/RepairerInput.java new file mode 100644 index 00000000..92ffcc6f --- /dev/null +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/dispatcher/executor/entity/RepairerInput.java @@ -0,0 +1,7 @@ +package work.slhaf.partner.module.modules.action.dispatcher.executor.entity; + +import lombok.Data; + +@Data +public class RepairerInput { +} diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/dispatcher/executor/entity/RepairerResult.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/dispatcher/executor/entity/RepairerResult.java new file mode 100644 index 00000000..c8e56ce2 --- /dev/null +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/dispatcher/executor/entity/RepairerResult.java @@ -0,0 +1,7 @@ +package work.slhaf.partner.module.modules.action.dispatcher.executor.entity; + +import lombok.Data; + +@Data +public class RepairerResult { +} diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/interventor/handler/InterventionHandler.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/interventor/handler/InterventionHandler.java index cc54d0db..e3c8667a 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/interventor/handler/InterventionHandler.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/action/interventor/handler/InterventionHandler.java @@ -96,6 +96,7 @@ public class InterventionHandler extends AgentRunningSubModule actionCapability.loadMetaAction(actionKey)) .toList(); + //TODO 需要将干预逻辑下放至 ActionCapability ,因为 ActionExecutor 中也存在干预操作 switch (intervention.getType()) { case InterventionType.APPEND -> handleAppend(actionData, intervention.getOrder(), actions); case InterventionType.INSERT -> handleInsert(actionData, intervention.getOrder(), actions, phaser);