diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/Agent.java b/Partner-Api/src/main/java/work/slhaf/partner/api/Agent.java index c1a63ca3..11a1a5e4 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/Agent.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/Agent.java @@ -4,14 +4,33 @@ import work.slhaf.partner.api.entity.AgentContext; import work.slhaf.partner.api.factory.AgentRegisterFactory; import work.slhaf.partner.api.flow.AgentInteraction; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + /** * Agent启动类 */ public class Agent { + private static final List runners = new ArrayList<>(); + public static void run(Class clazz) { AgentContext context = AgentRegisterFactory.launch(clazz.getPackage().getName()); AgentInteraction.launch(context); + launchRunners(); } + private static void launchRunners() { + ExecutorService executorService = Executors.newVirtualThreadPerTaskExecutor(); + for (Runnable runner : runners) { + executorService.execute(runner); + } + executorService.close(); + } + + public static void addRunner(Runnable runnable) { + runners.add(runnable); + } } diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/flow/abstracts/Model.java b/Partner-Api/src/main/java/work/slhaf/partner/api/common/chat/Model.java similarity index 71% rename from Partner-Api/src/main/java/work/slhaf/partner/api/flow/abstracts/Model.java rename to Partner-Api/src/main/java/work/slhaf/partner/api/common/chat/Model.java index 82b24bc7..a6d4ff78 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/flow/abstracts/Model.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/common/chat/Model.java @@ -1,7 +1,6 @@ -package work.slhaf.partner.api.flow.abstracts; +package work.slhaf.partner.api.common.chat; import lombok.Data; -import work.slhaf.partner.api.common.chat.ChatClient; import work.slhaf.partner.api.common.chat.pojo.Message; import java.util.List; diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/factory/AgentRegisterFactory.java b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/AgentRegisterFactory.java index 1623c65a..00230bcb 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/factory/AgentRegisterFactory.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/AgentRegisterFactory.java @@ -2,6 +2,7 @@ package work.slhaf.partner.api.factory; import cn.hutool.core.bean.BeanUtil; import work.slhaf.partner.api.entity.AgentContext; +import work.slhaf.partner.api.factory.config.ConfigLoaderFactory; import work.slhaf.partner.api.factory.entity.AgentRegisterContext; import work.slhaf.partner.api.factory.capability.CapabilityCheckFactory; import work.slhaf.partner.api.factory.capability.CapabilityRegisterFactory; @@ -16,6 +17,8 @@ public class AgentRegisterFactory { public static AgentContext launch(String path) { AgentRegisterContext registerContext = new AgentRegisterContext(path); //流程 + //0. 加载配置 + new ConfigLoaderFactory().execute(registerContext); //1. 执行register和check逻辑 new CapabilityRegisterFactory().execute(registerContext); new CapabilityCheckFactory().execute(registerContext); diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/CapabilityCheckFactory.java b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/CapabilityCheckFactory.java index 13f60918..32cc6e80 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/CapabilityCheckFactory.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/CapabilityCheckFactory.java @@ -16,6 +16,9 @@ import java.util.stream.Collectors; import static work.slhaf.partner.api.common.util.AgentUtil.methodSignature; +/** + * 执行Capability相关检查 + */ public class CapabilityCheckFactory extends AgentBaseFactory { private Reflections reflections; @@ -38,6 +41,9 @@ public class CapabilityCheckFactory extends AgentBaseFactory { checkInjectCapability(); } + /** + * 检查@InjectCapability注解是否只用在@CapabilityHolder所标识类的字段上 + */ private void checkInjectCapability() { reflections.getFieldsAnnotatedWith(InjectCapability.class).forEach(field -> { if (!field.getDeclaringClass().isAssignableFrom(CapabilityHolder.class)) { @@ -46,6 +52,9 @@ public class CapabilityCheckFactory extends AgentBaseFactory { }); } + /** + * 检查是否包含协调方法,如果存在,则进一步检查是否存在@CoordinateManager提供对应的实现 + */ private void checkCoordinatedMethods() { //检查各个capability中是否含有ToCoordinated注解 //如果含有,则需要查找AbstractCognationManager的子类,看这里是否有对应的Coordinated注解所在方法 @@ -93,6 +102,9 @@ public class CapabilityCheckFactory extends AgentBaseFactory { return methodsCoordinated; } + /** + * 查看在Capability在对应的CapabilityCore中存在尚未实现的方法 + */ private void checkCapabilityMethods() { HashMap> capabilitiesMethods = getCapabilityMethods(capabilities); StringBuilder sb = new StringBuilder(); @@ -151,6 +163,9 @@ public class CapabilityCheckFactory extends AgentBaseFactory { return capabilityMethods; } + /** + * 检查CapabilityCapabilityCore的数量和标识是否匹配 + */ private void checkCountAndCapabilities() { if (cores.size() != capabilities.size()) { throw new UnMatchedCapabilityException("Capability 注册异常: 已存在的CapabilityCore与Capability数量不匹配!"); diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/CapabilityInjectFactory.java b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/CapabilityInjectFactory.java index 7170b337..b905293d 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/CapabilityInjectFactory.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/CapabilityInjectFactory.java @@ -6,7 +6,7 @@ import work.slhaf.partner.api.factory.entity.AgentRegisterContext; import work.slhaf.partner.api.factory.capability.annotation.Capability; import work.slhaf.partner.api.factory.capability.annotation.InjectCapability; import work.slhaf.partner.api.factory.capability.annotation.ToCoordinated; -import work.slhaf.partner.api.factory.capability.exception.ProxySetFailedException; +import work.slhaf.partner.api.factory.capability.exception.ProxySetFailedExceptionCapability; import java.lang.reflect.Field; import java.lang.reflect.Proxy; @@ -16,6 +16,9 @@ import java.util.function.Function; import static work.slhaf.partner.api.common.util.AgentUtil.methodSignature; +/** + * 负责执行Capability的注入逻辑 + */ public class CapabilityInjectFactory extends AgentBaseFactory { private Reflections reflections; @@ -37,7 +40,6 @@ public class CapabilityInjectFactory extends AgentBaseFactory { Set fields = reflections.getFieldsAnnotatedWith(InjectCapability.class); //在动态代理内部,通过函数路由表调用对应的方法 createProxy(fields); - } private void createProxy(Set fields) { @@ -60,7 +62,7 @@ public class CapabilityInjectFactory extends AgentBaseFactory { field.set(capabilityHolderInstances.get(field.getDeclaringClass()), instance); } } catch (Exception e) { - throw new ProxySetFailedException("代理设置失败", e); + throw new ProxySetFailedExceptionCapability("代理设置失败", e); } } diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/CapabilityRegisterFactory.java b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/CapabilityRegisterFactory.java index 56e28c68..adc309db 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/CapabilityRegisterFactory.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/CapabilityRegisterFactory.java @@ -4,9 +4,9 @@ import org.reflections.Reflections; import work.slhaf.partner.api.factory.entity.AgentBaseFactory; import work.slhaf.partner.api.factory.entity.AgentRegisterContext; import work.slhaf.partner.api.factory.capability.annotation.*; -import work.slhaf.partner.api.factory.capability.exception.CoreInstancesCreateFailedException; +import work.slhaf.partner.api.factory.capability.exception.CoreInstancesCreateFailedExceptionCapability; import work.slhaf.partner.api.factory.capability.exception.DuplicateMethodException; -import work.slhaf.partner.api.factory.capability.exception.FactoryExecuteFailedException; +import work.slhaf.partner.api.factory.capability.exception.CapabilityFactoryExecuteFailedException; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; @@ -16,9 +16,13 @@ import java.util.HashMap; import java.util.Set; import java.util.function.Function; +import static cn.hutool.core.util.ClassUtil.isNormalClass; import static work.slhaf.partner.api.common.util.AgentUtil.methodSignature; +/** + * 负责获取@Capability@CapabilityCore标识的类,并生成函数路由表、设置Core实例用于后续注入 + */ public final class CapabilityRegisterFactory extends AgentBaseFactory { private Reflections reflections; @@ -35,19 +39,22 @@ public final class CapabilityRegisterFactory extends AgentBaseFactory { methodsRouterTable = context.getMethodsRouterTable(); coordinatedMethodsRouterTable = context.getCoordinatedMethodsRouterTable(); capabilityCoreInstances = context.getCapabilityCoreInstances(); - capabilityHolderInstances = context.getCapabilityHolderInstances(); cores = context.getCores(); capabilities = context.getCapabilities(); + capabilityHolderInstances = context.getCapabilityHolderInstances(); } @Override - protected void run() throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException { + protected void run() throws InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException { setCapabilityCoreInstances(); setAnnotatedClasses(); generateRouterTable(); } - private void setAnnotatedClasses() throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException { + /** + * 设置CapabilityCoreCapability注解标识类 + */ + private void setAnnotatedClasses() throws InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException { cores.addAll(reflections.getTypesAnnotatedWith(CapabilityCore.class)); capabilities.addAll(reflections.getTypesAnnotatedWith(Capability.class)); setCapabilityHolderInstances(); @@ -55,16 +62,25 @@ public final class CapabilityRegisterFactory extends AgentBaseFactory { private void setCapabilityHolderInstances() throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException { for (Class clazz : reflections.getTypesAnnotatedWith(CapabilityHolder.class)) { + if (!isNormalClass(clazz)){ + continue; + } Object o = clazz.getDeclaredConstructor().newInstance(); capabilityHolderInstances.put(clazz, o); } } + /** + * 生成函数路由表 + */ private void generateRouterTable() { generateMethodsRouterTable(); generateCoordinatedMethodsRouterTable(); } + /** + * 生成协调函数对应的函数路由表 + */ private void generateCoordinatedMethodsRouterTable() { Set methodsAnnotatedWith = reflections.getMethodsAnnotatedWith(Coordinated.class); if (methodsAnnotatedWith.isEmpty()) { @@ -85,11 +101,14 @@ public final class CapabilityRegisterFactory extends AgentBaseFactory { coordinatedMethodsRouterTable.put(key, function); }); } catch (Exception e) { - throw new FactoryExecuteFailedException("创建协调方法路由表出错", e); + throw new CapabilityFactoryExecuteFailedException("创建协调方法路由表出错", e); } } + /** + * 获取CoordinateManager子类实例 + */ private HashMap getCoordinateManagerInstances() throws InvocationTargetException, InstantiationException, IllegalAccessException, NoSuchMethodException { HashMap map = new HashMap<>(); for (Class c : reflections.getTypesAnnotatedWith(CoordinateManager.class)) { @@ -106,6 +125,9 @@ public final class CapabilityRegisterFactory extends AgentBaseFactory { return map; } + /** + * 生成普通方法对应的函数路由表 + */ private void generateMethodsRouterTable() { //扫描`@Capability`与`@CapabilityMethod`注解的类与方法 //将`capabilityValue.methodSignature`作为key,函数对象为通过反射拿到的core实例对应的方法 @@ -127,6 +149,9 @@ public final class CapabilityRegisterFactory extends AgentBaseFactory { })); } + /** + * 反射获取CapabilityCore实例 + */ private void setCapabilityCoreInstances() { try { for (Class core : cores) { @@ -136,7 +161,7 @@ public final class CapabilityRegisterFactory extends AgentBaseFactory { } } catch (InvocationTargetException | NoSuchMethodException | InstantiationException | IllegalAccessException e) { - throw new CoreInstancesCreateFailedException("core实例创建失败"); + throw new CoreInstancesCreateFailedExceptionCapability("core实例创建失败"); } } } diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/exception/CapabilityFactoryExecuteFailedException.java b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/exception/CapabilityFactoryExecuteFailedException.java new file mode 100644 index 00000000..e24815c7 --- /dev/null +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/exception/CapabilityFactoryExecuteFailedException.java @@ -0,0 +1,11 @@ +package work.slhaf.partner.api.factory.capability.exception; + +public class CapabilityFactoryExecuteFailedException extends RuntimeException { + public CapabilityFactoryExecuteFailedException(String message) { + super("CapabilityRegisterFactory 执行失败: " + message); + } + + public CapabilityFactoryExecuteFailedException(String message, Throwable cause) { + super("CapabilityRegisterFactory 执行失败: " + message, cause); + } +} diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/exception/CoreInstancesCreateFailedException.java b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/exception/CoreInstancesCreateFailedException.java deleted file mode 100644 index 6031b82e..00000000 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/exception/CoreInstancesCreateFailedException.java +++ /dev/null @@ -1,11 +0,0 @@ -package work.slhaf.partner.api.factory.capability.exception; - -public class CoreInstancesCreateFailedException extends FactoryExecuteFailedException { - public CoreInstancesCreateFailedException(String message) { - super(message); - } - - public CoreInstancesCreateFailedException(String message, Throwable cause) { - super(message, cause); - } -} diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/exception/CoreInstancesCreateFailedExceptionCapability.java b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/exception/CoreInstancesCreateFailedExceptionCapability.java new file mode 100644 index 00000000..ad470d69 --- /dev/null +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/exception/CoreInstancesCreateFailedExceptionCapability.java @@ -0,0 +1,11 @@ +package work.slhaf.partner.api.factory.capability.exception; + +public class CoreInstancesCreateFailedExceptionCapability extends CapabilityFactoryExecuteFailedException { + public CoreInstancesCreateFailedExceptionCapability(String message) { + super(message); + } + + public CoreInstancesCreateFailedExceptionCapability(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/exception/FactoryExecuteFailedException.java b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/exception/FactoryExecuteFailedException.java deleted file mode 100644 index bd04cad0..00000000 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/exception/FactoryExecuteFailedException.java +++ /dev/null @@ -1,11 +0,0 @@ -package work.slhaf.partner.api.factory.capability.exception; - -public class FactoryExecuteFailedException extends RuntimeException { - public FactoryExecuteFailedException(String message) { - super("CapabilityRegisterFactory 执行失败: " + message); - } - - public FactoryExecuteFailedException(String message, Throwable cause) { - super("CapabilityRegisterFactory 执行失败: " + message, cause); - } -} diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/exception/ProxySetFailedException.java b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/exception/ProxySetFailedException.java deleted file mode 100644 index 91ab94da..00000000 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/exception/ProxySetFailedException.java +++ /dev/null @@ -1,11 +0,0 @@ -package work.slhaf.partner.api.factory.capability.exception; - -public class ProxySetFailedException extends FactoryExecuteFailedException{ - public ProxySetFailedException(String message) { - super(message); - } - - public ProxySetFailedException(String message, Throwable cause) { - super(message, cause); - } -} diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/exception/ProxySetFailedExceptionCapability.java b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/exception/ProxySetFailedExceptionCapability.java new file mode 100644 index 00000000..3f7170b0 --- /dev/null +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/capability/exception/ProxySetFailedExceptionCapability.java @@ -0,0 +1,11 @@ +package work.slhaf.partner.api.factory.capability.exception; + +public class ProxySetFailedExceptionCapability extends CapabilityFactoryExecuteFailedException { + public ProxySetFailedExceptionCapability(String message) { + super(message); + } + + public ProxySetFailedExceptionCapability(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/factory/config/ConfigLoaderFactory.java b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/config/ConfigLoaderFactory.java new file mode 100644 index 00000000..d473158a --- /dev/null +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/config/ConfigLoaderFactory.java @@ -0,0 +1,22 @@ +package work.slhaf.partner.api.factory.config; + +import work.slhaf.partner.api.factory.entity.AgentBaseFactory; +import work.slhaf.partner.api.factory.entity.AgentRegisterContext; + +public class ConfigLoaderFactory extends AgentBaseFactory { + + @Override + protected void setVariables(AgentRegisterContext context) { + + } + + @Override + protected void run() { + //反射获取是否存在其他的ModelConfigFactory子类,如果存在,则不使用默认配置工厂 + ModelConfigFactory factory; + if (){ + + } + factory.load(); + } +} diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/factory/config/DefaultModelConfigFactory.java b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/config/DefaultModelConfigFactory.java new file mode 100644 index 00000000..fc4bcf43 --- /dev/null +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/config/DefaultModelConfigFactory.java @@ -0,0 +1,29 @@ +package work.slhaf.partner.api.factory.config; + +import work.slhaf.partner.api.common.chat.pojo.Message; +import work.slhaf.partner.api.factory.config.pojo.ModelConfig; + +import java.util.HashMap; +import java.util.List; + +/** + * 默认配置工厂 + * 将从当前运行目录的config文件夹下创建并读取配置 + */ +public class DefaultModelConfigFactory extends ModelConfigFactory { + + private static final String MODEL_CONFIG_DIR = "./config/model/"; + private static final String PROMPT_CONFIG_DIR = "./config/prompt/"; + + + @Override + protected HashMap> loadPrompt() { + + return null; + } + + @Override + protected HashMap loadConfig() { + return null; + } +} diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/factory/config/ModelConfigFactory.java b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/config/ModelConfigFactory.java new file mode 100644 index 00000000..673e7c05 --- /dev/null +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/config/ModelConfigFactory.java @@ -0,0 +1,53 @@ +package work.slhaf.partner.api.factory.config; + +import work.slhaf.partner.api.common.chat.pojo.Message; +import work.slhaf.partner.api.factory.config.exception.UnExistModelConfigException; +import work.slhaf.partner.api.factory.config.exception.UnExistModelPromptException; +import work.slhaf.partner.api.factory.config.pojo.ModelConfig; + +import java.util.HashMap; +import java.util.List; + +public abstract class ModelConfigFactory { + + public static ModelConfigFactory factory; + protected HashMap modelConfigMap; + protected HashMap> modelPromptMap; + + public ModelConfigFactory() { + factory = this; + } + + public void load() { + modelConfigMap = loadConfig(); + modelPromptMap = loadPrompt(); + } + + protected abstract HashMap> loadPrompt(); + + protected abstract HashMap loadConfig(); + + + public List loadModelPrompt(String modelKey){ + if (!modelPromptMap.containsKey(modelKey)){ + throw new UnExistModelPromptException("不存在的modelPrompt: "+modelKey); + } + return modelPromptMap.get(modelKey); + } + + public ModelConfig loadModelConfig(String modelKey) { + if (!modelConfigMap.containsKey(modelKey)) { + throw new UnExistModelConfigException("不存在的modelKey: " + modelKey); + } + return modelConfigMap.get(modelKey); + } + + public void updateModelConfig(String modelKey, ModelConfig config) { + if (!modelConfigMap.containsKey(modelKey)) { + throw new UnExistModelConfigException("不存在的modelKey: " + modelKey); + } + modelConfigMap.get(modelKey).setModel(config.getModel()); + modelConfigMap.get(modelKey).setBaseUrl(config.getBaseUrl()); + modelConfigMap.get(modelKey).setApikey(config.getApikey()); + } +} diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/factory/config/exception/ModelConfigFactoryFailedException.java b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/config/exception/ModelConfigFactoryFailedException.java new file mode 100644 index 00000000..90c7b9bd --- /dev/null +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/config/exception/ModelConfigFactoryFailedException.java @@ -0,0 +1,11 @@ +package work.slhaf.partner.api.factory.config.exception; + +public class ModelConfigFactoryFailedException extends RuntimeException { + public ModelConfigFactoryFailedException(String message, Throwable cause) { + super("ModelConfigFactory 执行失败: " + message, cause); + } + + public ModelConfigFactoryFailedException(String message) { + super("ModelConfigFactory 执行失败: " + message); + } +} diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/factory/config/exception/UnExistModelConfigException.java b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/config/exception/UnExistModelConfigException.java new file mode 100644 index 00000000..07d27301 --- /dev/null +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/config/exception/UnExistModelConfigException.java @@ -0,0 +1,11 @@ +package work.slhaf.partner.api.factory.config.exception; + +public class UnExistModelConfigException extends ModelConfigFactoryFailedException { + public UnExistModelConfigException(String message, Throwable e) { + super(message, e); + } + + public UnExistModelConfigException(String message) { + super(message); + } +} diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/factory/config/exception/UnExistModelPromptException.java b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/config/exception/UnExistModelPromptException.java new file mode 100644 index 00000000..2ebf7125 --- /dev/null +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/config/exception/UnExistModelPromptException.java @@ -0,0 +1,11 @@ +package work.slhaf.partner.api.factory.config.exception; + +public class UnExistModelPromptException extends ModelConfigFactoryFailedException{ + public UnExistModelPromptException(String message) { + super(message); + } + + public UnExistModelPromptException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/factory/config/pojo/ModelConfig.java b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/config/pojo/ModelConfig.java new file mode 100644 index 00000000..4fc6bbd2 --- /dev/null +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/config/pojo/ModelConfig.java @@ -0,0 +1,10 @@ +package work.slhaf.partner.api.factory.config.pojo; + +import lombok.Data; + +@Data +public class ModelConfig { + private String baseUrl; + private String apikey; + private String model; +} diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/factory/entity/AgentBaseFactory.java b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/entity/AgentBaseFactory.java index b7c37953..db2a74c8 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/factory/entity/AgentBaseFactory.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/entity/AgentBaseFactory.java @@ -1,6 +1,6 @@ package work.slhaf.partner.api.factory.entity; -import work.slhaf.partner.api.factory.capability.exception.FactoryExecuteFailedException; +import work.slhaf.partner.api.factory.capability.exception.CapabilityFactoryExecuteFailedException; import java.lang.reflect.InvocationTargetException; @@ -10,7 +10,7 @@ public abstract class AgentBaseFactory { setVariables(context); run(); } catch (Exception e) { - throw new FactoryExecuteFailedException(e.getMessage(), e); + throw new CapabilityFactoryExecuteFailedException(e.getMessage(), e); } } diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/factory/module/ModuleRegisterFactory.java b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/module/ModuleRegisterFactory.java index dcb016d0..c284df29 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/factory/module/ModuleRegisterFactory.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/module/ModuleRegisterFactory.java @@ -4,6 +4,9 @@ import org.reflections.Reflections; import work.slhaf.partner.api.factory.entity.AgentBaseFactory; import work.slhaf.partner.api.factory.entity.AgentRegisterContext; +/** + * 负责扫描@Module注解获取模块实例 + */ public class ModuleRegisterFactory extends AgentBaseFactory { private Reflections reflections; diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/factory/module/annotation/AgentModule.java b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/module/annotation/AgentModule.java index c12e6c33..6b3a3be3 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/factory/module/annotation/AgentModule.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/module/annotation/AgentModule.java @@ -1,9 +1,7 @@ package work.slhaf.partner.api.factory.module.annotation; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; + +import java.lang.annotation.*; /** * 用于注解执行模块 diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/factory/module/annotation/CoreModule.java b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/module/annotation/CoreModule.java new file mode 100644 index 00000000..e6986138 --- /dev/null +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/factory/module/annotation/CoreModule.java @@ -0,0 +1,5 @@ +package work.slhaf.partner.api.factory.module.annotation; + +@AgentModule(name = "core",order = 5) +public @interface CoreModule { +} diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/flow/abstracts/ActivateModel.java b/Partner-Api/src/main/java/work/slhaf/partner/api/flow/abstracts/ActivateModel.java index 5e2a2e19..a2668457 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/flow/abstracts/ActivateModel.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/flow/abstracts/ActivateModel.java @@ -1,9 +1,12 @@ package work.slhaf.partner.api.flow.abstracts; import work.slhaf.partner.api.common.chat.ChatClient; +import work.slhaf.partner.api.common.chat.Model; import work.slhaf.partner.api.common.chat.constant.ChatConstant; import work.slhaf.partner.api.common.chat.pojo.ChatResponse; import work.slhaf.partner.api.common.chat.pojo.Message; +import work.slhaf.partner.api.factory.config.ModelConfigFactory; +import work.slhaf.partner.api.factory.config.pojo.ModelConfig; import work.slhaf.partner.api.factory.module.annotation.Before; import java.util.ArrayList; @@ -11,13 +14,22 @@ import java.util.List; public interface ActivateModel { - @Before default void modelSettings() { -// Model model = new Model(); -// ModelConfig modelConfig = ModelConfig.load(modelKey()); -// model.setBaseMessages(withAwareness() ? ResourcesUtil.Prompt.loadPromptWithSelfAwareness(modelKey(), promptModule()) : ResourcesUtil.Prompt.loadPrompt(modelKey(), promptModule())); -// model.setChatClient(new ChatClient(modelConfig.getBaseUrl(), modelConfig.getApikey(), modelConfig.getModel())); + Model model = new Model(); + ModelConfig modelConfig = ModelConfigFactory.factory.loadModelConfig(modelKey()); + model.setBaseMessages(withBasicPrompt() ? loadSpecificPromptAndBasicPrompt(modelKey(), promptModule()) : loadSpecificPrompt(modelKey(), promptModule())); + model.setChatClient(new ChatClient(modelConfig.getBaseUrl(), modelConfig.getApikey(), modelConfig.getModel())); + } + + private List loadSpecificPrompt(String modelKey, String specificModule) { + + return null; + } + + private List loadSpecificPromptAndBasicPrompt(String modelKey, String specificModule) { + + return null; } default ChatResponse chat() { @@ -68,7 +80,7 @@ public interface ActivateModel { String modelKey(); - boolean withAwareness(); + boolean withBasicPrompt(); String promptModule(); } diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/flow/abstracts/Module.java b/Partner-Api/src/main/java/work/slhaf/partner/api/flow/abstracts/Module.java index acdbec1f..abe47ea7 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/flow/abstracts/Module.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/flow/abstracts/Module.java @@ -2,8 +2,12 @@ package work.slhaf.partner.api.flow.abstracts; import lombok.Getter; import lombok.Setter; +import work.slhaf.partner.api.common.chat.Model; import work.slhaf.partner.api.factory.capability.annotation.CapabilityHolder; +/** + * 模块基类 + */ @CapabilityHolder public abstract class Module { diff --git a/Partner-Main/src/main/java/work/slhaf/partner/common/util/ResourcesUtil.java b/Partner-Main/src/main/java/work/slhaf/partner/common/util/ResourcesUtil.java index 60091270..e3cceb83 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/common/util/ResourcesUtil.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/common/util/ResourcesUtil.java @@ -14,7 +14,7 @@ public class ResourcesUtil { private static final ClassLoader classloader = Agent.class.getClassLoader(); public static class Prompt { - private static final String SELF_AWARENESS_PATH = "prompt/self_awareness.json"; + private static final String SELF_AWARENESS_PATH = "prompt/basic_prompt.json"; private static final String MODULE_PROMPT_PREFIX_PATH = "prompt/module/"; public static List loadPromptWithSelfAwareness(String modelKey, String promptType) { diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/core/CoreModel.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/core/CoreModel.java index f956ba38..fa16bd31 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/core/CoreModel.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/core/CoreModel.java @@ -69,7 +69,7 @@ public class CoreModel extends CoreModule implements ActivateModel { } @Override - public boolean withAwareness() { + public boolean withBasicPrompt() { return true; } diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/SliceSelectEvaluator.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/SliceSelectEvaluator.java index 2e816280..5cf79187 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/SliceSelectEvaluator.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/SliceSelectEvaluator.java @@ -141,7 +141,7 @@ public class SliceSelectEvaluator extends AgentInteractionSubModule,Vo } @Override - public boolean withAwareness() { + public boolean withBasicPrompt() { return false; } diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/updater/summarizer/TotalSummarizer.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/updater/summarizer/TotalSummarizer.java index a1326129..ad706ac6 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/updater/summarizer/TotalSummarizer.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/updater/summarizer/TotalSummarizer.java @@ -49,7 +49,7 @@ public class TotalSummarizer extends AgentInteractionSubModule