Files
QQBot/src/main/java/com/yutou/qqbot/gpt/AbsGPTManager.java
Yutou 068964145f feat(gpt): 支持硅基大模型并优化 GPT功能
- 新增对硅基大模型的支持,可通过指令切换使用
- 优化 GPT 模型切换逻辑,支持更多自定义选项
- 优化日志级别和网络请求超时设置
2025-02-10 13:44:31 +08:00

139 lines
4.0 KiB
Java

package com.yutou.qqbot.gpt;
import com.yutou.qqbot.data.baidu.Message;
import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
public abstract class AbsGPTManager {
protected static final AtomicInteger MAX_MESSAGE = new AtomicInteger(20);
protected final ConcurrentHashMap<String, List<Message>> msgMap= new ConcurrentHashMap<>();
// 新增锁映射表
protected final ConcurrentHashMap<String, AtomicBoolean> userLocks = new ConcurrentHashMap<>();
protected String model ;
/**
* 清除与GPT管理器相关的所有缓存或状态信息。
*/
/**
* 这里确实是需要清空所有数据
*/
public synchronized void clear() { // 添加同步
msgMap.clear();
for (AtomicBoolean value : userLocks.values()) {
value.set(false);
}
userLocks.forEachValue(1, atomicBoolean -> atomicBoolean.set(false));
userLocks.clear();
}
/**
* 发送消息到指定用户。
*
* @param user 接收消息的用户标识符。
* @param message 要发送的消息内容。
* @return 包含消息发送结果的Message对象。
*/
public abstract Message sendMessage(String user, String message);
/**
* 将文本转换为图像。
*
* @param user 用户标识符。
* @param text 要转换为图像的文本内容。
* @return 包含生成图像的File对象。
*/
public abstract File textToImage(String user, String text);
/**
* 将图像转换为文本。
*
* @param user 用户标识符。
* @param file 包含要转换为文本的图像文件。
* @return 提取的文本内容。
*/
public abstract String imageToText(String user, File file);
/**
* 获取当前使用的GPT版本信息。
*
* @return GPT版本字符串。
*/
public abstract String getGPTVersion();
/**
* 设置最大消息数量。
*
* @param count 最大消息数量。
* @return 设置后的最大消息数量。
*/
public abstract int setMaxMessageCount(int count);
public List<Message> getMessageList(String user){
List<Message> list = msgMap.computeIfAbsent(user, k -> Collections.synchronizedList(new ArrayList<>()));
// 限制历史消息的最大数量
synchronized (list) {
if (list.size() >= MAX_MESSAGE.get()) {
int removeCount = list.size() - MAX_MESSAGE.get() + 1; // 腾出空间给新消息
list.subList(0, removeCount).clear();
}
}
return list;
}
/**
* 根据指定的类获取相应的GPT管理器实例。
*
* @param tClass GPT管理器的具体实现类。
* @return GPT管理器实例。
*/
public static <T extends AbsGPTManager> AbsGPTManager getManager(Class<?> tClass) {
if (tClass == BaiduGPTManager.class) {
return BaiduGPTManager.getManager();
}else if(tClass== SiliconGPTManager.class){
return SiliconGPTManager.getInstance();
}
return new AbsGPTManager() {
@Override
public void clear() {
}
@Override
public Message sendMessage(String user, String message) {
return null;
}
@Override
public File textToImage(String user, String text) {
return null;
}
@Override
public String imageToText(String user, File file) {
return "";
}
@Override
public String getGPTVersion() {
return "";
}
@Override
public int setMaxMessageCount(int count) {
return 0;
}
};
}
public AbsGPTManager setModel(String model) {
this.model=model;
return this;
}
}