diff --git a/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/chatqianwen/QianWenChatClient.java b/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/chatqianwen/QianWenChatClient.java index be86483500..e18ebe0367 100644 --- a/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/chatqianwen/QianWenChatClient.java +++ b/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/chatqianwen/QianWenChatClient.java @@ -100,7 +100,7 @@ public class QianWenChatClient implements ChatClient, StreamingChatClient { messageList.add(message); }); return QwenParam.builder() - .model(qianWenApi.getQianWenChatModal().getValue()) + .model(qianWenApi.getQianWenChatModal().getModel()) .prompt(prompt.getContents()) .messages(messageList) .maxTokens(chatOptions.getMaxTokens()) diff --git a/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/chatqianwen/QianWenChatModal.java b/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/chatqianwen/QianWenChatModal.java index 96646233ad..7fd9411bf6 100644 --- a/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/chatqianwen/QianWenChatModal.java +++ b/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/chatqianwen/QianWenChatModal.java @@ -34,5 +34,14 @@ public enum QianWenChatModal { private String name; - private String value; + private String model; + + public static QianWenChatModal valueOfModel(String model) { + for (QianWenChatModal itemEnum : QianWenChatModal.values()) { + if (itemEnum.getModel().equals(model)) { + return itemEnum; + } + } + throw new IllegalArgumentException("Invalid MessageType value: " + model); + } } diff --git a/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/chatxinghuo/XingHuoChatClient.java b/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/chatxinghuo/XingHuoChatClient.java index c257203b10..90ae6dfeea 100644 --- a/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/chatxinghuo/XingHuoChatClient.java +++ b/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/chatxinghuo/XingHuoChatClient.java @@ -114,7 +114,7 @@ public class XingHuoChatClient implements ChatClient, StreamingChatClient { // 创建 params XingHuoChatCompletionRequest.Parameter.Chat chatParameter = new XingHuoChatCompletionRequest.Parameter.Chat(); BeanUtil.copyProperties(xingHuoOptions, chatParameter); - chatParameter.setDomain(xingHuoOptions.getChatModel().getValue()); + chatParameter.setDomain(xingHuoOptions.getChatModel().getModel()); XingHuoChatCompletionRequest.Parameter parameter = new XingHuoChatCompletionRequest.Parameter().setChat(chatParameter); // 创建 payload text 信息 List texts = prompt.getInstructions().stream().map(message -> { diff --git a/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/chatxinghuo/XingHuoChatModel.java b/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/chatxinghuo/XingHuoChatModel.java index e00a622b08..5be9f40a9c 100644 --- a/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/chatxinghuo/XingHuoChatModel.java +++ b/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/chatxinghuo/XingHuoChatModel.java @@ -30,15 +30,24 @@ public enum XingHuoChatModel { ; - XingHuoChatModel(String name, String value, String uri) { + XingHuoChatModel(String name, String model, String uri) { this.name = name; - this.value = value; + this.model = model; this.uri = uri; } private String name; - private String value; + private String model; private String uri; + + public static XingHuoChatModel valueOfModel(String model) { + for (XingHuoChatModel itemEnum : XingHuoChatModel.values()) { + if (itemEnum.getModel().equals(model)) { + return itemEnum; + } + } + throw new IllegalArgumentException("Invalid MessageType value: " + model); + } } diff --git a/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/chatyiyan/YiYanChatModel.java b/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/chatyiyan/YiYanChatModel.java index b901a4dc74..4c8b3aa85e 100644 --- a/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/chatyiyan/YiYanChatModel.java +++ b/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/chatyiyan/YiYanChatModel.java @@ -25,8 +25,16 @@ public enum YiYanChatModel { ; - private String value; + private String model; private String uri; + public static YiYanChatModel valueOfModel(String model) { + for (YiYanChatModel itemEnum : YiYanChatModel.values()) { + if (itemEnum.getModel().equals(model)) { + return itemEnum; + } + } + throw new IllegalArgumentException("Invalid MessageType value: " + model); + } } diff --git a/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/config/YudaoAiAutoConfiguration.java b/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/config/YudaoAiAutoConfiguration.java index b9be65407f..385de4cf0d 100644 --- a/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/config/YudaoAiAutoConfiguration.java +++ b/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/config/YudaoAiAutoConfiguration.java @@ -10,6 +10,9 @@ import cn.iocoder.yudao.framework.ai.chatxinghuo.api.XingHuoApi; import cn.iocoder.yudao.framework.ai.chatyiyan.YiYanChatClient; import cn.iocoder.yudao.framework.ai.chatyiyan.YiYanOptions; import cn.iocoder.yudao.framework.ai.chatyiyan.api.YiYanApi; +import cn.iocoder.yudao.framework.ai.imageopenai.OpenAiImageApi; +import cn.iocoder.yudao.framework.ai.imageopenai.OpenAiImageClient; +import cn.iocoder.yudao.framework.ai.imageopenai.OpenAiImageOptions; import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; @@ -32,7 +35,7 @@ public class YudaoAiAutoConfiguration { YudaoAiProperties.XingHuoProperties xingHuoProperties = yudaoAiProperties.getXinghuo(); // 转换配置 XingHuoOptions xingHuoOptions = new XingHuoOptions(); - xingHuoOptions.setChatModel(xingHuoProperties.getChatModel()); + xingHuoOptions.setChatModel(xingHuoProperties.getModel()); xingHuoOptions.setTopK(xingHuoProperties.getTopK()); xingHuoOptions.setTemperature(xingHuoProperties.getTemperature()); xingHuoOptions.setMaxTokens(xingHuoProperties.getMaxTokens()); @@ -79,10 +82,24 @@ public class YudaoAiAutoConfiguration { new YiYanApi( yiYanProperties.getAppKey(), yiYanProperties.getSecretKey(), - yiYanProperties.getChatModel(), + yiYanProperties.getModel(), yiYanProperties.getRefreshTokenSecondTime() ), yiYanOptions ); } + + + @Bean + @ConditionalOnProperty(value = "yudao.ai.openAiImage.enable", havingValue = "true") + public OpenAiImageClient openAiImageClient(YudaoAiProperties yudaoAiProperties) { + YudaoAiProperties.OpenAiImageProperties openAiImageProperties = yudaoAiProperties.getOpenAiImage(); + // 创建 client + return new OpenAiImageClient( + new OpenAiImageApi(openAiImageProperties.getApiKey()), + new OpenAiImageOptions() + .setModel(openAiImageProperties.getModel()) + .setResponseFormat(OpenAiImageOptions.ResponseFormatEnum.URL.getValue()) + ); + } } \ No newline at end of file diff --git a/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/config/YudaoAiProperties.java b/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/config/YudaoAiProperties.java index d638a2b067..5ec1a9b433 100644 --- a/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/config/YudaoAiProperties.java +++ b/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/config/YudaoAiProperties.java @@ -3,6 +3,7 @@ package cn.iocoder.yudao.framework.ai.config; import cn.iocoder.yudao.framework.ai.AiPlatformEnum; import cn.iocoder.yudao.framework.ai.chatxinghuo.XingHuoChatModel; import cn.iocoder.yudao.framework.ai.chatyiyan.YiYanChatModel; +import cn.iocoder.yudao.framework.ai.imageopenai.OpenAiImageModelEnum; import lombok.Data; import lombok.experimental.Accessors; import org.springframework.boot.context.properties.ConfigurationProperties; @@ -23,6 +24,7 @@ public class YudaoAiProperties { private QianWenProperties qianwen; private XingHuoProperties xinghuo; private YiYanProperties yiyan; + private OpenAiImageProperties openAiImage; @Data @Accessors(chain = true) @@ -64,7 +66,7 @@ public class YudaoAiProperties { private String appId; private String appKey; private String secretKey; - private XingHuoChatModel chatModel; + private XingHuoChatModel model; } @Data @@ -81,12 +83,23 @@ public class YudaoAiProperties { /** * 模型 */ - private YiYanChatModel chatModel = YiYanChatModel.ERNIE4_3_5_8K; + private YiYanChatModel model = YiYanChatModel.ERNIE4_3_5_8K; /** * token 刷新时间(默认 86400 = 24小时) */ private int refreshTokenSecondTime = 86400; + } - private YiYanChatModel model; + @Data + @Accessors(chain = true) + public static class OpenAiImageProperties { + /** + * api key + */ + private String apiKey; + /** + * 模型 + */ + private OpenAiImageModelEnum model = OpenAiImageModelEnum.DALL_E_2; } }