mirror of
https://github.com/slhaf/Partner.git
synced 2026-05-12 08:43:02 +08:00
refactor(framework): migrate module abstracts/ActivateModel to Kotlin and introduce shared model/context structures
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
package work.slhaf.partner.api.agent.factory.context
|
||||
|
||||
import com.alibaba.fastjson2.JSONArray
|
||||
import work.slhaf.partner.api.agent.factory.module.abstracts.AbstractAgentModule
|
||||
|
||||
object AgentContext {
|
||||
|
||||
}
|
||||
|
||||
sealed class ModuleContextData<T : AbstractAgentModule> {
|
||||
abstract val name: String
|
||||
abstract val clazz: Class<T>
|
||||
abstract val instance: T
|
||||
abstract val prompt: JSONArray
|
||||
abstract val modelActivated: Boolean
|
||||
|
||||
data class RunningModule<T : AbstractAgentModule>(
|
||||
override val name: String,
|
||||
override val clazz: Class<T>,
|
||||
override val instance: T,
|
||||
override val prompt: JSONArray,
|
||||
override val modelActivated: Boolean,
|
||||
|
||||
val order: Int
|
||||
) : ModuleContextData<T>()
|
||||
|
||||
}
|
||||
@@ -1,96 +0,0 @@
|
||||
package work.slhaf.partner.api.agent.factory.module.abstracts;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import work.slhaf.partner.api.agent.factory.config.pojo.ModelConfig;
|
||||
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.interaction.flow.entity.Model;
|
||||
import work.slhaf.partner.api.chat.ChatClient;
|
||||
import work.slhaf.partner.api.chat.constant.ChatConstant;
|
||||
import work.slhaf.partner.api.chat.pojo.ChatResponse;
|
||||
import work.slhaf.partner.api.chat.pojo.Message;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public interface ActivateModel {
|
||||
|
||||
AgentConfigManager AGENT_CONFIG_MANAGER = AgentConfigManager.INSTANCE;
|
||||
|
||||
@Init(order = -1)
|
||||
default void modelSettings() {
|
||||
Model model = getModel();
|
||||
ModelConfig modelConfig = AgentConfigManager.INSTANCE.loadModelConfig(modelKey());
|
||||
model.setBaseMessages(withBasicPrompt() ? loadSpecificPromptAndBasicPrompt(modelKey()) : loadSpecificPrompt(modelKey()));
|
||||
model.setChatClient(new ChatClient(modelConfig.getBaseUrl(), modelConfig.getApikey(), modelConfig.getModel()));
|
||||
}
|
||||
|
||||
default void updateModelSettings(ChatClient newChatClient) {
|
||||
BeanUtil.copyProperties(newChatClient, chatClient());
|
||||
}
|
||||
|
||||
private List<Message> loadSpecificPrompt(String modelKey) {
|
||||
return AGENT_CONFIG_MANAGER.loadModelPrompt(modelKey);
|
||||
}
|
||||
|
||||
private List<Message> loadSpecificPromptAndBasicPrompt(String modelKey) {
|
||||
List<Message> messages = new ArrayList<>();
|
||||
messages.addAll(AGENT_CONFIG_MANAGER.loadModelPrompt("basic"));
|
||||
messages.addAll(AGENT_CONFIG_MANAGER.loadModelPrompt(modelKey));
|
||||
return messages;
|
||||
}
|
||||
|
||||
default ChatResponse chat() {
|
||||
Model model = getModel();
|
||||
List<Message> temp = new ArrayList<>();
|
||||
temp.addAll(model.getBaseMessages());
|
||||
temp.addAll(model.getChatMessages());
|
||||
return model.getChatClient().runChat(temp);
|
||||
}
|
||||
|
||||
default ChatResponse singleChat(String input) {
|
||||
Model model = getModel();
|
||||
List<Message> temp = new ArrayList<>(model.getBaseMessages());
|
||||
temp.add(new Message(ChatConstant.Character.USER, input));
|
||||
return model.getChatClient().runChat(temp);
|
||||
}
|
||||
|
||||
default void updateChatClientSettings() {
|
||||
Model model = getModel();
|
||||
model.getChatClient().setTemperature(0.4);
|
||||
model.getChatClient().setTop_p(0.8);
|
||||
}
|
||||
|
||||
default List<Message> chatMessages() {
|
||||
return getModel().getChatMessages();
|
||||
}
|
||||
|
||||
default List<Message> baseMessages() {
|
||||
return getModel().getBaseMessages();
|
||||
}
|
||||
|
||||
default ChatClient chatClient() {
|
||||
return getModel().getChatClient();
|
||||
}
|
||||
|
||||
/**
|
||||
* 仅适用Module子类,否则需要重写
|
||||
*
|
||||
* @return 持有的model实例
|
||||
*/
|
||||
default Model getModel() {
|
||||
return ((AbstractAgentModule) this).getModel();
|
||||
}
|
||||
|
||||
default void setModel(Model model) {
|
||||
((AbstractAgentModule) this).setModel(model);
|
||||
}
|
||||
|
||||
/**
|
||||
* 对应调用的模型配置名称
|
||||
*/
|
||||
String modelKey();
|
||||
|
||||
boolean withBasicPrompt();
|
||||
|
||||
}
|
||||
@@ -1,16 +1,105 @@
|
||||
package work.slhaf.partner.api.agent.factory.module.abstracts;
|
||||
package work.slhaf.partner.api.agent.factory.module.abstracts
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import work.slhaf.partner.api.agent.runtime.interaction.flow.entity.Model;
|
||||
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.interaction.flow.entity.RunningFlowContext
|
||||
import work.slhaf.partner.api.chat.ChatClient
|
||||
import work.slhaf.partner.api.chat.constant.ChatConstant
|
||||
import work.slhaf.partner.api.chat.pojo.ChatResponse
|
||||
import work.slhaf.partner.api.chat.pojo.Message
|
||||
|
||||
/**
|
||||
* 模块基类
|
||||
*/
|
||||
public abstract class AbstractAgentModule {
|
||||
abstract class AbstractAgentModule {
|
||||
var moduleName: String = javaClass.simpleName
|
||||
}
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
protected Model model = new Model();
|
||||
data class Model(
|
||||
val chatClient: ChatClient,
|
||||
val chatMessages: MutableList<Message> = mutableListOf(),
|
||||
val baseMessages: MutableList<Message> = mutableListOf()
|
||||
)
|
||||
|
||||
interface RunningModule<T : RunningFlowContext> {
|
||||
fun execute(context: T)
|
||||
}
|
||||
|
||||
interface SubModule<I, O> {
|
||||
fun execute(input: I): O
|
||||
}
|
||||
|
||||
interface StandaloneModule
|
||||
|
||||
interface ActivateModel {
|
||||
|
||||
companion object {
|
||||
val configManager: AgentConfigManager = AgentConfigManager.INSTANCE
|
||||
val modelMap: MutableMap<String, Model> = mutableMapOf()
|
||||
}
|
||||
|
||||
fun getModel(): Model {
|
||||
fun buildModel(): Model {
|
||||
val modelConfig = configManager.loadModelConfig(modelKey())
|
||||
val chatClient = ChatClient(modelConfig.baseUrl, modelConfig.apikey, modelConfig.model)
|
||||
val model = Model(chatClient)
|
||||
|
||||
val baseMessages = if (withBasicPrompt()) {
|
||||
loadSpecificPromptAndBasicPrompt(modelKey())
|
||||
} else {
|
||||
configManager.loadModelPrompt(modelKey())
|
||||
}
|
||||
model.baseMessages.addAll(baseMessages)
|
||||
return model
|
||||
}
|
||||
|
||||
val model = modelMap.computeIfAbsent(modelKey()) {
|
||||
buildModel()
|
||||
}
|
||||
return model
|
||||
}
|
||||
|
||||
@Init(order = -1)
|
||||
fun modelSettings() {
|
||||
val model = getModel()
|
||||
modelMap[modelKey()] = model
|
||||
}
|
||||
|
||||
private fun loadSpecificPromptAndBasicPrompt(modelKey: String): MutableList<Message> {
|
||||
val messages: MutableList<Message> = ArrayList()
|
||||
messages.addAll(configManager.loadModelPrompt("basic"))
|
||||
messages.addAll(configManager.loadModelPrompt(modelKey))
|
||||
return messages
|
||||
}
|
||||
|
||||
fun chat(): ChatResponse {
|
||||
val model = this.getModel()
|
||||
val temp = ArrayList<Message?>()
|
||||
temp.addAll(model.baseMessages)
|
||||
temp.addAll(model.chatMessages)
|
||||
return model.chatClient.runChat(temp)
|
||||
}
|
||||
|
||||
fun singleChat(input: String): ChatResponse {
|
||||
val model = this.getModel()
|
||||
val temp = ArrayList<Message>(model.baseMessages)
|
||||
temp.add(Message(ChatConstant.Character.USER, input))
|
||||
return model.chatClient.runChat(temp)
|
||||
}
|
||||
|
||||
fun updateChatClientSettings() {
|
||||
val model = this.getModel()
|
||||
model.chatClient.temperature = 0.4
|
||||
model.chatClient.top_p = 0.8
|
||||
}
|
||||
|
||||
/**
|
||||
* 对应调用的模型配置名称
|
||||
*/
|
||||
fun modelKey(): String {
|
||||
return (this as AbstractAgentModule).moduleName
|
||||
}
|
||||
|
||||
fun withBasicPrompt(): Boolean
|
||||
|
||||
}
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
package work.slhaf.partner.api.agent.runtime.interaction.flow.entity;
|
||||
|
||||
import lombok.Data;
|
||||
import work.slhaf.partner.api.chat.ChatClient;
|
||||
import work.slhaf.partner.api.chat.pojo.Message;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class Model {
|
||||
|
||||
protected ChatClient chatClient;
|
||||
protected List<Message> chatMessages;
|
||||
protected List<Message> baseMessages;
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user