From fa9512db3bd4bf72c3c88b045748910be95099a1 Mon Sep 17 00:00:00 2001 From: slhafzjw Date: Sun, 1 Mar 2026 21:33:31 +0800 Subject: [PATCH] refactor(framework): migrate `AgentInteractionAdapter` flow execution to Kotlin coroutines and remove `AgentRunningFlow` --- .../interaction/AgentInteractionAdapter.kt | 67 ++++++++++++++----- .../interaction/flow/AgentRunningFlow.java | 49 -------------- 2 files changed, 51 insertions(+), 65 deletions(-) delete mode 100644 Partner-Framework/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/flow/AgentRunningFlow.java diff --git a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/AgentInteractionAdapter.kt b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/AgentInteractionAdapter.kt index 0985ba8d..7675ff1c 100644 --- a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/AgentInteractionAdapter.kt +++ b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/AgentInteractionAdapter.kt @@ -1,26 +1,61 @@ -package work.slhaf.partner.api.agent.runtime.interaction; +package work.slhaf.partner.api.agent.runtime.interaction -import work.slhaf.partner.api.agent.factory.component.pojo.MetaModule; -import work.slhaf.partner.api.agent.runtime.config.AgentConfigLoader; -import work.slhaf.partner.api.agent.runtime.interaction.data.AgentInputData; -import work.slhaf.partner.api.agent.runtime.interaction.data.AgentOutputData; -import work.slhaf.partner.api.agent.runtime.interaction.flow.AgentRunningFlow; -import work.slhaf.partner.api.agent.runtime.interaction.flow.entity.RunningFlowContext; +import kotlinx.coroutines.async +import kotlinx.coroutines.awaitAll +import kotlinx.coroutines.coroutineScope +import kotlinx.coroutines.runBlocking +import work.slhaf.partner.api.agent.factory.component.abstracts.AbstractAgentModule +import work.slhaf.partner.api.agent.factory.context.AgentContext +import work.slhaf.partner.api.agent.factory.context.ModuleContextData +import work.slhaf.partner.api.agent.runtime.interaction.data.AgentInputData +import work.slhaf.partner.api.agent.runtime.interaction.data.AgentOutputData +import work.slhaf.partner.api.agent.runtime.interaction.flow.RunningFlowContext -import java.util.List; -import java.util.Map; +abstract class AgentInteractionAdapter { -public abstract class AgentInteractionAdapter { + private val runningModules = + mutableMapOf>>>() - protected AgentRunningFlow agentRunningFlow = new AgentRunningFlow<>(); - protected Map> moduleOrderedMap = AgentConfigLoader.INSTANCE.getModuleOrderedMap(); + fun call(runningFlowContext: C): C = runBlocking { + if (runningModules.isEmpty()) { + AgentContext.modules + .filter { ModuleContextData.Running::class.java.isAssignableFrom(it.value.javaClass) } + .map { it.value as ModuleContextData.Running> } + .sortedBy { it.order } + .forEach { runningModules.computeIfAbsent(it.order) { mutableListOf() }.add(it) } + } - public C call(C finalInputData) { - return agentRunningFlow.launch(moduleOrderedMap, finalInputData); + try { + for (modules in runningModules.values) { + executeOrder(modules, runningFlowContext) + } + runningFlowContext.ok = 1 + } catch (e: Exception) { + runningFlowContext.ok = 0 + runningFlowContext.errMsg.add(e.localizedMessage) + } + + return@runBlocking runningFlowContext } - protected abstract O parseOutputData(C outputContext); + private suspend fun executeOrder( + modules: MutableList>>, + runningFlowContext: C + ) { - protected abstract C parseInputData(I inputData); + coroutineScope { + val jobs = modules.map { module -> + async { + module.instance.execute(runningFlowContext) + } + } + + jobs.awaitAll() // 任一异常会取消全部 + } + } + + protected abstract fun parseOutputData(outputContext: C): O + + protected abstract fun parseInputData(inputData: I): C } diff --git a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/flow/AgentRunningFlow.java b/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/flow/AgentRunningFlow.java deleted file mode 100644 index 96ba7613..00000000 --- a/Partner-Framework/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/flow/AgentRunningFlow.java +++ /dev/null @@ -1,49 +0,0 @@ -package work.slhaf.partner.api.agent.runtime.interaction.flow; - -import work.slhaf.partner.api.agent.factory.component.pojo.MetaModule; -import work.slhaf.partner.api.agent.runtime.exception.AgentRuntimeException; -import work.slhaf.partner.api.agent.runtime.exception.GlobalExceptionHandler; -import work.slhaf.partner.api.agent.runtime.interaction.flow.entity.RunningFlowContext; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.Future; - -/** - * Agent执行流程 - */ -public class AgentRunningFlow { - - public C launch(Map> modules, C interactionContext) { - try (ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor()) { - //流程执行启动 - for (Map.Entry> entry : modules.entrySet()) { - List> futures = new ArrayList<>(); - List moduleList = entry.getValue(); - for (MetaModule module : moduleList) { - Future future = executor.submit(() -> { - module.getInstance().execute(interactionContext); - }); - futures.add(future); - } - for (Future future : futures) { - try { - future.get(); - } catch (Exception e) { - boolean exit = GlobalExceptionHandler.INSTANCE.handle(e); - if (exit) throw new AgentRuntimeException("Agent执行出错!", e); - interactionContext.getErrMsg().add(e.getLocalizedMessage()); - } - } - } - interactionContext.setOk(1); - } catch (Exception e) { - interactionContext.setOk(0); - interactionContext.getErrMsg().add(e.getLocalizedMessage()); - } - return interactionContext; - } -}