From e7fae929a1af5df242aaa7e4c338dc626be022cc Mon Sep 17 00:00:00 2001 From: Yutou <583819556@qq.com> Date: Tue, 4 Feb 2025 18:15:15 +0800 Subject: [PATCH] =?UTF-8?q?refactor(gpt):=20=E9=87=8D=E6=9E=84=20GPT=20?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E4=BB=A3=E7=A0=81=E5=B9=B6=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 AbsGPTManager 抽象类,定义 GPT 管理器的通用接口 - 重命名 BaiduGPTManager 类,使其位于 com.yutou.qqbot.gpt 包中 - 更新相关引用和依赖 - 优化部分代码结构,提高可维护性 --- .../java/com/yutou/qqbot/gpt/AbsGPTManager.java | 13 +++++++++++++ .../yutou/qqbot/{utlis => gpt}/BaiduGPTManager.java | 12 ++++++++++-- .../com/yutou/qqbot/models/Commands/BaiduGPT.java | 7 +------ .../java/com/yutou/qqbot/utlis/ApplicationInit.java | 3 +-- 4 files changed, 25 insertions(+), 10 deletions(-) create mode 100644 src/main/java/com/yutou/qqbot/gpt/AbsGPTManager.java rename src/main/java/com/yutou/qqbot/{utlis => gpt}/BaiduGPTManager.java (97%) diff --git a/src/main/java/com/yutou/qqbot/gpt/AbsGPTManager.java b/src/main/java/com/yutou/qqbot/gpt/AbsGPTManager.java new file mode 100644 index 0000000..c66831d --- /dev/null +++ b/src/main/java/com/yutou/qqbot/gpt/AbsGPTManager.java @@ -0,0 +1,13 @@ +package com.yutou.qqbot.gpt; + +import com.yutou.qqbot.data.baidu.Message; + +import java.io.File; + +public abstract class AbsGPTManager { + public abstract void clear(); + public abstract Message sendMessage(String user, String message); + public abstract File textToImage(String user, String text); + public abstract String imageToText(String user, File file); + public abstract String getGPTVersion(); +} diff --git a/src/main/java/com/yutou/qqbot/utlis/BaiduGPTManager.java b/src/main/java/com/yutou/qqbot/gpt/BaiduGPTManager.java similarity index 97% rename from src/main/java/com/yutou/qqbot/utlis/BaiduGPTManager.java rename to src/main/java/com/yutou/qqbot/gpt/BaiduGPTManager.java index 1eb2832..e64537f 100644 --- a/src/main/java/com/yutou/qqbot/utlis/BaiduGPTManager.java +++ b/src/main/java/com/yutou/qqbot/gpt/BaiduGPTManager.java @@ -1,10 +1,13 @@ -package com.yutou.qqbot.utlis; +package com.yutou.qqbot.gpt; import com.baidubce.qianfan.Qianfan; import com.baidubce.qianfan.model.chat.ChatResponse; import com.baidubce.qianfan.model.image.Image2TextResponse; import com.baidubce.qianfan.model.image.Text2ImageResponse; import com.yutou.qqbot.data.baidu.Message; +import com.yutou.qqbot.utlis.ConfigTools; +import com.yutou.qqbot.utlis.Log; +import com.yutou.qqbot.utlis.StringUtils; import lombok.val; import java.io.ByteArrayInputStream; @@ -19,7 +22,7 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; -public class BaiduGPTManager { +public class BaiduGPTManager extends AbsGPTManager { private static final AtomicInteger MAX_MESSAGE = new AtomicInteger(20); private static final String AppID = ConfigTools.load(ConfigTools.CONFIG, ConfigTools.BAIDU_GPT_APPID, String.class); private static final String ApiKey = ConfigTools.load(ConfigTools.CONFIG, ConfigTools.BAIDU_GPT_API_KEY, String.class); @@ -76,6 +79,7 @@ public class BaiduGPTManager { /** * 这里确实是需要清空所有数据 */ + @Override public synchronized void clear() { // 添加同步 msgMap.clear(); for (AtomicBoolean value : userLocks.values()) { @@ -101,6 +105,7 @@ public class BaiduGPTManager { System.out.println("输出内容:" + response.getResult()); } + @Override public Message sendMessage(String user, String message) { // 获取或创建用户锁 AtomicBoolean lock = userLocks.computeIfAbsent(user, k -> new AtomicBoolean(false)); @@ -152,6 +157,7 @@ public class BaiduGPTManager { * @param text 要转换为图像的文本 * @return 返回生成的图像文件对象,如果转换过程中发生错误,则返回null */ + @Override public File textToImage(String user, String text) { // 使用QianFan的text2Image方法将文本转换为图像数据 Text2ImageResponse response = qianfan.text2Image() @@ -181,6 +187,7 @@ public class BaiduGPTManager { * @param file 要转换的图片文件 * @return 转换后的文本描述,如果转换失败则返回null */ + @Override public String imageToText(String user, File file) { // 将file文件转换成base64的代码 try { @@ -203,6 +210,7 @@ public class BaiduGPTManager { return null; } + @Override public String getGPTVersion() { return (model.equals(modelFor35) ? "3.5" : "4.0"); } 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 2c78f6f..00cd98b 100644 --- a/src/main/java/com/yutou/qqbot/models/Commands/BaiduGPT.java +++ b/src/main/java/com/yutou/qqbot/models/Commands/BaiduGPT.java @@ -2,21 +2,16 @@ package com.yutou.qqbot.models.Commands; import com.yutou.napcat.QQDatabase; import com.yutou.napcat.handle.*; -import com.yutou.napcat.http.NapCatApi; import com.yutou.qqbot.Annotations.UseModel; -import com.yutou.qqbot.QQBotApplication; import com.yutou.qqbot.QQBotManager; import com.yutou.qqbot.data.baidu.Message; -import com.yutou.qqbot.data.baidu.ResponseMessage; import com.yutou.qqbot.interfaces.DownloadInterface; import com.yutou.qqbot.models.Model; -import com.yutou.qqbot.utlis.BaiduGPTManager; +import com.yutou.qqbot.gpt.BaiduGPTManager; import com.yutou.napcat.event.MessageEvent; import com.yutou.qqbot.utlis.ConfigTools; import com.yutou.qqbot.utlis.HttpTools; -import com.yutou.qqbot.utlis.StringUtils; import lombok.val; -import org.apache.catalina.valves.JsonErrorReportValve; import java.io.File; import java.util.ArrayList; diff --git a/src/main/java/com/yutou/qqbot/utlis/ApplicationInit.java b/src/main/java/com/yutou/qqbot/utlis/ApplicationInit.java index 83aff58..189f653 100644 --- a/src/main/java/com/yutou/qqbot/utlis/ApplicationInit.java +++ b/src/main/java/com/yutou/qqbot/utlis/ApplicationInit.java @@ -3,10 +3,9 @@ package com.yutou.qqbot.utlis; import com.yutou.napcat.QQDatabase; import com.yutou.napcat.model.GroupBean; import com.yutou.qqbot.Annotations.UseModel; -import com.yutou.qqbot.QQBotManager; import com.yutou.qqbot.QQNumberManager; +import com.yutou.qqbot.gpt.BaiduGPTManager; import com.yutou.qqbot.models.Model; -import lombok.val; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.stereotype.Component;