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

View File

@ -10,7 +10,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication @SpringBootApplication
public class QQBotApplication { 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) { public static void main(String[] args) {
System.out.println("version = " + version); System.out.println("version = " + version);

View File

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

View File

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