mirror of
https://github.com/slhaf/Partner.git
synced 2026-05-12 16:53:04 +08:00
refactor(ActionExecutor): use HistoryAction record and track scheduled history reset
This commit is contained in:
@@ -2,6 +2,12 @@ package work.slhaf.partner.core.action.entity;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import work.slhaf.partner.module.modules.action.dispatcher.executor.entity.HistoryAction;
|
||||
|
||||
import java.time.ZonedDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 计划行动数据类,继承自{@link ActionData},扩展了属性{@link ScheduledActionData#type}和{@link ScheduledActionData#scheduleContent},用于标识计划类型(单次还是周期性任务)和计划内容
|
||||
@@ -10,9 +16,29 @@ import lombok.EqualsAndHashCode;
|
||||
@Data
|
||||
public class ScheduledActionData extends ActionData {
|
||||
private ScheduledType type;
|
||||
private String scheduleContent; //如果为周期,则对应cron表达式,如果为一次性,则对应为LocalDateTime字符串
|
||||
private String scheduleContent; //如果为周期,则对应cron表达式,如果为一次性,则对应为ZonedDateTime字符串
|
||||
private List<ScheduledHistory> scheduledHistories = new ArrayList<>();
|
||||
|
||||
enum ScheduledType {
|
||||
public void recordAndReset() {
|
||||
this.scheduledHistories.add(new ScheduledHistory(ZonedDateTime.now(), this.result, Map.copyOf(this.history)));
|
||||
|
||||
// 清理执行时内容
|
||||
this.additionalContext.clear();
|
||||
this.executingStage = 0;
|
||||
this.getActionChain().forEach((stage, actions) -> {
|
||||
for (MetaAction action : actions) {
|
||||
action.getParams().clear();
|
||||
action.setResult(new MetaAction.Result());
|
||||
}
|
||||
});
|
||||
|
||||
this.setStatus(ActionStatus.PREPARE);
|
||||
}
|
||||
|
||||
public enum ScheduledType {
|
||||
CYCLE, ONCE
|
||||
}
|
||||
|
||||
private record ScheduledHistory(ZonedDateTime endTime, String result, Map<Integer, List<HistoryAction>> history) {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,11 +9,8 @@ import work.slhaf.partner.api.agent.factory.module.annotation.InjectModule;
|
||||
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;
|
||||
import work.slhaf.partner.core.action.entity.ActionData;
|
||||
import work.slhaf.partner.core.action.entity.*;
|
||||
import work.slhaf.partner.core.action.entity.ActionData.ActionStatus;
|
||||
import work.slhaf.partner.core.action.entity.MetaAction;
|
||||
import work.slhaf.partner.core.action.entity.MetaActionInfo;
|
||||
import work.slhaf.partner.core.action.entity.PhaserRecord;
|
||||
import work.slhaf.partner.core.action.runner.RunnerClient;
|
||||
import work.slhaf.partner.core.cognation.CognationCapability;
|
||||
import work.slhaf.partner.core.memory.MemoryCapability;
|
||||
@@ -157,7 +154,12 @@ public class ActionExecutor extends AgentRunningSubModule<ActionExecutorInput, V
|
||||
// 结束
|
||||
actionCapability.removePhaserRecord(phaser);
|
||||
if (actionData.getStatus() != ActionData.ActionStatus.FAILED) {
|
||||
actionData.setStatus(ActionStatus.SUCCESS);
|
||||
// 如果是 ScheduledActionData, 则重置 ActionData 内容,记录执行历史与最终结果
|
||||
if (actionData instanceof ScheduledActionData scheduledActionData) {
|
||||
scheduledActionData.recordAndReset();
|
||||
} else {
|
||||
actionData.setStatus(ActionStatus.SUCCESS);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -233,10 +235,7 @@ public class ActionExecutor extends AgentRunningSubModule<ActionExecutorInput, V
|
||||
if (extractorResult.isOk()) {
|
||||
metaAction.setParams(extractorResult.getParams());
|
||||
runnerClient.submit(metaAction);
|
||||
val historyAction = new HistoryAction();
|
||||
historyAction.setActionKey(actionKey);
|
||||
historyAction.setDescription(actionCapability.loadMetaActionInfo(actionKey).getDescription());
|
||||
historyAction.setResult(metaAction.getResult().getData());
|
||||
val historyAction = new HistoryAction(actionKey, actionCapability.loadMetaActionInfo(actionKey).getDescription(), metaAction.getResult().getData());
|
||||
actionData.getHistory()
|
||||
.computeIfAbsent(executingStage, integer -> new ArrayList<>())
|
||||
.add(historyAction);
|
||||
|
||||
@@ -209,9 +209,9 @@ public class ActionRepairer extends AgentRunningSubModule<RepairerInput, Repaire
|
||||
JSONArray historyData = prompt.putArray("[历史行动执行结果]");
|
||||
data.getHistoryActionResults().forEach(historyAction -> {
|
||||
JSONObject historyItem = new JSONObject();
|
||||
historyItem.put("[行动Key]", historyAction.getActionKey());
|
||||
historyItem.put("[行动描述]", historyAction.getDescription());
|
||||
historyItem.put("[行动结果]", historyAction.getResult());
|
||||
historyItem.put("[行动Key]", historyAction.actionKey());
|
||||
historyItem.put("[行动描述]", historyAction.description());
|
||||
historyItem.put("[行动结果]", historyAction.result());
|
||||
historyData.add(historyItem);
|
||||
});
|
||||
|
||||
|
||||
@@ -50,9 +50,9 @@ public class ParamsExtractor extends AgentRunningSubModule<ExtractorInput, Extra
|
||||
List<HistoryAction> historyActions = input.getHistoryActionResults();
|
||||
for (HistoryAction historyAction : historyActions) {
|
||||
JSONObject historyItem = new JSONObject();
|
||||
historyItem.put("[行动Key]", historyAction.getActionKey());
|
||||
historyItem.put("[行动描述]", historyAction.getDescription());
|
||||
historyItem.put("[行动结果]", historyAction.getResult());
|
||||
historyItem.put("[行动Key]", historyAction.actionKey());
|
||||
historyItem.put("[行动描述]", historyAction.description());
|
||||
historyItem.put("[行动结果]", historyAction.result());
|
||||
historyData.add(historyItem);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,10 +1,4 @@
|
||||
package work.slhaf.partner.module.modules.action.dispatcher.executor.entity;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class HistoryAction {
|
||||
private String actionKey;
|
||||
private String description;
|
||||
private String result;
|
||||
public record HistoryAction(String actionKey, String description, String result) {
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user