mirror of
https://github.com/slhaf/Partner.git
synced 2026-05-12 16:53:04 +08:00
对 ActionExecutor 下子模块的功能分布、某些实体类进行了调整; 完善了 ActionExecutor 中的大致执行逻辑
- 梳理执行链路时发现 ActionRepairer 的能力明显超出可实现边界,故将其能力进行限定 - 新增 ActionCorrector 负责单组行动执行完毕后,根据意图和执行状况进行行动链修正 - 将 PhaserRecord 拆分为独立实体,未来将封装一部分流程控制逻辑
This commit is contained in:
13
.idea/misc.xml
generated
13
.idea/misc.xml
generated
@@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="EntryPointsManager">
|
<component name="EntryPointsManager">
|
||||||
<list size="14">
|
<list size="15">
|
||||||
<item index="0" class="java.lang.String" itemvalue="lombok.Data" />
|
<item index="0" class="java.lang.String" itemvalue="lombok.Data" />
|
||||||
<item index="1" class="java.lang.String" itemvalue="net.bytebuddy.implementation.bind.annotation.RuntimeType" />
|
<item index="1" class="java.lang.String" itemvalue="net.bytebuddy.implementation.bind.annotation.RuntimeType" />
|
||||||
<item index="2" class="java.lang.String" itemvalue="work.slhaf.partner.api.agent.factory.capability.annotation.Capability" />
|
<item index="2" class="java.lang.String" itemvalue="work.slhaf.partner.api.agent.factory.capability.annotation.Capability" />
|
||||||
@@ -11,11 +11,12 @@
|
|||||||
<item index="6" class="java.lang.String" itemvalue="work.slhaf.partner.api.agent.factory.capability.annotation.Coordinated" />
|
<item index="6" class="java.lang.String" itemvalue="work.slhaf.partner.api.agent.factory.capability.annotation.Coordinated" />
|
||||||
<item index="7" class="java.lang.String" itemvalue="work.slhaf.partner.api.agent.factory.module.annotation.AfterExecute" />
|
<item index="7" class="java.lang.String" itemvalue="work.slhaf.partner.api.agent.factory.module.annotation.AfterExecute" />
|
||||||
<item index="8" class="java.lang.String" itemvalue="work.slhaf.partner.api.agent.factory.module.annotation.AgentModule" />
|
<item index="8" class="java.lang.String" itemvalue="work.slhaf.partner.api.agent.factory.module.annotation.AgentModule" />
|
||||||
<item index="9" class="java.lang.String" itemvalue="work.slhaf.partner.api.agent.factory.module.annotation.BeforeExecute" />
|
<item index="9" class="java.lang.String" itemvalue="work.slhaf.partner.api.agent.factory.module.annotation.AgentSubModule" />
|
||||||
<item index="10" class="java.lang.String" itemvalue="work.slhaf.partner.api.agent.factory.module.annotation.Init" />
|
<item index="10" class="java.lang.String" itemvalue="work.slhaf.partner.api.agent.factory.module.annotation.BeforeExecute" />
|
||||||
<item index="11" class="java.lang.String" itemvalue="work.slhaf.partner.api.capability.annotation.CapabilityMethod" />
|
<item index="11" class="java.lang.String" itemvalue="work.slhaf.partner.api.agent.factory.module.annotation.Init" />
|
||||||
<item index="12" class="java.lang.String" itemvalue="work.slhaf.partner.api.capability.annotation.CoordinateManager" />
|
<item index="12" class="java.lang.String" itemvalue="work.slhaf.partner.api.capability.annotation.CapabilityMethod" />
|
||||||
<item index="13" class="java.lang.String" itemvalue="work.slhaf.partner.api.register.capability.annotation.Capability" />
|
<item index="13" class="java.lang.String" itemvalue="work.slhaf.partner.api.capability.annotation.CoordinateManager" />
|
||||||
|
<item index="14" class="java.lang.String" itemvalue="work.slhaf.partner.api.register.capability.annotation.Capability" />
|
||||||
</list>
|
</list>
|
||||||
<writeAnnotations>
|
<writeAnnotations>
|
||||||
<writeAnnotation name="work.slhaf.partner.api.agent.factory.capability.annotation.InjectCapability" />
|
<writeAnnotation name="work.slhaf.partner.api.agent.factory.capability.annotation.InjectCapability" />
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import work.slhaf.partner.api.agent.factory.capability.annotation.Capability;
|
|||||||
import work.slhaf.partner.core.action.entity.ActionData;
|
import work.slhaf.partner.core.action.entity.ActionData;
|
||||||
import work.slhaf.partner.core.action.entity.MetaAction;
|
import work.slhaf.partner.core.action.entity.MetaAction;
|
||||||
import work.slhaf.partner.core.action.entity.MetaActionInfo;
|
import work.slhaf.partner.core.action.entity.MetaActionInfo;
|
||||||
|
import work.slhaf.partner.core.action.entity.PhaserRecord;
|
||||||
import work.slhaf.partner.core.action.entity.cache.CacheAdjustData;
|
import work.slhaf.partner.core.action.entity.cache.CacheAdjustData;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -29,13 +30,13 @@ public interface ActionCapability {
|
|||||||
|
|
||||||
ExecutorService getExecutor(ActionCore.ExecutorType type);
|
ExecutorService getExecutor(ActionCore.ExecutorType type);
|
||||||
|
|
||||||
void putPhaserRecord(Phaser phaser, ActionData actionData);
|
PhaserRecord putPhaserRecord(Phaser phaser, ActionData actionData);
|
||||||
|
|
||||||
void removePhaserRecord(Phaser phaser);
|
void removePhaserRecord(Phaser phaser);
|
||||||
|
|
||||||
List<ActionCore.PhaserRecord> listPhaserRecords();
|
List<PhaserRecord> listPhaserRecords();
|
||||||
|
|
||||||
ActionCore.PhaserRecord getPhaserRecord(String tendency, String source);
|
PhaserRecord getPhaserRecord(String tendency, String source);
|
||||||
|
|
||||||
MetaAction loadMetaAction(@NonNull String actionKey);
|
MetaAction loadMetaAction(@NonNull String actionKey);
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import work.slhaf.partner.core.PartnerCore;
|
|||||||
import work.slhaf.partner.core.action.entity.ActionData;
|
import work.slhaf.partner.core.action.entity.ActionData;
|
||||||
import work.slhaf.partner.core.action.entity.MetaAction;
|
import work.slhaf.partner.core.action.entity.MetaAction;
|
||||||
import work.slhaf.partner.core.action.entity.MetaActionInfo;
|
import work.slhaf.partner.core.action.entity.MetaActionInfo;
|
||||||
|
import work.slhaf.partner.core.action.entity.PhaserRecord;
|
||||||
import work.slhaf.partner.core.action.entity.cache.ActionCacheData;
|
import work.slhaf.partner.core.action.entity.cache.ActionCacheData;
|
||||||
import work.slhaf.partner.core.action.entity.cache.CacheAdjustData;
|
import work.slhaf.partner.core.action.entity.cache.CacheAdjustData;
|
||||||
import work.slhaf.partner.core.action.entity.cache.CacheAdjustMetaData;
|
import work.slhaf.partner.core.action.entity.cache.CacheAdjustMetaData;
|
||||||
@@ -182,15 +183,17 @@ public class ActionCore extends PartnerCore<ActionCore> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@CapabilityMethod
|
@CapabilityMethod
|
||||||
public synchronized void putPhaserRecord(Phaser phaser, ActionData actionData) {
|
public synchronized PhaserRecord putPhaserRecord(Phaser phaser, ActionData actionData) {
|
||||||
phaserRecords.add(new PhaserRecord(phaser, actionData));
|
PhaserRecord record = new PhaserRecord(phaser, actionData);
|
||||||
|
phaserRecords.add(record);
|
||||||
|
return record;
|
||||||
}
|
}
|
||||||
|
|
||||||
@CapabilityMethod
|
@CapabilityMethod
|
||||||
public synchronized void removePhaserRecord(Phaser phaser) {
|
public synchronized void removePhaserRecord(Phaser phaser) {
|
||||||
PhaserRecord remove = null;
|
PhaserRecord remove = null;
|
||||||
for (PhaserRecord record : phaserRecords) {
|
for (PhaserRecord record : phaserRecords) {
|
||||||
if (record.phaser.equals(phaser)) {
|
if (record.phaser().equals(phaser)) {
|
||||||
remove = record;
|
remove = record;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -203,7 +206,7 @@ public class ActionCore extends PartnerCore<ActionCore> {
|
|||||||
@CapabilityMethod
|
@CapabilityMethod
|
||||||
public PhaserRecord getPhaserRecord(String tendency, String source) {
|
public PhaserRecord getPhaserRecord(String tendency, String source) {
|
||||||
for (PhaserRecord record : phaserRecords) {
|
for (PhaserRecord record : phaserRecords) {
|
||||||
ActionData data = record.actionData;
|
ActionData data = record.actionData();
|
||||||
if (data.getTendency().equals(tendency) && data.getSource().equals(source)) {
|
if (data.getTendency().equals(tendency) && data.getSource().equals(source)) {
|
||||||
return record;
|
return record;
|
||||||
}
|
}
|
||||||
@@ -345,6 +348,4 @@ public class ActionCore extends PartnerCore<ActionCore> {
|
|||||||
VIRTUAL, PLATFORM
|
VIRTUAL, PLATFORM
|
||||||
}
|
}
|
||||||
|
|
||||||
public record PhaserRecord(Phaser phaser, ActionData actionData) {
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -65,6 +65,10 @@ public abstract class ActionData {
|
|||||||
* 执行中
|
* 执行中
|
||||||
*/
|
*/
|
||||||
EXECUTING,
|
EXECUTING,
|
||||||
|
/**
|
||||||
|
* 暂时中断
|
||||||
|
*/
|
||||||
|
INTERRUPTED,
|
||||||
/**
|
/**
|
||||||
* 预备执行
|
* 预备执行
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
package work.slhaf.partner.core.action.entity;
|
||||||
|
|
||||||
|
import java.util.concurrent.Phaser;
|
||||||
|
|
||||||
|
public record PhaserRecord(Phaser phaser, ActionData actionData) {
|
||||||
|
|
||||||
|
public void fail() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
throw new UnsupportedOperationException("Unimplemented method 'fail'");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void interrupt() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void complete() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
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.CorrectorInput;
|
||||||
|
import work.slhaf.partner.module.modules.action.dispatcher.executor.entity.CorrectorResult;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 负责在单组行动执行后,根据行动意图与结果检查后续行动是否符合目的,必要时直接调整行动链,或发起自对话请求进行干预
|
||||||
|
*/
|
||||||
|
@AgentSubModule
|
||||||
|
public class ActionCorrector extends AgentRunningSubModule<CorrectorInput, CorrectorResult> implements ActivateModel {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CorrectorResult execute(CorrectorInput data) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String modelKey() {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean withBasicPrompt() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -4,12 +4,16 @@ import lombok.extern.slf4j.Slf4j;
|
|||||||
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.module.annotation.AgentSubModule;
|
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.factory.module.annotation.Init;
|
||||||
|
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.api.agent.runtime.interaction.flow.abstracts.AgentRunningSubModule;
|
||||||
import work.slhaf.partner.core.action.ActionCapability;
|
import work.slhaf.partner.core.action.ActionCapability;
|
||||||
import work.slhaf.partner.core.action.ActionCore;
|
import work.slhaf.partner.core.action.ActionCore;
|
||||||
import work.slhaf.partner.core.action.entity.ActionData;
|
import work.slhaf.partner.core.action.entity.ActionData;
|
||||||
import work.slhaf.partner.core.action.entity.ImmediateActionData;
|
import work.slhaf.partner.core.action.entity.ImmediateActionData;
|
||||||
import work.slhaf.partner.core.action.entity.MetaAction;
|
import work.slhaf.partner.core.action.entity.MetaAction;
|
||||||
|
import work.slhaf.partner.core.action.entity.PhaserRecord;
|
||||||
|
import work.slhaf.partner.module.modules.action.dispatcher.executor.entity.*;
|
||||||
|
import work.slhaf.partner.module.modules.action.dispatcher.executor.entity.RepairerResult.RepairerStatus;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -24,9 +28,18 @@ public class ActionExecutor extends AgentRunningSubModule<List<ImmediateActionDa
|
|||||||
@InjectCapability
|
@InjectCapability
|
||||||
private ActionCapability actionCapability;
|
private ActionCapability actionCapability;
|
||||||
|
|
||||||
|
@InjectModule
|
||||||
|
private ParamsExtractor paramsExtractor;
|
||||||
|
@InjectModule
|
||||||
|
private ActionRepairer actionRepairer;
|
||||||
|
@InjectModule
|
||||||
|
private ActionCorrector actionCorrector;
|
||||||
|
|
||||||
private ExecutorService virtualExecutor;
|
private ExecutorService virtualExecutor;
|
||||||
private ExecutorService platformExecutor;
|
private ExecutorService platformExecutor;
|
||||||
|
|
||||||
|
private final AssemblyHelper assemblyHelper = new AssemblyHelper();
|
||||||
|
|
||||||
@Init
|
@Init
|
||||||
public void init() {
|
public void init() {
|
||||||
virtualExecutor = actionCapability.getExecutor(ActionCore.ExecutorType.VIRTUAL);
|
virtualExecutor = actionCapability.getExecutor(ActionCore.ExecutorType.VIRTUAL);
|
||||||
@@ -43,7 +56,7 @@ public class ActionExecutor extends AgentRunningSubModule<List<ImmediateActionDa
|
|||||||
List<MetaAction> platform = new ArrayList<>();
|
List<MetaAction> platform = new ArrayList<>();
|
||||||
Phaser phaser = new Phaser();
|
Phaser phaser = new Phaser();
|
||||||
phaser.register();
|
phaser.register();
|
||||||
actionCapability.putPhaserRecord(phaser, actionData);
|
PhaserRecord phaserRecord = actionCapability.putPhaserRecord(phaser, actionData);
|
||||||
List<Integer> orderList = new ArrayList<>(actionChain.keySet().stream().toList());
|
List<Integer> orderList = new ArrayList<>(actionChain.keySet().stream().toList());
|
||||||
orderList.sort(Integer::compareTo);
|
orderList.sort(Integer::compareTo);
|
||||||
try {
|
try {
|
||||||
@@ -58,13 +71,15 @@ public class ActionExecutor extends AgentRunningSubModule<List<ImmediateActionDa
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 使用phaser来承担同组的动态任务新增
|
// 使用phaser来承担同组的动态任务新增
|
||||||
runGroupAction(virtual, virtualExecutor, phaser);
|
runGroupAction(virtual, virtualExecutor, phaserRecord);
|
||||||
runGroupAction(platform, platformExecutor, phaser);
|
runGroupAction(platform, platformExecutor, phaserRecord);
|
||||||
phaser.arriveAndAwaitAdvance();
|
phaser.arriveAndAwaitAdvance();
|
||||||
virtual.clear();
|
virtual.clear();
|
||||||
platform.clear();
|
platform.clear();
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
|
CorrectorInput correctorInput = assemblyHelper.buildCorrectorInput();
|
||||||
|
actionCorrector.execute(correctorInput);
|
||||||
phaser.arriveAndDeregister();
|
phaser.arriveAndDeregister();
|
||||||
actionCapability.removePhaserRecord(phaser);
|
actionCapability.removePhaserRecord(phaser);
|
||||||
}
|
}
|
||||||
@@ -73,29 +88,41 @@ public class ActionExecutor extends AgentRunningSubModule<List<ImmediateActionDa
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void runGroupAction(List<MetaAction> actions, ExecutorService executor, Phaser phaser) {
|
private void runGroupAction(List<MetaAction> actions, ExecutorService executor, PhaserRecord phaserRecord) {
|
||||||
|
Phaser phaser = phaserRecord.phaser();
|
||||||
phaser.bulkRegister(actions.size());
|
phaser.bulkRegister(actions.size());
|
||||||
for (MetaAction action : actions) {
|
//不可替换为增强for,因为单组的行动单元集合数量是可以被外部干预的
|
||||||
|
//noinspection ForLoopReplaceableByForEach
|
||||||
|
for (int i = 0; i < actions.size(); i++) {
|
||||||
|
MetaAction action = actions.get(i);
|
||||||
executor.execute(() -> {
|
executor.execute(() -> {
|
||||||
try {
|
try {
|
||||||
//TODO 使用 ParamsExtractor 填充行动参数信息,如果已知内容不足以满足参数需求,则进行行动链调整(ActionRepairer)
|
ExtractorInput extractorInput = assemblyHelper.buildExtractorInput();
|
||||||
|
ExtractorResult extractorResult = paramsExtractor.execute(extractorInput);
|
||||||
actionCapability.execute(action);
|
// 两个循环需考虑最大次数,但为了达到最好融合,次数累计作用于 ActionRepairer 的修复策略选择上更合适
|
||||||
MetaAction.Result result = action.getResult();
|
if (!extractorResult.isOk()) {
|
||||||
|
// 修复的最终结果是 action 的参数补充完整,然后能够继续行动链
|
||||||
|
// 如果无法补充,则该行动行动阶段可能确实有误,实际上应当在 actionRepairer 内部进行处理(行动链调整、自对话或请求用户进行干预)
|
||||||
|
// 所以无法补充时,行动链所属行动数据的状态需要置为 Interrupted ,等待状态变更,同时使用 Phaser 暂停(阻塞)当前行动链执行过程
|
||||||
|
// 这个功能应该交给 PhaserRecord 实现,尽量确保功能一致性
|
||||||
|
repairActionParams(action, phaserRecord);
|
||||||
|
}
|
||||||
do {
|
do {
|
||||||
|
actionCapability.execute(action);
|
||||||
|
MetaAction.Result result = action.getResult();
|
||||||
// 该循环对应LLM的调整参数后重试
|
// 该循环对应LLM的调整参数后重试
|
||||||
if (!result.isSuccess()) {
|
if (!result.isSuccess()) {
|
||||||
// LLM决策是重构参数、执行自对话反思、还是选择向用户求助(通过cognationCore暴露方法,可能需要修改其他模块以进行适应),仅重构参数时无需结束当前循环
|
// LLM决策是重构参数、执行自对话反思、还是选择向用户求助(通过cognationCore暴露方法,可能需要修改其他模块以进行适应),仅重构参数时无需结束当前循环
|
||||||
// 若使用Phaser作为执行线程与反思、求助等调用流程的同步协调,应当需要额外维护Phaser全局字段,获取到反思结果或者用户反馈后,
|
// 若使用Phaser作为执行线程与反思、求助等调用流程的同步协调,应当需要额外维护Phaser全局字段,获取到反思结果或者用户反馈后,
|
||||||
// 调用对应的phaser注册任务,在ActionExecutor中动态添加任务至actionChain,同时启动异步执行
|
// 调用对应的phaser注册任务,在ActionExecutor中动态添加任务至actionChain,同时启动异步执行
|
||||||
// 而且由于执行与放入的为同一个MetaAction对象,所以执行结果可被当前行动链获取,但virtual、executor两个列表似乎不行,需要重构执行模式,建议将行动链直接重构为LinkedHashMap,order为键
|
// 而且由于执行与放入的为同一个MetaAction对象,所以执行结果可被当前行动链获取,但virtual、executor两个列表似乎不行,需要重构执行模式,建议将行动链直接重构为LinkedHashMap,order为键
|
||||||
String input = buildFixInput(result.getData());
|
repairActionParams(action, phaserRecord);
|
||||||
// 执行时不可使用`for in`和`forEach`,因为在`Intervention`相关模块存在动态调整
|
} else {
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
actionCapability.execute(action);
|
actionCapability.execute(action);
|
||||||
} while (!result.isSuccess());
|
} while (true);
|
||||||
// TODO 将执行结果写入特定对话角色记忆(cognationCore暴露方法)
|
//TODO 执行结果不再需要写入特定位置,当前的 ActionCapability 内部的行动池已经足以承担这个功能,但这也就意味着行动池或许需要考虑特殊的序列化形式避免内存占用过高,同时也需要在某些模块执行时加上行动结果的挑取作为输入内容
|
||||||
|
|
||||||
} finally {
|
} finally {
|
||||||
phaser.arriveAndDeregister();
|
phaser.arriveAndDeregister();
|
||||||
}
|
}
|
||||||
@@ -103,9 +130,42 @@ public class ActionExecutor extends AgentRunningSubModule<List<ImmediateActionDa
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private String buildFixInput(String data) {
|
private void repairActionParams(MetaAction action, PhaserRecord phaserRecord) {
|
||||||
|
do {
|
||||||
|
RepairerInput repairerInput = assemblyHelper.buildRepairerInput();
|
||||||
|
RepairerResult repairerResult = actionRepairer.execute(repairerInput);
|
||||||
|
switch (repairerResult.getStatus()) {
|
||||||
|
// 修复成功则直接设置参数
|
||||||
|
case RepairerStatus.OK -> action.setParams(repairerResult.getParams());
|
||||||
|
// 修复失败则证明行动链不可行(外部因素,如果本身即不存在满足可能,则应当通过 ADJUST 或者 ACQUIRE 方式选择取消)
|
||||||
|
case RepairerStatus.FAILED -> phaserRecord.fail();
|
||||||
|
// 按照逻辑设定,这里将不可能步入这个分支,除非 ActionRepairer 逻辑有误
|
||||||
|
case RepairerStatus.ACQUIRE -> {
|
||||||
|
phaserRecord.interrupt();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
} while (true);
|
||||||
|
}
|
||||||
|
|
||||||
return null;
|
@SuppressWarnings("InnerClassMayBeStatic")
|
||||||
|
private class AssemblyHelper {
|
||||||
|
|
||||||
|
private AssemblyHelper() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public RepairerInput buildRepairerInput() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ExtractorInput buildExtractorInput() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public CorrectorInput buildCorrectorInput() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,18 @@ import work.slhaf.partner.module.modules.action.dispatcher.executor.entity.Repai
|
|||||||
import work.slhaf.partner.module.modules.action.dispatcher.executor.entity.RepairerResult;
|
import work.slhaf.partner.module.modules.action.dispatcher.executor.entity.RepairerResult;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 负责识别行动链的调整,可通过协调 {@link DynamicActionGenerator} 生成新的行动单元(必要时持久化)、或者依据现有输出结果与已知信息和可选行动单元直接调整行动链、如果当前局部信息无法满足,将发起自对话借助干预模块进行操作或者借助自对话通道向用户发起沟通请求
|
* 负责识别行动链的修复
|
||||||
|
* <ol>
|
||||||
|
* <li>
|
||||||
|
* 可通过协调 {@link DynamicActionGenerator} 生成新的行动单元并调用,获取所需的参数信息(必要时持久化);
|
||||||
|
* </li>
|
||||||
|
* <li>
|
||||||
|
* 也可以直接调用已存在的行动程序获取信息;
|
||||||
|
* </li>
|
||||||
|
* <li>
|
||||||
|
* 如果上述都无法满足,将发起自对话借助干预模块进行操作或者借助自对话通道向用户发起沟通请求,该请求的目的一般为行动程序生成/调用指导或者用户侧的信息补充,后续还需要再走一遍参数修复流程
|
||||||
|
* </li>
|
||||||
|
* </ol>
|
||||||
*/
|
*/
|
||||||
@AgentSubModule
|
@AgentSubModule
|
||||||
public class ActionRepairer extends AgentRunningSubModule<RepairerInput, RepairerResult> implements ActivateModel {
|
public class ActionRepairer extends AgentRunningSubModule<RepairerInput, RepairerResult> implements ActivateModel {
|
||||||
|
|||||||
@@ -3,22 +3,23 @@ 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.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.ActivateModel;
|
||||||
import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.AgentRunningSubModule;
|
import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.AgentRunningSubModule;
|
||||||
import work.slhaf.partner.module.modules.action.dispatcher.executor.entity.ParamsExtractorInput;
|
import work.slhaf.partner.module.modules.action.dispatcher.executor.entity.ExtractorInput;
|
||||||
|
import work.slhaf.partner.module.modules.action.dispatcher.executor.entity.ExtractorResult;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 负责依据输入内容进行行动单元的参数信息提取
|
* 负责依据输入内容进行行动单元的参数信息提取
|
||||||
*/
|
*/
|
||||||
@AgentSubModule
|
@AgentSubModule
|
||||||
public class ParamsExtractor extends AgentRunningSubModule<ParamsExtractorInput, String[]> implements ActivateModel {
|
public class ParamsExtractor extends AgentRunningSubModule<ExtractorInput, ExtractorResult> implements ActivateModel {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String[] execute(ParamsExtractorInput data) {
|
public ExtractorResult execute(ExtractorInput data) {
|
||||||
return new String[0];
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String modelKey() {
|
public String modelKey() {
|
||||||
return "";
|
return "params_extractor";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
package work.slhaf.partner.module.modules.action.dispatcher.executor.entity;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class CorrectorInput {
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
package work.slhaf.partner.module.modules.action.dispatcher.executor.entity;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class CorrectorResult {
|
||||||
|
}
|
||||||
@@ -3,6 +3,6 @@ package work.slhaf.partner.module.modules.action.dispatcher.executor.entity;
|
|||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
public class ParamsExtractorInput {
|
public class ExtractorInput {
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
package work.slhaf.partner.module.modules.action.dispatcher.executor.entity;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class ExtractorResult {
|
||||||
|
private boolean ok;
|
||||||
|
private String[] params;
|
||||||
|
}
|
||||||
@@ -2,6 +2,27 @@ package work.slhaf.partner.module.modules.action.dispatcher.executor.entity;
|
|||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 行动修复结果,包含行动状态和修复后的参数
|
||||||
|
*/
|
||||||
@Data
|
@Data
|
||||||
public class RepairerResult {
|
public class RepairerResult {
|
||||||
|
|
||||||
|
private RepairerStatus status;
|
||||||
|
private String[] params;
|
||||||
|
|
||||||
|
public enum RepairerStatus {
|
||||||
|
/**
|
||||||
|
* 成功修复: 携带修复后参数; 此种情况对应 Repairer 通过某种方式获取到了完整的参数(调用额外的行动)
|
||||||
|
*/
|
||||||
|
OK,
|
||||||
|
/**
|
||||||
|
* 发送了自对话请求干预行动,这类一般是补充信息或者提供行动指导,后续必须再步入修复进程,但需要设置层级
|
||||||
|
*/
|
||||||
|
ACQUIRE,
|
||||||
|
/**
|
||||||
|
* 修复失败(简单修复、自对话通道均出现错误,正常情况不应该出现)
|
||||||
|
*/
|
||||||
|
FAILED
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ import work.slhaf.partner.api.agent.factory.module.annotation.AgentModule;
|
|||||||
import work.slhaf.partner.api.agent.factory.module.annotation.InjectModule;
|
import work.slhaf.partner.api.agent.factory.module.annotation.InjectModule;
|
||||||
import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.ActivateModel;
|
import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.ActivateModel;
|
||||||
import work.slhaf.partner.core.action.ActionCapability;
|
import work.slhaf.partner.core.action.ActionCapability;
|
||||||
import work.slhaf.partner.core.action.ActionCore.PhaserRecord;
|
|
||||||
import work.slhaf.partner.core.action.entity.ActionData;
|
import work.slhaf.partner.core.action.entity.ActionData;
|
||||||
|
import work.slhaf.partner.core.action.entity.PhaserRecord;
|
||||||
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.module.common.module.PreRunningModule;
|
import work.slhaf.partner.module.common.module.PreRunningModule;
|
||||||
|
|||||||
@@ -10,8 +10,8 @@ import work.slhaf.partner.api.chat.pojo.ChatResponse;
|
|||||||
import work.slhaf.partner.api.chat.pojo.Message;
|
import work.slhaf.partner.api.chat.pojo.Message;
|
||||||
import work.slhaf.partner.core.action.ActionCapability;
|
import work.slhaf.partner.core.action.ActionCapability;
|
||||||
import work.slhaf.partner.core.action.ActionCore.ExecutorType;
|
import work.slhaf.partner.core.action.ActionCore.ExecutorType;
|
||||||
import work.slhaf.partner.core.action.ActionCore.PhaserRecord;
|
|
||||||
import work.slhaf.partner.core.action.entity.ActionData;
|
import work.slhaf.partner.core.action.entity.ActionData;
|
||||||
|
import work.slhaf.partner.core.action.entity.PhaserRecord;
|
||||||
import work.slhaf.partner.core.memory.pojo.EvaluatedSlice;
|
import work.slhaf.partner.core.memory.pojo.EvaluatedSlice;
|
||||||
import work.slhaf.partner.module.modules.action.interventor.evaluator.entity.EvaluatorInput;
|
import work.slhaf.partner.module.modules.action.interventor.evaluator.entity.EvaluatorInput;
|
||||||
import work.slhaf.partner.module.modules.action.interventor.evaluator.entity.EvaluatorResult;
|
import work.slhaf.partner.module.modules.action.interventor.evaluator.entity.EvaluatorResult;
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ package work.slhaf.partner.module.modules.action.interventor.evaluator.entity;
|
|||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import work.slhaf.partner.api.chat.pojo.Message;
|
import work.slhaf.partner.api.chat.pojo.Message;
|
||||||
import work.slhaf.partner.core.action.ActionCore.PhaserRecord;
|
|
||||||
import work.slhaf.partner.core.action.entity.ActionData;
|
import work.slhaf.partner.core.action.entity.ActionData;
|
||||||
|
import work.slhaf.partner.core.action.entity.PhaserRecord;
|
||||||
import work.slhaf.partner.core.memory.pojo.EvaluatedSlice;
|
import work.slhaf.partner.core.memory.pojo.EvaluatedSlice;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|||||||
@@ -6,10 +6,10 @@ import work.slhaf.partner.api.agent.factory.module.annotation.AgentSubModule;
|
|||||||
import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.AgentRunningSubModule;
|
import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.AgentRunningSubModule;
|
||||||
import work.slhaf.partner.core.action.ActionCapability;
|
import work.slhaf.partner.core.action.ActionCapability;
|
||||||
import work.slhaf.partner.core.action.ActionCore.ExecutorType;
|
import work.slhaf.partner.core.action.ActionCore.ExecutorType;
|
||||||
import work.slhaf.partner.core.action.ActionCore.PhaserRecord;
|
|
||||||
import work.slhaf.partner.core.action.entity.ActionData;
|
import work.slhaf.partner.core.action.entity.ActionData;
|
||||||
import work.slhaf.partner.core.action.entity.ActionData.ActionStatus;
|
import work.slhaf.partner.core.action.entity.ActionData.ActionStatus;
|
||||||
import work.slhaf.partner.core.action.entity.MetaAction;
|
import work.slhaf.partner.core.action.entity.MetaAction;
|
||||||
|
import work.slhaf.partner.core.action.entity.PhaserRecord;
|
||||||
import work.slhaf.partner.module.modules.action.interventor.entity.InterventionType;
|
import work.slhaf.partner.module.modules.action.interventor.entity.InterventionType;
|
||||||
import work.slhaf.partner.module.modules.action.interventor.entity.MetaIntervention;
|
import work.slhaf.partner.module.modules.action.interventor.entity.MetaIntervention;
|
||||||
import work.slhaf.partner.module.modules.action.interventor.handler.entity.HandlerInput;
|
import work.slhaf.partner.module.modules.action.interventor.handler.entity.HandlerInput;
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ package work.slhaf.partner.module.modules.action.interventor.handler.entity;
|
|||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
import work.slhaf.partner.core.action.ActionCore.PhaserRecord;
|
|
||||||
import work.slhaf.partner.core.action.entity.ActionData;
|
import work.slhaf.partner.core.action.entity.ActionData;
|
||||||
|
import work.slhaf.partner.core.action.entity.PhaserRecord;
|
||||||
import work.slhaf.partner.module.modules.action.interventor.entity.MetaIntervention;
|
import work.slhaf.partner.module.modules.action.interventor.entity.MetaIntervention;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import work.slhaf.partner.api.chat.pojo.ChatResponse;
|
|||||||
import work.slhaf.partner.core.action.ActionCapability;
|
import work.slhaf.partner.core.action.ActionCapability;
|
||||||
import work.slhaf.partner.core.action.ActionCore;
|
import work.slhaf.partner.core.action.ActionCore;
|
||||||
import work.slhaf.partner.core.action.entity.ActionData;
|
import work.slhaf.partner.core.action.entity.ActionData;
|
||||||
|
import work.slhaf.partner.core.action.entity.PhaserRecord;
|
||||||
import work.slhaf.partner.module.modules.action.interventor.recognizer.entity.MetaRecognizerResult;
|
import work.slhaf.partner.module.modules.action.interventor.recognizer.entity.MetaRecognizerResult;
|
||||||
import work.slhaf.partner.module.modules.action.interventor.recognizer.entity.RecognizerInput;
|
import work.slhaf.partner.module.modules.action.interventor.recognizer.entity.RecognizerInput;
|
||||||
import work.slhaf.partner.module.modules.action.interventor.recognizer.entity.RecognizerResult;
|
import work.slhaf.partner.module.modules.action.interventor.recognizer.entity.RecognizerResult;
|
||||||
@@ -30,13 +31,13 @@ public class InterventionRecognizer extends AgentRunningSubModule<RecognizerInpu
|
|||||||
public RecognizerResult execute(RecognizerInput input) {
|
public RecognizerResult execute(RecognizerInput input) {
|
||||||
// 获取必须数据
|
// 获取必须数据
|
||||||
ExecutorService executor = actionCapability.getExecutor(ActionCore.ExecutorType.VIRTUAL);
|
ExecutorService executor = actionCapability.getExecutor(ActionCore.ExecutorType.VIRTUAL);
|
||||||
List<ActionCore.PhaserRecord> executingActions = input.getExecutingActions();
|
List<PhaserRecord> executingActions = input.getExecutingActions();
|
||||||
List<ActionData> preparedActions = input.getPreparedActions();
|
List<ActionData> preparedActions = input.getPreparedActions();
|
||||||
CountDownLatch countDownLatch = new CountDownLatch(executingActions.size() + preparedActions.size());
|
CountDownLatch countDownLatch = new CountDownLatch(executingActions.size() + preparedActions.size());
|
||||||
|
|
||||||
// 创建结果容器
|
// 创建结果容器
|
||||||
RecognizerResult recognizerResult = new RecognizerResult();
|
RecognizerResult recognizerResult = new RecognizerResult();
|
||||||
Map<String, ActionCore.PhaserRecord> executingInterventions = recognizerResult.getExecutingInterventions();
|
Map<String, PhaserRecord> executingInterventions = recognizerResult.getExecutingInterventions();
|
||||||
Map<String, ActionData> preparedInterventions = recognizerResult.getPreparedInterventions();
|
Map<String, ActionData> preparedInterventions = recognizerResult.getPreparedInterventions();
|
||||||
|
|
||||||
// 执行识别操作
|
// 执行识别操作
|
||||||
@@ -74,7 +75,7 @@ public class InterventionRecognizer extends AgentRunningSubModule<RecognizerInpu
|
|||||||
|
|
||||||
private <T> String buildPrompt(T data, RecognizerInput input) {
|
private <T> String buildPrompt(T data, RecognizerInput input) {
|
||||||
ActionData actionData = switch (data) {
|
ActionData actionData = switch (data) {
|
||||||
case ActionCore.PhaserRecord record -> record.actionData();
|
case PhaserRecord record -> record.actionData();
|
||||||
case ActionData tempData -> tempData;
|
case ActionData tempData -> tempData;
|
||||||
default -> null;
|
default -> null;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ package work.slhaf.partner.module.modules.action.interventor.recognizer.entity;
|
|||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import work.slhaf.partner.api.chat.pojo.Message;
|
import work.slhaf.partner.api.chat.pojo.Message;
|
||||||
import work.slhaf.partner.core.action.ActionCore;
|
|
||||||
import work.slhaf.partner.core.action.entity.ActionData;
|
import work.slhaf.partner.core.action.entity.ActionData;
|
||||||
|
import work.slhaf.partner.core.action.entity.PhaserRecord;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -18,6 +18,6 @@ public class RecognizerInput {
|
|||||||
/**
|
/**
|
||||||
* 正在执行的行动-Phaser记录列表,在Recognizer中结合本次输入并发评估(考虑到不同行动链之间对LLM的影响)
|
* 正在执行的行动-Phaser记录列表,在Recognizer中结合本次输入并发评估(考虑到不同行动链之间对LLM的影响)
|
||||||
*/
|
*/
|
||||||
private List<ActionCore.PhaserRecord> executingActions;
|
private List<PhaserRecord> executingActions;
|
||||||
private List<ActionData> preparedActions;
|
private List<ActionData> preparedActions;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
package work.slhaf.partner.module.modules.action.interventor.recognizer.entity;
|
package work.slhaf.partner.module.modules.action.interventor.recognizer.entity;
|
||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import work.slhaf.partner.core.action.ActionCore;
|
|
||||||
import work.slhaf.partner.core.action.entity.ActionData;
|
import work.slhaf.partner.core.action.entity.ActionData;
|
||||||
|
import work.slhaf.partner.core.action.entity.PhaserRecord;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@@ -18,7 +18,7 @@ public class RecognizerResult {
|
|||||||
* <br/>
|
* <br/>
|
||||||
* value: 干预倾向将作用的 phaser 记录
|
* value: 干预倾向将作用的 phaser 记录
|
||||||
*/
|
*/
|
||||||
private Map<String, ActionCore.PhaserRecord> executingInterventions = new HashMap<>();
|
private Map<String, PhaserRecord> executingInterventions = new HashMap<>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <h4>将被干预的‘等待中行动’</h4>
|
* <h4>将被干预的‘等待中行动’</h4>
|
||||||
|
|||||||
Reference in New Issue
Block a user