feat(gpt): 更新百度大模型并添加模型列表展示

- 添加了百度大模型列表的展示功能
- 百度大模型新增v2模式,支持ds模型
- 优化了代码格式和结构
- 版本号更新到 QQBot v.1.7.15
This commit is contained in:
Yutou 2025-02-19 11:09:18 +08:00
parent 9ab99b22e2
commit a7676fa6db
3 changed files with 69 additions and 30 deletions
src/main/java/com/yutou/qqbot

@ -10,7 +10,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class QQBotApplication {
public static final String version = "QQBot v.1.7.14";
public static final String version = "QQBot v.1.7.15";
public static void main(String[] args) {
System.out.println("version = " + version);

@ -1,7 +1,9 @@
package com.yutou.qqbot.gpt;
import com.baidubce.qianfan.Qianfan;
import com.baidubce.qianfan.QianfanV2;
import com.baidubce.qianfan.model.chat.ChatResponse;
import com.baidubce.qianfan.model.chat.v2.response.ResponseV2;
import com.baidubce.qianfan.model.image.Image2TextResponse;
import com.baidubce.qianfan.model.image.Text2ImageResponse;
import com.yutou.qqbot.data.baidu.Message;
@ -29,13 +31,15 @@ public class BaiduGPTManager extends AbsGPTManager {
//ConfigTools.load操作可以确保获取到相关参数所以无需关心
private static final String AccessKey = ConfigTools.load(ConfigTools.CONFIG, ConfigTools.BAIDU_GPT_ACCESS_KEY, String.class);
private static final String SecretKey = ConfigTools.load(ConfigTools.CONFIG, ConfigTools.BAIDU_GPT_SECRET_KEY, String.class);
private final static String modelFor40 = "ERNIE-4.0-8K";
private final static String modelFor35 = "ERNIE-Speed-128K";
private final static String modelFor40 = "ernie-4.0-8k";
private final static String modelFor35 = "ernie-speed-128k";
private final Qianfan qianfan;
private final QianfanV2 qianfanV2;
private BaiduGPTManager() {
qianfan = new Qianfan(AccessKey, SecretKey);
qianfanV2 = new Qianfan(AccessKey, SecretKey).v2();
String savedVersion = ConfigTools.load(ConfigTools.CONFIG, ConfigTools.BAIDU_GPT_VERSION, String.class);
if (StringUtils.isEmpty(savedVersion) || (!"3.5".equals(savedVersion) && !"4.0".equals(savedVersion))) {
savedVersion = "3.5";
@ -99,13 +103,13 @@ public class BaiduGPTManager extends AbsGPTManager {
try {
List<Message> list = getMessageList(user);
list.add(Message.create(message));
val builder = qianfan.chatCompletion()
val builder = qianfanV2.chatCompletion()
.model(model);
for (Message msg : list) {
builder.addMessage(msg.getRole(), msg.getContent());
}
ChatResponse chatResponse = builder.execute();
Message response = Message.create(chatResponse.getResult(), true);
ResponseV2 chatResponse = qianfanV2.chatCompletion(builder.build());
Message response = Message.create(chatResponse.getChoices().get(0).getMessage().getContent(), true);
synchronized (list) {
list.add(response);
if (list.size() > MAX_MESSAGE.get()) {
@ -134,7 +138,8 @@ public class BaiduGPTManager extends AbsGPTManager {
* @return 返回生成的图像文件对象如果转换过程中发生错误则返回null
*/
@Override
public File textToImage(String user, String text) {
public File textToImage(String user, String text) {
try {
// 使用QianFan的text2Image方法将文本转换为图像数据
Text2ImageResponse response = qianfan.text2Image()
.prompt(text)
@ -148,13 +153,15 @@ public class BaiduGPTManager extends AbsGPTManager {
// 将解码后的图像数据复制到图像文件中替换现有文件
Files.copy(inputStream, imageFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
return imageFile;
} catch (Exception e) {
// 如果在图像文件生成过程中发生错误记录错误信息
Log.e(e);
}
// 如果发生错误返回null
return null;
} catch (Exception e) {
// 如果在图像文件生成过程中发生错误记录错误信息
Log.e(e);
}
// 如果发生错误返回null
return null;
}
/**
* 将图片转换为文本描述

@ -32,16 +32,13 @@ public class BaiduGPT extends Model {
@Override
public String[] getUsePowers() {
return new String[]{
QQGroupCommands.GPT,
QQGroupCommands.GPT_CLEAR
};
return new String[]{QQGroupCommands.GPT, QQGroupCommands.GPT_CLEAR};
}
public BaiduGPT() {
val load = ConfigTools.load(ConfigTools.CONFIG, ConfigTools.GPT, String.class);
if(!StringUtils.isEmpty(load)){
switch (load){
if (!StringUtils.isEmpty(load)) {
switch (load) {
case "baidu":
gptManager = BaiduGPTManager.class;
break;
@ -49,7 +46,7 @@ public class BaiduGPT extends Model {
gptManager = SiliconGPTManager.class;
break;
}
}else{
} else {
gptManager = BaiduGPTManager.class;
}
}
@ -65,13 +62,47 @@ public class BaiduGPT extends Model {
if (event.getTextMessage().equals(QQGroupCommands.GPT_CLEAR)) {
AbsGPTManager.getManager(gptManager).clear();
QQBotManager.getInstance().sendMessage(event.isUser(), qq, new Text("已经失忆捏"));
} else if ("百度模型列表".equals(event.getTextMessage())) {
val modelList = """
模型版本ernie-4.0-8k-latest
模型版本ernie-4.0-8k-preview
模型版本ernie-4.0-8k
模型版本ernie-4.0-turbo-8k-latest
模型版本ernie-4.0-turbo-8k-preview
模型版本ernie-4.0-turbo-8k
模型版本ernie-4.0-turbo-128k
模型版本ernie-3.5-8k-preview
模型版本ernie-3.5-8k
模型版本ernie-3.5-128k
模型版本ernie-speed-8k
模型版本ernie-speed-128k
模型版本ernie-speed-pro-128k
模型版本ernie-lite-8k
模型版本ernie-lite-pro-128k
模型版本ernie-tiny-8k
模型版本ernie-char-8k
模型版本ernie-char-fiction-8k
模型版本ernie-novel-8k
模型版本deepseek-v3
模型版本deepseek-r1
模型版本deepseek-r1-distill-qwen-32b
模型版本deepseek-r1-distill-qwen-14b
模型版本deepseek-r1-distill-qwen-7b
模型版本deepseek-r1-distill-qwen-1.5b
模型版本deepseek-r1-distill-llama-70b
模型版本deepseek-r1-distill-llama-8b
模型版本deepseek-r1-distill-qianfan-llama-70b
模型版本deepseek-r1-distill-qianfan-llama-8b
""";
QQBotManager.getInstance().sendMessage(qq, new Text(modelList));
} else if (event.isAtMe()) {
if (event.getTextMessage().contains("省流") || event.getTextMessage().contains("总结")) {
return;
}
if (event.getTextMessage().contains("画画")) {
val file = BaiduGPTManager.getManager().textToImage(String.valueOf(qq), event.getTextMessage().replace("@" + QQDatabase.getMe().getUserId(), "").replace("画画", "").trim());
Log.i("画图",event.getTextMessage());
Log.i("画图", event.getTextMessage());
if (file == null) {
QQBotManager.getInstance().sendMessage(event.isUser(), qq, new Text("画不出"));
} else {
@ -93,14 +124,14 @@ public class BaiduGPT extends Model {
QQBotManager.getInstance().sendMessage(event.isUser(), qq, list);
}
return;
}else if(event.getTextMessage().contains("大模型切换到")){
} else if (event.getTextMessage().contains("大模型切换到")) {
List<BaseHandle<?>> list = new ArrayList<>();
val text = event.getTextMessage().replace("@" + QQDatabase.getMe().getUserId(), "").replace("大模型切换到", "").trim();
if(text.contains("baidu")|| text.contains("百度")){
gptManager= BaiduGPTManager.class;
if (text.contains("baidu") || text.contains("百度")) {
gptManager = BaiduGPTManager.class;
ConfigTools.save(ConfigTools.CONFIG, ConfigTools.GPT, "baidu");
}else if(text.contains("silicon")||text.contains("硅基")){
gptManager= SiliconGPTManager.class;
} else if (text.contains("silicon") || text.contains("硅基")) {
gptManager = SiliconGPTManager.class;
ConfigTools.save(ConfigTools.CONFIG, ConfigTools.GPT, "silicon");
}
list.add(new At(user));
@ -155,13 +186,14 @@ public class BaiduGPT extends Model {
public static void main(String[] args) {
System.out.println(ConfigTools.load(ConfigTools.CONFIG, ConfigTools.BAIDU_GPT_VERSION));
val messageEvent = new MessageEvent();
messageEvent.setMessage(new ArrayList<>());
messageEvent.setRawMessage("");
new BaiduGPT().onMessage(123456789L, messageEvent, false);
BaiduGPTManager.getManager().clear();
new BaiduGPT().onMessage(123456789L, messageEvent, false);
// messageEvent.setMessage(new ArrayList<>());
// messageEvent.setRawMessage("");
// new BaiduGPT().onMessage(123456789L, messageEvent, false);
// BaiduGPTManager.getManager().clear();
// new BaiduGPT().onMessage(123456789L, messageEvent, false);
/* BaiduGPTManager.getManager().clear();
BaiduGPTManager.getManager().setModelFor35();
new BaiduGPT().onMessage(123456789L, messageEvent, false);*/
System.out.println(BaiduGPTManager.getManager().sendMessage("user", "宫廷玉液酒减去大锤等于多少"));
}
}