refactor(gpt): 重构 GPT 相关代码并优化功能

- 新增 AbsGPTManager 抽象类,定义 GPT 管理器的通用接口
- 重命名 BaiduGPTManager 类,使其位于 com.yutou.qqbot.gpt 包中
- 更新相关引用和依赖
- 优化部分代码结构,提高可维护性
This commit is contained in:
Yutou 2025-02-04 18:15:15 +08:00
parent 09305ae824
commit e7fae929a1
4 changed files with 25 additions and 10 deletions

View File

@ -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();
}

View File

@ -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");
}

View File

@ -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;

View File

@ -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;