一、本章介绍
将构建完成的智能体实例注入到 InMemoryRunner 中,并同步注册到 Spring 容器内。这样一来,后续即可直接从 Spring 上下文中获取对应对象,用于发起 AI Agent 的对话与调用。
在当前实现中,仅将最终生成的 SequentialAgent 写入 InMemoryRunner。后续会进一步优化为动态机制,使任意配置的智能体都能够按需注入,从而提升整体的灵活性与扩展能力。
二、流程设计
如图,智能体构建完成后,则填充到 InMemoryRunner 中;

当流程执行至 SequentialAgentNode 后,将继续流转至 RunnerNode,进入最终的执行准备阶段。
在 RunnerNode 中,会完成 InMemoryRunner 的实例化,并将其注册到 Spring 容器中。完成这一步后,系统中的其他组件即可通过容器获取该执行实例,从而在任意位置发起调用。
三、功能实现
1. 工程结构
新增 RunnerNode 节点,用于承接来自 SequentialAgentNode 的流转。
在该节点中,负责构建 InMemoryRunner 执行实例,并将其注册到 Spring 容器中,供后续统一获取与调用。
2. 核心模块
2.1 节点流转
@Slf4j
@Service
public class SequentialAgentNode extends AbstractArmorySupport {
@Resource
private RunnerNode runnerNode;
// ... 省略部分
@Override
public StrategyHandler<ArmoryCommandEntity, DefaultArmoryFactory.DynamicContext, AiAgentRegisterVO> get(ArmoryCommandEntity requestParameter, DefaultArmoryFactory.DynamicContext dynamicContext) throws Exception {
return runnerNode;
}
}- 从 SequentialAgentNode 流转到 RunnerNode
2.2 执行节点
@Slf4j
@Service
public class RunnerNode extends AbstractArmorySupport {
@Override
protected AiAgentRegisterVO doApply(ArmoryCommandEntity requestParameter, DefaultArmoryFactory.DynamicContext dynamicContext) throws Exception {
log.info("Ai Agent 装配操作 - RunnerNode");
AiAgentConfigTableVO aiAgentConfigTableVO = requestParameter.getAiAgentConfigTableVO();
String appName = aiAgentConfigTableVO.getAppName();
String agentId = aiAgentConfigTableVO.getAgent().getAgentId();
String agentName = aiAgentConfigTableVO.getAgent().getAgentName();
String agentDesc = aiAgentConfigTableVO.getAgent().getAgentDesc();
// 获取上下文对象
SequentialAgent sequentialAgent = dynamicContext.getSequentialAgent();
// 会话运行节点
InMemoryRunner runner = new InMemoryRunner(sequentialAgent, appName);
// 构建注册对象
AiAgentRegisterVO aiAgentRegisterVO = AiAgentRegisterVO.builder()
.agentId(agentId)
.appName(appName)
.agentName(agentName)
.agentDesc(agentDesc)
.runner(runner)
.build();
// 注册到 Spring 容器
registerBean(agentId, AiAgentRegisterVO.class, aiAgentRegisterVO);
return aiAgentRegisterVO;
}
@Override
public StrategyHandler<ArmoryCommandEntity, DefaultArmoryFactory.DynamicContext, AiAgentRegisterVO> get(ArmoryCommandEntity requestParameter, DefaultArmoryFactory.DynamicContext dynamicContext) throws Exception {
return defaultStrategyHandler;
}
}RunnerNode 的主要职责是构建 InMemoryRunner 这一会话执行节点(在此前的示例中,如 Google ADK 的运行就依赖该组件),并将其注册到 Spring 容器中,以便后续对话过程直接复用。
在注册过程中,会引入 AiAgentRegisterVO 对象对相关信息进行封装,从而实现更清晰的数据管理结构,也方便后续扩展与调用。