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.Qianfan;
import com.baidubce.qianfan.model.chat.ChatResponse; import com.baidubce.qianfan.model.chat.ChatResponse;
import com.baidubce.qianfan.model.image.Image2TextResponse; import com.baidubce.qianfan.model.image.Image2TextResponse;
import com.baidubce.qianfan.model.image.Text2ImageResponse; import com.baidubce.qianfan.model.image.Text2ImageResponse;
import com.yutou.qqbot.data.baidu.Message; 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 lombok.val;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
@ -19,7 +22,7 @@ import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger; 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 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 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); 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() { // 添加同步 public synchronized void clear() { // 添加同步
msgMap.clear(); msgMap.clear();
for (AtomicBoolean value : userLocks.values()) { for (AtomicBoolean value : userLocks.values()) {
@ -101,6 +105,7 @@ public class BaiduGPTManager {
System.out.println("输出内容:" + response.getResult()); System.out.println("输出内容:" + response.getResult());
} }
@Override
public Message sendMessage(String user, String message) { public Message sendMessage(String user, String message) {
// 获取或创建用户锁 // 获取或创建用户锁
AtomicBoolean lock = userLocks.computeIfAbsent(user, k -> new AtomicBoolean(false)); AtomicBoolean lock = userLocks.computeIfAbsent(user, k -> new AtomicBoolean(false));
@ -152,6 +157,7 @@ public class BaiduGPTManager {
* @param text 要转换为图像的文本 * @param text 要转换为图像的文本
* @return 返回生成的图像文件对象如果转换过程中发生错误则返回null * @return 返回生成的图像文件对象如果转换过程中发生错误则返回null
*/ */
@Override
public File textToImage(String user, String text) { public File textToImage(String user, String text) {
// 使用QianFan的text2Image方法将文本转换为图像数据 // 使用QianFan的text2Image方法将文本转换为图像数据
Text2ImageResponse response = qianfan.text2Image() Text2ImageResponse response = qianfan.text2Image()
@ -181,6 +187,7 @@ public class BaiduGPTManager {
* @param file 要转换的图片文件 * @param file 要转换的图片文件
* @return 转换后的文本描述如果转换失败则返回null * @return 转换后的文本描述如果转换失败则返回null
*/ */
@Override
public String imageToText(String user, File file) { public String imageToText(String user, File file) {
// 将file文件转换成base64的代码 // 将file文件转换成base64的代码
try { try {
@ -203,6 +210,7 @@ public class BaiduGPTManager {
return null; return null;
} }
@Override
public String getGPTVersion() { public String getGPTVersion() {
return (model.equals(modelFor35) ? "3.5" : "4.0"); 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.QQDatabase;
import com.yutou.napcat.handle.*; import com.yutou.napcat.handle.*;
import com.yutou.napcat.http.NapCatApi;
import com.yutou.qqbot.Annotations.UseModel; import com.yutou.qqbot.Annotations.UseModel;
import com.yutou.qqbot.QQBotApplication;
import com.yutou.qqbot.QQBotManager; import com.yutou.qqbot.QQBotManager;
import com.yutou.qqbot.data.baidu.Message; import com.yutou.qqbot.data.baidu.Message;
import com.yutou.qqbot.data.baidu.ResponseMessage;
import com.yutou.qqbot.interfaces.DownloadInterface; import com.yutou.qqbot.interfaces.DownloadInterface;
import com.yutou.qqbot.models.Model; 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.napcat.event.MessageEvent;
import com.yutou.qqbot.utlis.ConfigTools; import com.yutou.qqbot.utlis.ConfigTools;
import com.yutou.qqbot.utlis.HttpTools; import com.yutou.qqbot.utlis.HttpTools;
import com.yutou.qqbot.utlis.StringUtils;
import lombok.val; import lombok.val;
import org.apache.catalina.valves.JsonErrorReportValve;
import java.io.File; import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;

View File

@ -3,10 +3,9 @@ package com.yutou.qqbot.utlis;
import com.yutou.napcat.QQDatabase; import com.yutou.napcat.QQDatabase;
import com.yutou.napcat.model.GroupBean; import com.yutou.napcat.model.GroupBean;
import com.yutou.qqbot.Annotations.UseModel; import com.yutou.qqbot.Annotations.UseModel;
import com.yutou.qqbot.QQBotManager;
import com.yutou.qqbot.QQNumberManager; import com.yutou.qqbot.QQNumberManager;
import com.yutou.qqbot.gpt.BaiduGPTManager;
import com.yutou.qqbot.models.Model; import com.yutou.qqbot.models.Model;
import lombok.val;
import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner; import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;