diff --git a/src/main/java/work/slhaf/chatai/App.java b/src/main/java/work/slhaf/chatai/App.java index 8138b45..fd07507 100644 --- a/src/main/java/work/slhaf/chatai/App.java +++ b/src/main/java/work/slhaf/chatai/App.java @@ -1,5 +1,6 @@ package work.slhaf.chatai; +import lombok.extern.slf4j.Slf4j; import net.mamoe.mirai.console.plugin.jvm.JavaPlugin; import net.mamoe.mirai.console.plugin.jvm.JvmPluginDescriptionBuilder; import net.mamoe.mirai.event.GlobalEventChannel; @@ -13,6 +14,7 @@ import work.slhaf.chatai.config.ModelConfigTemplate; import work.slhaf.chatai.listener.FriendMessageListener; import work.slhaf.chatai.listener.GroupMessageListener; import work.slhaf.chatai.listener.OwnerMessageListener; +import work.slhaf.chatai.ocr.util.OCRUtil; import java.io.IOException; import java.util.ArrayList; @@ -22,6 +24,7 @@ import java.util.List; /** * @author SLHAF */ +@Slf4j public final class App extends JavaPlugin { public static final App INSTANCE = new App(); @@ -41,17 +44,16 @@ public final class App extends JavaPlugin { //加载配置 try { Config config = Config.ConfigLoader.load(); - App.class.getClassLoader().loadClass("work.slhaf.chatai.utils.OCRUtil"); - App.class.getClassLoader().loadClass("work.slhaf.chatai.utils.ChatUtil"); + OCRUtil.load(); owner = config.getOwner().substring(1); bot = config.getBot().substring(1); customCommands = config.getCustomCommandTemplates(); blacklist = config.getBlacklist(); - } catch (IOException | ClassNotFoundException e) { + } catch (IOException e) { throw new RuntimeException(e); } - getLogger().info("ChatAI loaded!"); + log.info("ChatAI loaded!"); //群聊监听器 GlobalEventChannel.INSTANCE.filterIsInstance(GroupMessageEvent.class) @@ -59,7 +61,7 @@ public final class App extends JavaPlugin { String msg = event.getMessage().contentToString(); long groupId = event.getGroup().getId(); String prefix = msg.split(Constant.Order.SPLIT_BLANK)[0]; - return (msg.startsWith(Constant.Order.PREFIX_DEFAULT + bot) || checkCommandExist(prefix,customCommands)) && !blacklist.contains(groupId); + return (msg.startsWith(Constant.Order.PREFIX_DEFAULT + bot) || checkCommandExist(prefix, customCommands)) && !blacklist.contains(groupId); }).registerListenerHost(new GroupMessageListener()); //私聊监听器 @@ -69,7 +71,7 @@ public final class App extends JavaPlugin { String sender = String.valueOf(event.getFriend().getId()); String prefix = msg.split(Constant.Order.SPLIT_BLANK)[0]; // return !(msg.startsWith(Constant.Order.PREFIX_SET) && sender.equals(owner)) && !msg.equals(Constant.Order.MSG_HELP); - return checkCommandExist(prefix,customCommands) //包含指令前缀 + return checkCommandExist(prefix, customCommands) //包含指令前缀 || !((msg.startsWith(Constant.Order.PREFIX_SET) && sender.equals(owner)) || msg.startsWith(Constant.Order.PREFIX_CUSTOM)); //如果不包含指令前缀,则不能以设置指令、"/"开头 }).registerListenerHost(new FriendMessageListener()); @@ -84,46 +86,88 @@ public final class App extends JavaPlugin { //帮助监听 GlobalEventChannel.INSTANCE .filterIsInstance(MessageEvent.class) - .filter(event -> event.getMessage().contentToString().equals(Constant.Order.MSG_HELP)) + .filter(event -> event.getMessage().contentToString().startsWith(Constant.Order.MSG_HELP)) .subscribeAlways(MessageEvent.class, event -> { synchronized (customCommands) { - final String[] helpMsg = {""" - ————<群聊命令>———— - - @ (仅限群聊) - / - - 例: - @机器人 你好 - /c 你好 - - ————<控制命令>———— - - $ clearAll (仅限群聊) - $ shutUp (仅限群聊) - $ speak (仅限群聊) - $ 添加预设|<预设指令>|<模型模板ID>|<模型名称>|<预设内容> - $ 切换模型|<预设指令>|<模型模板ID>|<模型名称> - $ 更改预设|<预设指令>|<预设内容> - $ 删除预设|<预设指令> - - 例: - $ 添加预设|/c|<模型模板ID>|glm-4-flash|你是一只猫娘... - - """}; - helpMsg[0] += "————<预设列表>————"; - for (CustomCommandTemplate customCommand : customCommands) { - helpMsg[0] += "\r\n\r\n"+customCommand.toString(); + String msg = event.getMessage().contentToString(); + String result; + if (msg.equals(Constant.Order.MSG_HELP)) { + result = """ + ———————— + >> 群聊命令 + >> 预设列表 + >> 预设查询|<预设指令> + >> 模型列表"""; + } else { + try { + String helpCommand = msg.split(Constant.Order.SPLIT_BLANK)[1]; + String[] split = helpCommand.split(Constant.Order.SPLIT_CUSTOM); + helpCommand = split[0]; + Config config = Config.ConfigLoader.getConfig(); + result = switch (helpCommand) { + case "群聊命令" -> """ + ————<群聊命令>———— + @ (仅限群聊) + / + + 例: + @机器人 你好 + /c 你好"""; + case "控制命令" -> """ + ————<控制命令>———— + $ clearAll (仅限群聊) + $ shutUp (仅限群聊) + $ speak (仅限群聊) + $ 添加预设|<预设指令>|<模型模板ID>|<模型名称>|<预设内容> + $ 切换模型|<预设指令>|<模型模板ID>|<模型名称> + $ 更改预设|<预设指令>|<预设内容> + $ 删除预设|<预设指令> + + 例: + $ 添加预设|/c|<模型模板ID>|glm-4-flash|你是一只猫娘..."""; + case "预设列表" -> { + StringBuilder customListStr = new StringBuilder("————<预设列表>————"); + for (CustomCommandTemplate customCommandTemplate : config.getCustomCommandTemplates()) { + customListStr.append("\r\n\r\n") + .append("command: ").append(customCommandTemplate.getCommand()).append("\r\n") + .append("model: ").append(customCommandTemplate.getCustomModel()); + } + yield customListStr.toString(); + } + case "预设查询" -> { + StringBuilder customDetail = new StringBuilder("————<预设查询>————"); + if (split.length == 1) { + yield """ + 格式不正确 + /chatHelp 预设查询|"""; + } + String customCommand = split[1]; + + for (CustomCommandTemplate customCommandTemplate : config.getCustomCommandTemplates()) { + if (customCommand.equals(customCommandTemplate.getCommand())) { + customDetail.append("\r\n") + .append(customCommandTemplate); + yield customDetail.toString(); + } + } + yield "未找到指令" + customCommand; + } + case "模型列表" -> { + StringBuilder modelListStr = new StringBuilder("————<模型列表>————"); + for (ModelConfigTemplate modelConfigTemplate : config.getModelConfigTemplates()) { + modelListStr.append("\r\n\r\n") + .append("name: ").append(modelConfigTemplate.getTemplate_name()).append("\r\n") + .append("base_url: ").append(modelConfigTemplate.getBase_url()); + } + yield modelListStr.toString(); + } + default -> "未知指令,输入`/chatHelp`查看"; + }; + } catch (Exception e) { + result = "出现错误: \r\n"+e.getMessage(); + } } - helpMsg[0] += "\r\n"; - helpMsg[0] += "————<模型列表>————"; - for (int i = 0; i < Config.ConfigLoader.getConfig().getModelConfigTemplates().size(); i++) { - ModelConfigTemplate modelConfigTemplate = Config.ConfigLoader.getConfig().getModelConfigTemplates().get(i); - helpMsg[0] += "\r\n\r\n"+"TemplateIndex: "+i+"\r\n" + - "name: "+modelConfigTemplate.getTemplate_name() +"\r\n"+ - "base_url: "+modelConfigTemplate.getBase_url()+"\r\n"; - } - event.getSubject().sendMessage(helpMsg[0]); + event.getSubject().sendMessage(result); } }); @@ -140,6 +184,6 @@ public final class App extends JavaPlugin { @Override public void onDisable() { - getLogger().info("ChatAI-InGroup disabled!"); + log.info("ChatAI-InGroup disabled!"); } } diff --git a/src/main/java/work/slhaf/chatai/chat/ChatClient.java b/src/main/java/work/slhaf/chatai/chat/ChatClient.java index 4328715..bb7bd24 100644 --- a/src/main/java/work/slhaf/chatai/chat/ChatClient.java +++ b/src/main/java/work/slhaf/chatai/chat/ChatClient.java @@ -26,10 +26,9 @@ public class ChatClient { private String url; private String apikey; private String model; - private String prompt = "12333"; - private int top_p; - private int temperature; + private double top_p; + private double temperature; private int max_tokens; private List messages = new ArrayList<>(); @@ -39,12 +38,12 @@ public class ChatClient { this.clientId = clientId; } - public ChatClient(String clientId, String url, String apikey, String model, int top_p, int temperature, int max_tokens) { + public ChatClient(String clientId, String url, String apikey, String model, double top_p, double temperature, int max_tokens) { this(url, apikey, model, top_p, temperature, max_tokens); this.clientId = clientId; } - public ChatClient(String url, String apikey, String model, int top_p, int temperature, int max_tokens) { + public ChatClient(String url, String apikey, String model, double top_p, double temperature, int max_tokens) { this(url, apikey, model); this.top_p = top_p; this.temperature = temperature; @@ -58,36 +57,30 @@ public class ChatClient { } public void setPromotion(String promotion) { - Message message = Message.builder() - .role(Constant.Character.SYSTEM) - .content(promotion) - .build(); - messages.add(0, message); + if (!promotion.equals("null")) { + Message message = Message.builder() + .role(Constant.Character.SYSTEM) + .content(promotion) + .build(); + messages.add(0, message); + } } public ChatResponse runChat(String content) { HttpRequest request = HttpRequest.post(url + "/completions"); - log.info("URL: {}",request.getUrl()); + log.info("URL: {}", request.getUrl()); request.header("Content-Type", "application/json"); request.header("Authorization", "Bearer " + apikey); Message message = new Message(Constant.Character.USER, content); messages.add(message); - ChatBody body; - if (top_p > 0) { - body = ChatBody.builder() - .model(model) - .messages(messages) - .top_p(top_p) - .temperature(temperature) - .max_tokens(max_tokens) - .build(); - } else { - body = ChatBody.builder() - .model(model) - .messages(messages) - .build(); - } + ChatBody body = ChatBody.builder() + .model(model) + .messages(messages) + .top_p(top_p) + .temperature(temperature) + .max_tokens(max_tokens) + .build(); HttpResponse response = request.body(JSONUtil.toJsonStr(body)).execute(); ChatResponse finalResponse; diff --git a/src/main/java/work/slhaf/chatai/chat/constant/Constant.java b/src/main/java/work/slhaf/chatai/chat/constant/Constant.java index c8c7efe..b6bfe30 100644 --- a/src/main/java/work/slhaf/chatai/chat/constant/Constant.java +++ b/src/main/java/work/slhaf/chatai/chat/constant/Constant.java @@ -45,6 +45,7 @@ public class Constant { public static final String MSG_STATUS = "/status"; public static final String PREFIX_CUSTOM = "/"; public static final String MODEL_CHANGE = ".*\\|.*"; + public static final String SET_TEMP = ".*\\|.*\\|.*"; } public static class StatusCode { diff --git a/src/main/java/work/slhaf/chatai/chat/pojo/ChatBody.java b/src/main/java/work/slhaf/chatai/chat/pojo/ChatBody.java index 4e755fa..f4a3de6 100644 --- a/src/main/java/work/slhaf/chatai/chat/pojo/ChatBody.java +++ b/src/main/java/work/slhaf/chatai/chat/pojo/ChatBody.java @@ -13,13 +13,10 @@ public class ChatBody { private String model; @NonNull private List messages; - @Builder.Default - private int temperature = 1; - @Builder.Default - private int top_p = 1; + private double temperature; + private double top_p; private boolean stream; - @Builder.Default - private int max_tokens = 1024; + private int max_tokens; private int presence_penalty; private int frequency_penalty; } diff --git a/src/main/java/work/slhaf/chatai/utils/ChatUtil.java b/src/main/java/work/slhaf/chatai/chat/util/ChatUtil.java similarity index 89% rename from src/main/java/work/slhaf/chatai/utils/ChatUtil.java rename to src/main/java/work/slhaf/chatai/chat/util/ChatUtil.java index 5c60491..35ffd2d 100644 --- a/src/main/java/work/slhaf/chatai/utils/ChatUtil.java +++ b/src/main/java/work/slhaf/chatai/chat/util/ChatUtil.java @@ -1,4 +1,4 @@ -package work.slhaf.chatai.utils; +package work.slhaf.chatai.chat.util; import lombok.extern.slf4j.Slf4j; import work.slhaf.chatai.chat.ChatClient; @@ -63,18 +63,27 @@ public class ChatUtil { int modelTemplateIndex; String customModel; String customPromotion; + double top_p; + double temperature; + int max_tokens; Config config = Config.ConfigLoader.getConfig(); for (CustomCommandTemplate customCommandTemplate : config.getCustomCommandTemplates()) { if (customCommandTemplate.getCommand().equals(command)) { + //读取预设配置 modelTemplateIndex = customCommandTemplate.getModelTemplateIndex(); customModel = customCommandTemplate.getCustomModel(); customPromotion = customCommandTemplate.getCustomPromotion(); + top_p = customCommandTemplate.getTop_p(); + temperature = customCommandTemplate.getTemperature(); + max_tokens = customCommandTemplate.getMax_tokens(); + + //读取模型配置 ModelConfigTemplate modelConfigTemplate = config.getModelConfigTemplates().get(modelTemplateIndex); String url = modelConfigTemplate.getBase_url(); String apikey = modelConfigTemplate.getApikey(); - ChatClient chatClient = new ChatClient(chatId, url, apikey, customModel); + ChatClient chatClient = new ChatClient(chatId, url, apikey, customModel,top_p,temperature,max_tokens); chatClient.setPromotion(customPromotion); chatClients.put(chatId, chatClient); log.info("final content: {}", content); diff --git a/src/main/java/work/slhaf/chatai/config/Config.java b/src/main/java/work/slhaf/chatai/config/Config.java index 6f856d3..8785ca2 100644 --- a/src/main/java/work/slhaf/chatai/config/Config.java +++ b/src/main/java/work/slhaf/chatai/config/Config.java @@ -69,7 +69,7 @@ public class Config { public static class ConfigLoader { private static final Yaml yaml; @Getter - private static Config config = new Config(); + private static Config config; static { DumperOptions options = new DumperOptions(); @@ -78,6 +78,7 @@ public class Config { } public static Config load() throws IOException { + config = new Config(); LoaderOptions loaderOptions = new LoaderOptions(); TagInspector tagInspector = tag -> true; loaderOptions.setTagInspector(tagInspector); @@ -158,8 +159,8 @@ public class Config { //自定义预设 ArrayList customCommands = new ArrayList<>(); - customCommands.add(new CustomCommandTemplate("default", 0, "glm-4-flash", "null")); - customCommands.add(new CustomCommandTemplate("/c", 0, "glm-4-flash", "你是一位智能编程助手,你会为用户回答关于编程、代码、计算机方面的任何问题,并提供格式规范、可以执行、准确安全的代码,并在必要时提供详细的解释。 请用中文回答。")); + customCommands.add(new CustomCommandTemplate("default", 0, "glm-4-flash", "null",1,1,1024)); + customCommands.add(new CustomCommandTemplate("/c", 0, "glm-4-flash", "你是一位智能编程助手,你会为用户回答关于编程、代码、计算机方面的任何问题,并提供格式规范、可以执行、准确安全的代码,并在必要时提供详细的解释。 请用中文回答。",1,1,1024)); config.setCustomCommandTemplates(customCommands); dump(); log.warn("配置文件创建成功,请关闭后进行配置"); @@ -228,7 +229,7 @@ public class Config { return "当前指令已存在!\r\n" + customCommand; } } - CustomCommandTemplate customCommand = new CustomCommandTemplate(command, modelTemplateIndex, customModel, customPromotion); + CustomCommandTemplate customCommand = new CustomCommandTemplate(command, modelTemplateIndex, customModel, customPromotion,1,1,1024); customCommands.add(customCommand); return "预设添加完毕!\r\n" + customCommand; } diff --git a/src/main/java/work/slhaf/chatai/config/CustomCommandTemplate.java b/src/main/java/work/slhaf/chatai/config/CustomCommandTemplate.java index 0ac7194..3490d6b 100644 --- a/src/main/java/work/slhaf/chatai/config/CustomCommandTemplate.java +++ b/src/main/java/work/slhaf/chatai/config/CustomCommandTemplate.java @@ -17,13 +17,19 @@ public class CustomCommandTemplate { private int modelTemplateIndex; private String customModel; private String customPromotion; + private double top_p = 1; + private double temperature = 1; + private int max_tokens = 1024; @Override public String toString() { return "command: " + command + "\r\n" + "modelTemplateIndex: " + modelTemplateIndex + "\r\n" + "customModel: " + customModel + "\r\n" + - "customPromotion: " + customPromotion; + "customPromotion: " + customPromotion + "\r\n" + + "top_p: " + top_p + "\r\n" + + "temperature: " + temperature +"\r\n" + + "max_tokens: " + max_tokens; } public LinkedHashMap toMap(){ @@ -32,6 +38,9 @@ public class CustomCommandTemplate { map.put("modelTemplateIndex", String.valueOf(modelTemplateIndex)); map.put("customModel",customModel); map.put("customPromotion",customPromotion); + map.put("top_p",String.valueOf(top_p)); + map.put("temperature",String.valueOf(temperature)); + map.put("max_tokens",String.valueOf(max_tokens)); return map; } @@ -40,5 +49,8 @@ public class CustomCommandTemplate { this.modelTemplateIndex = Integer.parseInt(map.get("modelTemplateIndex")); this.customModel = map.get("customModel"); this.customPromotion = map.get("customPromotion"); + this.top_p = Double.parseDouble(map.get("top_p")); + this.temperature = Double.parseDouble(map.get("temperature")); + this.max_tokens = Integer.parseInt(map.get("max_tokens")); } } diff --git a/src/main/java/work/slhaf/chatai/constant/MethodsConstant.java b/src/main/java/work/slhaf/chatai/constant/MethodsConstant.java deleted file mode 100644 index 82deb15..0000000 --- a/src/main/java/work/slhaf/chatai/constant/MethodsConstant.java +++ /dev/null @@ -1,17 +0,0 @@ -package work.slhaf.chatai.constant; - -public enum MethodsConstant { - - /** - * 正常对话 - */ - NORMAL, - /** - * 预设对话 - */ - CUSTOM, - /** - * 未匹配 - */ - NONE -} diff --git a/src/main/java/work/slhaf/chatai/listener/FriendMessageListener.java b/src/main/java/work/slhaf/chatai/listener/FriendMessageListener.java index 2bfffa1..bbb28f7 100644 --- a/src/main/java/work/slhaf/chatai/listener/FriendMessageListener.java +++ b/src/main/java/work/slhaf/chatai/listener/FriendMessageListener.java @@ -4,8 +4,8 @@ import net.mamoe.mirai.event.EventHandler; import net.mamoe.mirai.event.SimpleListenerHost; import net.mamoe.mirai.event.events.FriendMessageEvent; import work.slhaf.chatai.chat.constant.Constant; -import work.slhaf.chatai.utils.ChatUtil; -import work.slhaf.chatai.utils.OCRUtil; +import work.slhaf.chatai.chat.util.ChatUtil; +import work.slhaf.chatai.ocr.util.OCRUtil; import java.util.regex.Matcher; import java.util.regex.Pattern; diff --git a/src/main/java/work/slhaf/chatai/listener/GroupMessageListener.java b/src/main/java/work/slhaf/chatai/listener/GroupMessageListener.java index 0e48f52..0c0ecb1 100644 --- a/src/main/java/work/slhaf/chatai/listener/GroupMessageListener.java +++ b/src/main/java/work/slhaf/chatai/listener/GroupMessageListener.java @@ -6,8 +6,8 @@ import net.mamoe.mirai.event.SimpleListenerHost; import net.mamoe.mirai.event.events.GroupMessageEvent; import net.mamoe.mirai.message.data.At; import work.slhaf.chatai.chat.constant.Constant; -import work.slhaf.chatai.utils.ChatUtil; -import work.slhaf.chatai.utils.OCRUtil; +import work.slhaf.chatai.chat.util.ChatUtil; +import work.slhaf.chatai.ocr.util.OCRUtil; import java.util.regex.Matcher; import java.util.regex.Pattern; diff --git a/src/main/java/work/slhaf/chatai/listener/OwnerMessageListener.java b/src/main/java/work/slhaf/chatai/listener/OwnerMessageListener.java index b48b2c7..fad1247 100644 --- a/src/main/java/work/slhaf/chatai/listener/OwnerMessageListener.java +++ b/src/main/java/work/slhaf/chatai/listener/OwnerMessageListener.java @@ -9,9 +9,9 @@ import net.mamoe.mirai.event.events.GroupMessageEvent; import net.mamoe.mirai.event.events.MessageEvent; import net.mamoe.mirai.message.data.At; import work.slhaf.chatai.chat.constant.Constant; +import work.slhaf.chatai.chat.util.ChatUtil; import work.slhaf.chatai.config.Config; import work.slhaf.chatai.config.CustomCommandTemplate; -import work.slhaf.chatai.utils.ChatUtil; import java.io.IOException; @@ -61,10 +61,12 @@ public class OwnerMessageListener extends SimpleListenerHost { private void onFriendMessageEvent(FriendMessageEvent event) throws IOException { String primaryContent = event.getMessage().contentToString().split(Constant.Order.SPLIT_BLANK)[1]; String instruction; - String arguments; + String arguments = null; try { instruction = primaryContent.split(Constant.Order.SPLIT_CUSTOM)[0]; - arguments = primaryContent.substring(instruction.length()+1); + if (!instruction.equals(primaryContent)){ + arguments = primaryContent.substring(instruction.length() + 1); + } } catch (ArrayIndexOutOfBoundsException e) { event.getFriend().sendMessage("操作失败,缺少参数"); return; @@ -76,8 +78,8 @@ public class OwnerMessageListener extends SimpleListenerHost { /** * 对命令及其参数进行处理 * - * @param instruction 命令 - * @param arguments 参数 + * @param instruction 命令 + * @param arguments 参数 * @return 处理结果 */ private String handleCommand(String instruction, String arguments) throws IOException { @@ -89,10 +91,10 @@ public class OwnerMessageListener extends SimpleListenerHost { int modelTemplateIndex = Integer.parseInt(argumentsArray[1]); String customModel = argumentsArray[2]; String customPromotion = argumentsArray[3]; - if (modelTemplateIndex >= Config.ConfigLoader.getConfig().getModelConfigTemplates().size()){ - yield "不存在模型模板["+modelTemplateIndex+"]"; + if (modelTemplateIndex >= Config.ConfigLoader.getConfig().getModelConfigTemplates().size()) { + yield "不存在模型模板[" + modelTemplateIndex + "]"; } - yield Config.ConfigLoader.addCustom(command,modelTemplateIndex,customModel,customPromotion); + yield Config.ConfigLoader.addCustom(command, modelTemplateIndex, customModel, customPromotion); } else { yield "格式不正确!"; } @@ -103,19 +105,19 @@ public class OwnerMessageListener extends SimpleListenerHost { String[] argumentsArray = arguments.split(Constant.Order.SPLIT_CUSTOM); String command = argumentsArray[0]; int modelTemplateIndex = Integer.parseInt(argumentsArray[1]); - if (modelTemplateIndex >= Config.ConfigLoader.getConfig().getModelConfigTemplates().size()){ - yield "不存在模型模板["+modelTemplateIndex+"]"; + if (modelTemplateIndex >= Config.ConfigLoader.getConfig().getModelConfigTemplates().size()) { + yield "不存在模型模板[" + modelTemplateIndex + "]"; } String customModel = argumentsArray[2]; //迭代现有预设,更改对应信息 for (CustomCommandTemplate customCommandTemplate : Config.ConfigLoader.getConfig().getCustomCommandTemplates()) { - if (customCommandTemplate.getCommand().equals(command)){ + if (customCommandTemplate.getCommand().equals(command)) { customCommandTemplate.setModelTemplateIndex(modelTemplateIndex); customCommandTemplate.setCustomModel(customModel); - yield "指令: "+command+"模型切换成功!\r\n"+customCommandTemplate; + yield "指令: " + command + "模型切换成功!\r\n" + customCommandTemplate; } } - yield "未找到指令: "+command; + yield "未找到指令: " + command; } else { yield "格式不正确!"; } @@ -127,17 +129,68 @@ public class OwnerMessageListener extends SimpleListenerHost { String customPromotion = argumentsArray[1]; //迭代现有预设,更改对应信息 for (CustomCommandTemplate customCommandTemplate : Config.ConfigLoader.getConfig().getCustomCommandTemplates()) { - if (customCommandTemplate.getCommand().equals(command)){ + if (customCommandTemplate.getCommand().equals(command)) { customCommandTemplate.setCustomPromotion(customPromotion); - yield "指令: "+command+"更改预设成功!\r\n"+customCommandTemplate; + yield "指令: " + command + "更改预设成功!\r\n" + customCommandTemplate; } } - yield "未找到指令: "+command; + yield "未找到指令: " + command; } else { yield "格式不正确!"; } } + case "设置采样" -> { + if (!arguments.matches(Constant.Order.SET_TEMP)) { + yield "格式不正确"; + } + String[] split = arguments.split(Constant.Order.SPLIT_CUSTOM); + String command = split[0]; + int type; + double value; + try { + type = Integer.parseInt(split[1]); + value = Double.parseDouble(split[2]); + if (type != 1 && type != 2) { + yield """ + 格式不正确 + type = 1 -> temperature + type = 2 -> top_p"""; + } + if (type == 1 && (value > 2 || value < 0) || (type == 2 && (value > 1 || value < 0))) { + yield """ + 采样设置错误: + 采样类型: + 1 -> temperature + 2 -> top_p + 采样数值: + 1 -> 0-2 + 2 -> 0-1 + 默认为1,值越高,输出越随机"""; + } + } catch (NumberFormatException e) { + yield """ + 格式不正确: + $ 设置采样|<指令>|<采样类型>|<采样数值>"""; + } + //检查是否存在对应指令 + for (CustomCommandTemplate customCommandTemplate : Config.ConfigLoader.getConfig().getCustomCommandTemplates()) { + if (customCommandTemplate.getCommand().equals(split[0])) { + if (type == 1){ + customCommandTemplate.setTemperature(value); + }else { + customCommandTemplate.setTop_p(value); + } + yield "采样已设置"; + } + } + yield "未找到指令: " + command; + + } case "删除预设" -> Config.ConfigLoader.removeCustom(arguments); + case "重载配置" -> { + Config.ConfigLoader.load(); + yield "配置已重新加载"; + } default -> "该指令不存在!"; }; Config.ConfigLoader.dump(); diff --git a/src/main/java/work/slhaf/chatai/pojo/OCRDataInfo.java b/src/main/java/work/slhaf/chatai/ocr/pojo/OCRDataInfo.java similarity index 98% rename from src/main/java/work/slhaf/chatai/pojo/OCRDataInfo.java rename to src/main/java/work/slhaf/chatai/ocr/pojo/OCRDataInfo.java index 6cf5ee3..b346eb3 100644 --- a/src/main/java/work/slhaf/chatai/pojo/OCRDataInfo.java +++ b/src/main/java/work/slhaf/chatai/ocr/pojo/OCRDataInfo.java @@ -1,4 +1,4 @@ -package work.slhaf.chatai.pojo; +package work.slhaf.chatai.ocr.pojo; import lombok.Getter; import lombok.Setter; diff --git a/src/main/java/work/slhaf/chatai/utils/OCRUtil.java b/src/main/java/work/slhaf/chatai/ocr/util/OCRUtil.java similarity index 96% rename from src/main/java/work/slhaf/chatai/utils/OCRUtil.java rename to src/main/java/work/slhaf/chatai/ocr/util/OCRUtil.java index 97ddd63..69f3122 100644 --- a/src/main/java/work/slhaf/chatai/utils/OCRUtil.java +++ b/src/main/java/work/slhaf/chatai/ocr/util/OCRUtil.java @@ -1,4 +1,4 @@ -package work.slhaf.chatai.utils; +package work.slhaf.chatai.ocr.util; import cn.hutool.json.JSONUtil; import com.aliyun.ocr_api20210707.Client; @@ -8,14 +8,14 @@ import com.aliyun.tea.TeaException; import com.aliyun.teautil.models.RuntimeOptions; import lombok.extern.slf4j.Slf4j; import work.slhaf.chatai.config.Config; -import work.slhaf.chatai.pojo.OCRDataInfo; +import work.slhaf.chatai.ocr.pojo.OCRDataInfo; @Slf4j public class OCRUtil { private static Client client; public static boolean isSupported; - static { + public static void load() { //读取密钥 Config pluginConfig = Config.ConfigLoader.getConfig(); String accessKeyId = pluginConfig.getOcrConfig().getAccessKeyId();