refactor(framework): rename AgentConfigManager to AgentConfigLoader and update agent/core wiring

This commit is contained in:
2026-02-21 16:51:59 +08:00
parent f8399d2280
commit b2d44668da
14 changed files with 31 additions and 45 deletions

View File

@@ -1,7 +1,7 @@
package work.slhaf.partner; package work.slhaf.partner;
import work.slhaf.partner.api.agent.Agent; import work.slhaf.partner.api.agent.Agent;
import work.slhaf.partner.common.config.PartnerAgentConfigManager; import work.slhaf.partner.common.config.PartnerAgentConfigLoader;
import work.slhaf.partner.common.vector.VectorClient; import work.slhaf.partner.common.vector.VectorClient;
import work.slhaf.partner.runtime.exception.PartnerExceptionCallback; import work.slhaf.partner.runtime.exception.PartnerExceptionCallback;
import work.slhaf.partner.runtime.interaction.WebSocketGateway; import work.slhaf.partner.runtime.interaction.WebSocketGateway;
@@ -9,7 +9,7 @@ import work.slhaf.partner.runtime.interaction.WebSocketGateway;
public class Main { public class Main {
public static void main(String[] args) { public static void main(String[] args) {
Agent.newAgent(Main.class) Agent.newAgent(Main.class)
.setAgentConfigManager(PartnerAgentConfigManager.class) .setAgentConfigManager(PartnerAgentConfigLoader.class)
.setGateway(WebSocketGateway.class) .setGateway(WebSocketGateway.class)
.setAgentExceptionCallback(PartnerExceptionCallback.class) .setAgentExceptionCallback(PartnerExceptionCallback.class)
.addAfterLaunchRunners(VectorClient::load) .addAfterLaunchRunners(VectorClient::load)

View File

@@ -4,7 +4,7 @@ import cn.hutool.json.JSONUtil;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import work.slhaf.partner.api.agent.factory.config.exception.ConfigNotExistException; import work.slhaf.partner.api.agent.factory.config.exception.ConfigNotExistException;
import work.slhaf.partner.api.agent.runtime.config.FileAgentConfigManager; import work.slhaf.partner.api.agent.runtime.config.FileAgentConfigLoader;
import work.slhaf.partner.common.exception.ConfigLoadFailedException; import work.slhaf.partner.common.exception.ConfigLoadFailedException;
import java.io.File; import java.io.File;
@@ -12,7 +12,7 @@ import java.nio.charset.StandardCharsets;
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@Data @Data
public final class PartnerAgentConfigManager extends FileAgentConfigManager { public final class PartnerAgentConfigLoader extends FileAgentConfigLoader {
private static final String COMMON_CONFIG_FILE = CONFIG_DIR + "common_config.json"; private static final String COMMON_CONFIG_FILE = CONFIG_DIR + "common_config.json";

View File

@@ -4,9 +4,9 @@ import lombok.extern.slf4j.Slf4j;
import org.nd4j.linalg.api.ndarray.INDArray; import org.nd4j.linalg.api.ndarray.INDArray;
import org.nd4j.linalg.factory.Nd4j; import org.nd4j.linalg.factory.Nd4j;
import org.nd4j.linalg.ops.transforms.Transforms; import org.nd4j.linalg.ops.transforms.Transforms;
import work.slhaf.partner.api.agent.runtime.config.AgentConfigManager; import work.slhaf.partner.api.agent.runtime.config.AgentConfigLoader;
import work.slhaf.partner.common.config.Config.VectorConfig; import work.slhaf.partner.common.config.Config.VectorConfig;
import work.slhaf.partner.common.config.PartnerAgentConfigManager; import work.slhaf.partner.common.config.PartnerAgentConfigLoader;
import work.slhaf.partner.common.exception.ServiceLoadFailedException; import work.slhaf.partner.common.exception.ServiceLoadFailedException;
import work.slhaf.partner.common.vector.exception.VectorClientExecuteException; import work.slhaf.partner.common.vector.exception.VectorClientExecuteException;
import work.slhaf.partner.common.vector.exception.VectorClientLoadFailedException; import work.slhaf.partner.common.vector.exception.VectorClientLoadFailedException;
@@ -18,7 +18,7 @@ public abstract class VectorClient {
public static VectorClient INSTANCE; public static VectorClient INSTANCE;
public static void load() { public static void load() {
PartnerAgentConfigManager configManager = (PartnerAgentConfigManager) AgentConfigManager.INSTANCE; PartnerAgentConfigLoader configManager = (PartnerAgentConfigLoader) AgentConfigLoader.INSTANCE;
VectorConfig vectorConfig = configManager.getConfig().getVectorConfig(); VectorConfig vectorConfig = configManager.getConfig().getVectorConfig();
int type = vectorConfig.getType(); int type = vectorConfig.getType();
try { try {

View File

@@ -3,9 +3,9 @@ package work.slhaf.partner.core;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils; import org.apache.commons.io.FileUtils;
import work.slhaf.partner.api.agent.runtime.config.AgentConfigManager; import work.slhaf.partner.api.agent.runtime.config.AgentConfigLoader;
import work.slhaf.partner.api.common.entity.PersistableObject; import work.slhaf.partner.api.common.entity.PersistableObject;
import work.slhaf.partner.common.config.PartnerAgentConfigManager; import work.slhaf.partner.common.config.PartnerAgentConfigLoader;
import java.io.*; import java.io.*;
import java.nio.file.Files; import java.nio.file.Files;
@@ -18,7 +18,7 @@ import static work.slhaf.partner.common.Constant.Path.MEMORY_DATA;
@Slf4j @Slf4j
public abstract class PartnerCore<T extends PartnerCore<T>> extends PersistableObject { public abstract class PartnerCore<T extends PartnerCore<T>> extends PersistableObject {
private final String id = ((PartnerAgentConfigManager) AgentConfigManager.INSTANCE).getConfig().getAgentId(); private final String id = ((PartnerAgentConfigLoader) AgentConfigLoader.INSTANCE).getConfig().getAgentId();
public PartnerCore() throws IOException, ClassNotFoundException { public PartnerCore() throws IOException, ClassNotFoundException {
createStorageDirectory(); createStorageDirectory();

View File

@@ -342,8 +342,8 @@ public class LocalRunnerClient extends RunnerClient {
@Override @Override
public JSONObject listSysDependencies() { public JSONObject listSysDependencies() {
// 先只列出系统/环境的 Python 依赖 // 先只列出系统/环境的 Python 依赖
// TODO 在 AgentConfigManager 内配置启用的脚本语言及对应的扩展名 // TODO 在 AgentConfigLoader 内配置启用的脚本语言及对应的扩展名
// 这里的逻辑后续需要替换为“根据 AgentConfigManager 读取到的脚本语言启用情况,遍历并列出当前系统环境依赖” // 这里的逻辑后续需要替换为“根据 AgentConfigLoader 读取到的脚本语言启用情况,遍历并列出当前系统环境依赖”
// 还需要将返回值调整为相应的数据类 // 还需要将返回值调整为相应的数据类
// 后续还需要将不同语言的处理逻辑分散到不同方法内,这里为了验证,先写死在当前方法 // 后续还需要将不同语言的处理逻辑分散到不同方法内,这里为了验证,先写死在当前方法
JSONObject sysDependencies = new JSONObject(); JSONObject sysDependencies = new JSONObject();

View File

@@ -8,10 +8,10 @@ import org.java_websocket.WebSocket;
import org.java_websocket.framing.Framedata; import org.java_websocket.framing.Framedata;
import org.java_websocket.handshake.ClientHandshake; import org.java_websocket.handshake.ClientHandshake;
import org.java_websocket.server.WebSocketServer; import org.java_websocket.server.WebSocketServer;
import work.slhaf.partner.api.agent.runtime.config.AgentConfigManager; import work.slhaf.partner.api.agent.runtime.config.AgentConfigLoader;
import work.slhaf.partner.api.agent.runtime.interaction.AgentGateway; import work.slhaf.partner.api.agent.runtime.interaction.AgentGateway;
import work.slhaf.partner.api.agent.runtime.interaction.AgentInteractionAdapter; import work.slhaf.partner.api.agent.runtime.interaction.AgentInteractionAdapter;
import work.slhaf.partner.common.config.PartnerAgentConfigManager; import work.slhaf.partner.common.config.PartnerAgentConfigLoader;
import work.slhaf.partner.common.thread.InteractionThreadPoolExecutor; import work.slhaf.partner.common.thread.InteractionThreadPoolExecutor;
import work.slhaf.partner.runtime.interaction.data.PartnerInputData; import work.slhaf.partner.runtime.interaction.data.PartnerInputData;
import work.slhaf.partner.runtime.interaction.data.PartnerOutputData; import work.slhaf.partner.runtime.interaction.data.PartnerOutputData;
@@ -33,7 +33,7 @@ public class WebSocketGateway extends WebSocketServer implements AgentGateway<Pa
private final ConcurrentHashMap<WebSocket, Long> lastPongTimes = new ConcurrentHashMap<>(); private final ConcurrentHashMap<WebSocket, Long> lastPongTimes = new ConcurrentHashMap<>();
public WebSocketGateway() { public WebSocketGateway() {
this(((PartnerAgentConfigManager) AgentConfigManager.INSTANCE).getConfig().getWebSocketConfig().getPort()); this(((PartnerAgentConfigLoader) AgentConfigLoader.INSTANCE).getConfig().getWebSocketConfig().getPort());
} }
private WebSocketGateway(int port) { private WebSocketGateway(int port) {

View File

@@ -2,7 +2,7 @@ package work.slhaf.partner.api.agent;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import work.slhaf.partner.api.agent.factory.AgentRegisterFactory; import work.slhaf.partner.api.agent.factory.AgentRegisterFactory;
import work.slhaf.partner.api.agent.runtime.config.AgentConfigManager; import work.slhaf.partner.api.agent.runtime.config.AgentConfigLoader;
import work.slhaf.partner.api.agent.runtime.exception.AgentExceptionCallback; import work.slhaf.partner.api.agent.runtime.exception.AgentExceptionCallback;
import work.slhaf.partner.api.agent.runtime.exception.AgentLaunchFailedException; import work.slhaf.partner.api.agent.runtime.exception.AgentLaunchFailedException;
import work.slhaf.partner.api.agent.runtime.exception.GlobalExceptionHandler; import work.slhaf.partner.api.agent.runtime.exception.GlobalExceptionHandler;
@@ -29,7 +29,7 @@ public final class Agent {
} }
public interface AgentConfigManagerStep { public interface AgentConfigManagerStep {
AgentGatewayStep setAgentConfigManager(Class<? extends AgentConfigManager> agentConfigManager); AgentGatewayStep setAgentConfigManager(Class<? extends AgentConfigLoader> agentConfigManager);
} }
public interface AgentGatewayStep { public interface AgentGatewayStep {
@@ -59,7 +59,7 @@ public final class Agent {
private final Class<?> applicationClass; private final Class<?> applicationClass;
private final CountDownLatch latch = new CountDownLatch(1); private final CountDownLatch latch = new CountDownLatch(1);
private AgentGateway gateway; private AgentGateway gateway;
private Class<? extends AgentConfigManager> agentConfigManagerClass; private Class<? extends AgentConfigLoader> agentConfigManagerClass;
private Class<? extends AgentGateway> gatewayClass; private Class<? extends AgentGateway> gatewayClass;
private Class<? extends AgentExceptionCallback> agentExceptionCallbackClass; private Class<? extends AgentExceptionCallback> agentExceptionCallbackClass;
@@ -86,7 +86,7 @@ public final class Agent {
} }
@Override @Override
public AgentGatewayStep setAgentConfigManager(Class<? extends AgentConfigManager> agentConfigManager) { public AgentGatewayStep setAgentConfigManager(Class<? extends AgentConfigLoader> agentConfigManager) {
this.agentConfigManagerClass = agentConfigManager; this.agentConfigManagerClass = agentConfigManager;
return this; return this;
} }
@@ -134,7 +134,7 @@ public final class Agent {
private void beforeLaunch() { private void beforeLaunch() {
try { try {
AgentConfigManager.setINSTANCE(agentConfigManagerClass.getDeclaredConstructor().newInstance()); AgentConfigLoader.setINSTANCE(agentConfigManagerClass.getDeclaredConstructor().newInstance());
log.info("配置管理器设置完毕: {}", agentConfigManagerClass.getSimpleName()); log.info("配置管理器设置完毕: {}", agentConfigManagerClass.getSimpleName());
GlobalExceptionHandler.setExceptionCallback(agentExceptionCallbackClass.getDeclaredConstructor().newInstance()); GlobalExceptionHandler.setExceptionCallback(agentExceptionCallbackClass.getDeclaredConstructor().newInstance());
log.info("异常处理回调设置完毕: {}", agentExceptionCallbackClass.getSimpleName()); log.info("异常处理回调设置完毕: {}", agentExceptionCallbackClass.getSimpleName());

View File

@@ -1,21 +1,7 @@
package work.slhaf.partner.api.agent.factory; package work.slhaf.partner.api.agent.factory;
import work.slhaf.partner.api.agent.factory.capability.exception.CapabilityFactoryExecuteFailedException;
import work.slhaf.partner.api.agent.factory.context.AgentRegisterContext; import work.slhaf.partner.api.agent.factory.context.AgentRegisterContext;
import java.lang.reflect.InvocationTargetException;
public abstract class AgentBaseFactory { public abstract class AgentBaseFactory {
public void execute(AgentRegisterContext context) { abstract void execute(AgentRegisterContext context);
try {
setVariables(context);
run();
} catch (Exception e) {
throw new CapabilityFactoryExecuteFailedException(e.getMessage(), e);
}
}
protected abstract void setVariables(AgentRegisterContext context);
protected abstract void run() throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException;
} }

View File

@@ -4,10 +4,10 @@ import work.slhaf.partner.api.agent.runtime.exception.AgentLaunchFailedException
public class ConfigFactoryInitFailedException extends AgentLaunchFailedException { public class ConfigFactoryInitFailedException extends AgentLaunchFailedException {
public ConfigFactoryInitFailedException(String message, Throwable cause) { public ConfigFactoryInitFailedException(String message, Throwable cause) {
super("AgentConfigManager 执行失败: " + message, cause); super("AgentConfigLoader 执行失败: " + message, cause);
} }
public ConfigFactoryInitFailedException(String message) { public ConfigFactoryInitFailedException(String message) {
super("AgentConfigManager 执行失败: " + message); super("AgentConfigLoader 执行失败: " + message);
} }
} }

View File

@@ -13,7 +13,7 @@ public class AgentRegisterContext {
private Reflections reflections; private Reflections reflections;
private CapabilityFactoryContext capabilityFactoryContext = new CapabilityFactoryContext(); private CapabilityFactoryContext capabilityFactoryContext = new CapabilityFactoryContext();
private ConfigFactoryContext configFactoryContext = new ConfigFactoryContext(); private ConfigFactoryContext configFactoryContext = new ConfigFactoryContext();
private ModuleFactoryContext moduleFactoryContext = new ModuleFactoryContext(); private AgentContext agentContext = AgentContext.INSTANCE;
public AgentRegisterContext(List<URL> urls) { public AgentRegisterContext(List<URL> urls) {
reflections = new Reflections(new ConfigurationBuilder().setScanners( reflections = new Reflections(new ConfigurationBuilder().setScanners(

View File

@@ -4,7 +4,7 @@ import org.slf4j.Logger
import org.slf4j.LoggerFactory import org.slf4j.LoggerFactory
import work.slhaf.partner.api.agent.factory.AgentComponent import work.slhaf.partner.api.agent.factory.AgentComponent
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.runtime.config.AgentConfigManager import work.slhaf.partner.api.agent.runtime.config.AgentConfigLoader
import work.slhaf.partner.api.agent.runtime.interaction.flow.entity.RunningFlowContext import work.slhaf.partner.api.agent.runtime.interaction.flow.entity.RunningFlowContext
import work.slhaf.partner.api.chat.ChatClient import work.slhaf.partner.api.chat.ChatClient
import work.slhaf.partner.api.chat.constant.ChatConstant import work.slhaf.partner.api.chat.constant.ChatConstant
@@ -47,7 +47,7 @@ interface ActivateModel {
companion object { companion object {
val modelMap: MutableMap<String, Model> = mutableMapOf() val modelMap: MutableMap<String, Model> = mutableMapOf()
private val configManager: AgentConfigManager = AgentConfigManager.INSTANCE private val configManager: AgentConfigLoader = AgentConfigLoader.INSTANCE
} }
@Init(order = -1) @Init(order = -1)

View File

@@ -13,11 +13,11 @@ import java.util.*;
@Slf4j @Slf4j
@Data @Data
public abstract class AgentConfigManager { public abstract class AgentConfigLoader {
private static final String DEFAULT_KEY = "default"; private static final String DEFAULT_KEY = "default";
@Setter @Setter
public static AgentConfigManager INSTANCE; public static AgentConfigLoader INSTANCE;
protected HashMap<String, ModelConfig> modelConfigMap; protected HashMap<String, ModelConfig> modelConfigMap;
protected HashMap<String, List<Message>> modelPromptMap; protected HashMap<String, List<Message>> modelPromptMap;
protected HashMap<String, Boolean> moduleEnabledStatus; protected HashMap<String, Boolean> moduleEnabledStatus;

View File

@@ -22,7 +22,7 @@ import java.util.List;
* 将从当前运行目录的config文件夹下创建并读取配置 * 将从当前运行目录的config文件夹下创建并读取配置
*/ */
@Slf4j @Slf4j
public class FileAgentConfigManager extends AgentConfigManager { public class FileAgentConfigLoader extends AgentConfigLoader {
protected static final String CONFIG_DIR = "./config/"; protected static final String CONFIG_DIR = "./config/";
protected static final String MODEL_CONFIG_DIR = "./config/model/"; protected static final String MODEL_CONFIG_DIR = "./config/model/";

View File

@@ -1,7 +1,7 @@
package work.slhaf.partner.api.agent.runtime.interaction; package work.slhaf.partner.api.agent.runtime.interaction;
import work.slhaf.partner.api.agent.factory.module.pojo.MetaModule; import work.slhaf.partner.api.agent.factory.module.pojo.MetaModule;
import work.slhaf.partner.api.agent.runtime.config.AgentConfigManager; 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.AgentInputData;
import work.slhaf.partner.api.agent.runtime.interaction.data.AgentOutputData; 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.AgentRunningFlow;
@@ -13,7 +13,7 @@ import java.util.Map;
public abstract class AgentInteractionAdapter<I extends AgentInputData, O extends AgentOutputData, C extends RunningFlowContext> { public abstract class AgentInteractionAdapter<I extends AgentInputData, O extends AgentOutputData, C extends RunningFlowContext> {
protected AgentRunningFlow<C> agentRunningFlow = new AgentRunningFlow<>(); protected AgentRunningFlow<C> agentRunningFlow = new AgentRunningFlow<>();
protected Map<Integer, List<MetaModule>> moduleOrderedMap = AgentConfigManager.INSTANCE.getModuleOrderedMap(); protected Map<Integer, List<MetaModule>> moduleOrderedMap = AgentConfigLoader.INSTANCE.getModuleOrderedMap();
public C call(C finalInputData) { public C call(C finalInputData) {
return agentRunningFlow.launch(moduleOrderedMap, finalInputData); return agentRunningFlow.launch(moduleOrderedMap, finalInputData);