From 068964145fa991d00c9f6312e862a5165b0c75ce Mon Sep 17 00:00:00 2001 From: Yutou <583819556@qq.com> Date: Mon, 10 Feb 2025 13:44:31 +0800 Subject: [PATCH] =?UTF-8?q?feat(gpt):=20=E6=94=AF=E6=8C=81=E7=A1=85?= =?UTF-8?q?=E5=9F=BA=E5=A4=A7=E6=A8=A1=E5=9E=8B=E5=B9=B6=E4=BC=98=E5=8C=96?= =?UTF-8?q?=20GPT=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增对硅基大模型的支持,可通过指令切换使用 - 优化 GPT 模型切换逻辑,支持更多自定义选项 - 优化日志级别和网络请求超时设置 --- .../java/com/yutou/okhttp/api/BaseApi.java | 5 ++ .../com/yutou/qqbot/QQBotApplication.java | 2 +- .../com/yutou/qqbot/gpt/AbsGPTManager.java | 4 +- .../yutou/qqbot/gpt/SiliconGPTManager.java | 2 +- .../yutou/qqbot/models/Commands/BaiduGPT.java | 76 ++++++++++--------- src/main/resources/log4j2.xml | 2 +- 6 files changed, 51 insertions(+), 40 deletions(-) diff --git a/src/main/java/com/yutou/okhttp/api/BaseApi.java b/src/main/java/com/yutou/okhttp/api/BaseApi.java index 3535bb0..e769087 100644 --- a/src/main/java/com/yutou/okhttp/api/BaseApi.java +++ b/src/main/java/com/yutou/okhttp/api/BaseApi.java @@ -18,6 +18,7 @@ import retrofit2.Retrofit; import java.io.IOException; import java.util.Date; import java.util.HashMap; +import java.util.concurrent.TimeUnit; import java.util.logging.Level; public class BaseApi { @@ -97,6 +98,10 @@ public class BaseApi { loggingInterceptor.setPrintLevel(HttpLoggingInterceptor.Level.BODY); OkHttpClient.Builder builder = new OkHttpClient() .newBuilder() + .callTimeout(2, TimeUnit.MINUTES) + .readTimeout(2, TimeUnit.MINUTES) + .connectTimeout(2, TimeUnit.MINUTES) + .writeTimeout(2, TimeUnit.MINUTES) .addInterceptor(initQuery()) .addInterceptor(loggingInterceptor); return create(builder.build(), diff --git a/src/main/java/com/yutou/qqbot/QQBotApplication.java b/src/main/java/com/yutou/qqbot/QQBotApplication.java index 1ff0833..d4b201f 100644 --- a/src/main/java/com/yutou/qqbot/QQBotApplication.java +++ b/src/main/java/com/yutou/qqbot/QQBotApplication.java @@ -10,7 +10,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class QQBotApplication { - public static final String version = "QQBot v.1.7.10"; + public static final String version = "QQBot v.1.7.11.4"; public static void main(String[] args) { System.out.println("version = " + version); diff --git a/src/main/java/com/yutou/qqbot/gpt/AbsGPTManager.java b/src/main/java/com/yutou/qqbot/gpt/AbsGPTManager.java index cd15311..941166b 100644 --- a/src/main/java/com/yutou/qqbot/gpt/AbsGPTManager.java +++ b/src/main/java/com/yutou/qqbot/gpt/AbsGPTManager.java @@ -92,7 +92,7 @@ public abstract class AbsGPTManager { * @param tClass GPT管理器的具体实现类。 * @return GPT管理器实例。 */ - public static AbsGPTManager getManager(Class tClass) { + public static AbsGPTManager getManager(Class tClass) { if (tClass == BaiduGPTManager.class) { return BaiduGPTManager.getManager(); }else if(tClass== SiliconGPTManager.class){ @@ -131,7 +131,7 @@ public abstract class AbsGPTManager { }; } - protected AbsGPTManager setModel(String model) { + public AbsGPTManager setModel(String model) { this.model=model; return this; } diff --git a/src/main/java/com/yutou/qqbot/gpt/SiliconGPTManager.java b/src/main/java/com/yutou/qqbot/gpt/SiliconGPTManager.java index c41409f..9d6be03 100644 --- a/src/main/java/com/yutou/qqbot/gpt/SiliconGPTManager.java +++ b/src/main/java/com/yutou/qqbot/gpt/SiliconGPTManager.java @@ -19,6 +19,7 @@ public class SiliconGPTManager extends AbsGPTManager { private volatile static SiliconGPTManager instance = new SiliconGPTManager(); private SiliconGPTManager() { + setModel("deepseek-ai/DeepSeek-R1-Distill-Qwen-7B"); } public static SiliconGPTManager getInstance() { @@ -37,7 +38,6 @@ public class SiliconGPTManager extends AbsGPTManager { // 获取或创建用户锁 AtomicBoolean lock = userLocks.computeIfAbsent(user, k -> new AtomicBoolean(false)); try { - GPTApi.setLog(false); // 尝试加锁(如果已被锁定则立即返回提示) if (!lock.compareAndSet(false, true)) { return Message.create("您有请求正在处理中,请稍后再试", true); diff --git a/src/main/java/com/yutou/qqbot/models/Commands/BaiduGPT.java b/src/main/java/com/yutou/qqbot/models/Commands/BaiduGPT.java index b49469d..f72047b 100644 --- a/src/main/java/com/yutou/qqbot/models/Commands/BaiduGPT.java +++ b/src/main/java/com/yutou/qqbot/models/Commands/BaiduGPT.java @@ -6,6 +6,7 @@ import com.yutou.qqbot.Annotations.UseModel; import com.yutou.qqbot.QQBotManager; import com.yutou.qqbot.data.baidu.Message; import com.yutou.qqbot.gpt.AbsGPTManager; +import com.yutou.qqbot.gpt.SiliconGPTManager; import com.yutou.qqbot.interfaces.DownloadInterface; import com.yutou.qqbot.models.Model; import com.yutou.qqbot.gpt.BaiduGPTManager; @@ -20,6 +21,7 @@ import java.util.List; @UseModel public class BaiduGPT extends Model { + private Class gptManager = SiliconGPTManager.class; @Override public boolean isUserPublic() { @@ -43,19 +45,28 @@ public class BaiduGPT extends Model { public void onMessage(Long qq, MessageEvent event, boolean isGroup) { super.onMessage(qq, event, isGroup); if (event.getTextMessage().equals(QQGroupCommands.GPT_CLEAR)) { - BaiduGPTManager.getManager().clear(); + AbsGPTManager.getManager(gptManager).clear(); QQBotManager.getInstance().sendMessage(event.isUser(), qq, new Text("已经失忆捏")); } else if (event.isAtMe()) { if (event.getTextMessage().contains("省流") || event.getTextMessage().contains("总结")) { return; } - if ("GPT切换到4.0".equals(event.getTextMessage())) { + if (event.getTextMessage().contains("画画")) { + val file = BaiduGPTManager.getManager().textToImage(String.valueOf(qq), event.getTextMessage().replace("@" + QQDatabase.getMe().getUserId(), "").replace("画画", "").trim()); + if (file == null) { + QQBotManager.getInstance().sendMessage(event.isUser(), qq, new Text("画不出")); + } else { + QQBotManager.getInstance().sendMessage(file, qq, event.getMessageId().toString(), "好嘞"); + } + return; + } else if (event.getTextMessage().contains("GPT切换到")) { + val text = event.getTextMessage().replace("@" + QQDatabase.getMe().getUserId(), "").replace("切换到", "").trim(); List> list = new ArrayList<>(); if (isAdmin()) { list.add(new At(user)); - list.add(new Text("切换为4.0了")); - BaiduGPTManager.getManager().clear(); - BaiduGPTManager.getManager().setModelFor40(); + list.add(new Text("切换为" + text)); + AbsGPTManager.getManager(gptManager).clear(); + AbsGPTManager.getManager(gptManager).setModel(text); QQBotManager.getInstance().sendMessage(event.isUser(), qq, list); } else { list.add(new At(user)); @@ -63,62 +74,57 @@ public class BaiduGPT extends Model { QQBotManager.getInstance().sendMessage(event.isUser(), qq, list); } return; - } else if ("GPT切换到3.5".equals(event.getTextMessage())) { + }else if(event.getTextMessage().contains("大模型切换到")){ List> list = new ArrayList<>(); - if (isAdmin()) { - list.add(new At(user)); - list.add(new Text("切换为3.5了")); - BaiduGPTManager.getManager().clear(); - BaiduGPTManager.getManager().setModelFor35(); - QQBotManager.getInstance().sendMessage(event.isUser(), qq, list); - }else { - list.add(new At(user)); - list.add(new Text("你没有权限")); - QQBotManager.getInstance().sendMessage(event.isUser(), qq, list); + val text = event.getTextMessage().replace("@" + QQDatabase.getMe().getUserId(), "").replace("大模型切换到", "").trim(); + if(text.contains("baidu")|| text.contains("百度")){ + gptManager= BaiduGPTManager.class; + }else if(text.contains("silicon")||text.contains("硅基")){ + gptManager= SiliconGPTManager.class; } - return; - }else if(event.getTextMessage().contains("画画")){ - val file = BaiduGPTManager.getManager().textToImage(String.valueOf(qq), event.getTextMessage().replace("@" + QQDatabase.getMe().getUserId(), "").replace("画画", "").trim()); - if(file==null){ - QQBotManager.getInstance().sendMessage(event.isUser(), qq, new Text("画不出")); - }else{ - QQBotManager.getInstance().sendMessage(file,qq, event.getMessageId().toString(), "好嘞"); - } - return; + list.add(new At(user)); + list.add(new Text("切换为" + text)); + AbsGPTManager.getManager(gptManager).clear(); + AbsGPTManager.getManager(gptManager).setModel(text); + QQBotManager.getInstance().sendMessage(event.isUser(), qq, list); } - if(checkImage()) { + if (checkImage()) { parseImage(event, qq); return; } - Message message = BaiduGPTManager.getManager().sendMessage( + Message message = AbsGPTManager.getManager(gptManager).sendMessage( String.valueOf(qq), event.getTextMessage().replace("@" + QQDatabase.getMe().getUserId(), "").trim()); String sb = "调用版本:" + - BaiduGPTManager.getManager().getGPTVersion() + + gptManager.getSimpleName()+ "\n" + + "使用模型:"+ + AbsGPTManager.getManager(gptManager).getGPTVersion() + + "\n"+ message.getContent(); QQBotManager.getInstance().sendMessage(event.isUser(), qq, new Text(sb)); } } + private void parseImage(MessageEvent event, Long qq) { Image imageHandle = event.findType(Image.class); val replyHandle = event.findType(Reply.class); - if (replyHandle != null &&imageHandle==null) { - imageHandle = getReply(replyHandle.getData().getId()).findType(Image.class); + if (replyHandle != null && imageHandle == null) { + imageHandle = getReply(replyHandle.getData().getId()).findType(Image.class); + } + if (imageHandle == null) { + return; } - if(imageHandle==null){ - return; - } HttpTools.download(imageHandle.getData().getUrl(), "gpt_parse_image.png", new DownloadInterface() { @Override public void onDownload(File file) { super.onDownload(file); - if(file==null){ + if (file == null) { return; } val text = BaiduGPTManager.getManager().imageToText(String.valueOf(qq), file); - QQBotManager.getInstance().sendMessage(event.isUser(),qq,new Reply(event.getMessageId()),new Text(text)); + QQBotManager.getInstance().sendMessage(event.isUser(), qq, new Reply(event.getMessageId()), new Text(text)); } }); diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml index 3e2926a..801c1d5 100644 --- a/src/main/resources/log4j2.xml +++ b/src/main/resources/log4j2.xml @@ -28,7 +28,7 @@ - +