Commit c789418a7bd9aedd1097de1b160141b7dded92eb

Authored by YunaiV
1 parent e5025044

feat:【AI 大模型】依赖 spring ai 升级到 1.0.0

yudao-module-ai/pom.xml
@@ -19,7 +19,8 @@ @@ -19,7 +19,8 @@
19 国外:OpenAI、Ollama、Midjourney、StableDiffusion、Suno 19 国外:OpenAI、Ollama、Midjourney、StableDiffusion、Suno
20 </description> 20 </description>
21 <properties> 21 <properties>
22 - <spring-ai.version>1.0.0-M6</spring-ai.version> 22 + <spring-ai.version>1.0.0</spring-ai.version>
  23 + <alibaba-ai.version>1.0.0.2</alibaba-ai.version>
23 <tinyflow.version>1.0.2</tinyflow.version> 24 <tinyflow.version>1.0.2</tinyflow.version>
24 </properties> 25 </properties>
25 26
@@ -75,65 +76,66 @@ @@ -75,65 +76,66 @@
75 <!-- Spring AI Model 模型接入 --> 76 <!-- Spring AI Model 模型接入 -->
76 <dependency> 77 <dependency>
77 <groupId>org.springframework.ai</groupId> 78 <groupId>org.springframework.ai</groupId>
78 - <artifactId>spring-ai-openai-spring-boot-starter</artifactId> 79 + <artifactId>spring-ai-starter-model-openai</artifactId>
79 <version>${spring-ai.version}</version> 80 <version>${spring-ai.version}</version>
80 </dependency> 81 </dependency>
81 <dependency> 82 <dependency>
82 <groupId>org.springframework.ai</groupId> 83 <groupId>org.springframework.ai</groupId>
83 - <artifactId>spring-ai-azure-openai-spring-boot-starter</artifactId> 84 + <artifactId>spring-ai-starter-model-azure-openai</artifactId>
84 <version>${spring-ai.version}</version> 85 <version>${spring-ai.version}</version>
85 </dependency> 86 </dependency>
86 <dependency> 87 <dependency>
87 <groupId>org.springframework.ai</groupId> 88 <groupId>org.springframework.ai</groupId>
88 - <artifactId>spring-ai-ollama-spring-boot-starter</artifactId> 89 + <artifactId>spring-ai-starter-model-ollama</artifactId>
89 <version>${spring-ai.version}</version> 90 <version>${spring-ai.version}</version>
90 </dependency> 91 </dependency>
91 <dependency> 92 <dependency>
92 <groupId>org.springframework.ai</groupId> 93 <groupId>org.springframework.ai</groupId>
93 - <artifactId>spring-ai-stability-ai-spring-boot-starter</artifactId> 94 + <artifactId>spring-ai-starter-model-stability-ai</artifactId>
94 <version>${spring-ai.version}</version> 95 <version>${spring-ai.version}</version>
95 </dependency> 96 </dependency>
96 <dependency> 97 <dependency>
97 <!-- 通义千问 --> 98 <!-- 通义千问 -->
98 <groupId>com.alibaba.cloud.ai</groupId> 99 <groupId>com.alibaba.cloud.ai</groupId>
99 - <artifactId>spring-ai-alibaba-starter</artifactId>  
100 - <version>${spring-ai.version}.1</version> 100 + <artifactId>spring-ai-alibaba-starter-dashscope</artifactId>
  101 + <version>${alibaba-ai.version}</version>
101 </dependency> 102 </dependency>
102 <dependency> 103 <dependency>
103 <!-- 文心一言 --> 104 <!-- 文心一言 -->
104 - <groupId>org.springframework.ai</groupId>  
105 - <artifactId>spring-ai-qianfan-spring-boot-starter</artifactId>  
106 - <version>${spring-ai.version}</version> 105 + <groupId>org.springaicommunity</groupId>
  106 + <artifactId>qianfan-spring-boot-starter</artifactId>
  107 + <version>1.0.0</version>
107 </dependency> 108 </dependency>
108 <dependency> 109 <dependency>
109 <!-- 智谱 GLM --> 110 <!-- 智谱 GLM -->
110 <groupId>org.springframework.ai</groupId> 111 <groupId>org.springframework.ai</groupId>
111 - <artifactId>spring-ai-zhipuai-spring-boot-starter</artifactId> 112 + <artifactId>spring-ai-starter-model-zhipuai</artifactId>
112 <version>${spring-ai.version}</version> 113 <version>${spring-ai.version}</version>
113 </dependency> 114 </dependency>
114 <dependency> 115 <dependency>
115 <groupId>org.springframework.ai</groupId> 116 <groupId>org.springframework.ai</groupId>
116 - <artifactId>spring-ai-minimax-spring-boot-starter</artifactId> 117 + <artifactId>spring-ai-starter-model-minimax</artifactId>
117 <version>${spring-ai.version}</version> 118 <version>${spring-ai.version}</version>
118 </dependency> 119 </dependency>
119 <dependency> 120 <dependency>
120 - <groupId>org.springframework.ai</groupId>  
121 - <artifactId>spring-ai-moonshot-spring-boot-starter</artifactId>  
122 - <version>${spring-ai.version}</version> 121 + <!-- 月之暗灭 -->
  122 + <groupId>org.springaicommunity</groupId>
  123 + <artifactId>moonshot-spring-boot-starter</artifactId>
  124 + <version>1.0.0</version>
123 </dependency> 125 </dependency>
124 126
125 <!-- 向量存储:https://db-engines.com/en/ranking/vector+dbms --> 127 <!-- 向量存储:https://db-engines.com/en/ranking/vector+dbms -->
126 <dependency> 128 <dependency>
127 <!-- Qdrant:https://qdrant.tech/ --> 129 <!-- Qdrant:https://qdrant.tech/ -->
128 <groupId>org.springframework.ai</groupId> 130 <groupId>org.springframework.ai</groupId>
129 - <artifactId>spring-ai-qdrant-store</artifactId> 131 + <artifactId>spring-ai-starter-vector-store-qdrant</artifactId>
130 <version>${spring-ai.version}</version> 132 <version>${spring-ai.version}</version>
131 </dependency> 133 </dependency>
132 134
133 <dependency> 135 <dependency>
134 <!-- Redis:https://redis.io/docs/latest/develop/get-started/vector-database/ --> 136 <!-- Redis:https://redis.io/docs/latest/develop/get-started/vector-database/ -->
135 <groupId>org.springframework.ai</groupId> 137 <groupId>org.springframework.ai</groupId>
136 - <artifactId>spring-ai-redis-store</artifactId> 138 + <artifactId>spring-ai-starter-vector-store-redis</artifactId>
137 <version>${spring-ai.version}</version> 139 <version>${spring-ai.version}</version>
138 </dependency> 140 </dependency>
139 <dependency> 141 <dependency>
@@ -144,7 +146,7 @@ @@ -144,7 +146,7 @@
144 <dependency> 146 <dependency>
145 <!-- Milvus:https://milvus.io/ --> 147 <!-- Milvus:https://milvus.io/ -->
146 <groupId>org.springframework.ai</groupId> 148 <groupId>org.springframework.ai</groupId>
147 - <artifactId>spring-ai-milvus-store</artifactId> 149 + <artifactId>spring-ai-starter-vector-store-milvus</artifactId>
148 <version>${spring-ai.version}</version> 150 <version>${spring-ai.version}</version>
149 <exclusions> 151 <exclusions>
150 <!-- 解决和 logback 的日志冲突 --> 152 <!-- 解决和 logback 的日志冲突 -->
yudao-module-ai/src/main/java/cn/iocoder/yudao/module/ai/framework/ai/config/AiAutoConfiguration.java
@@ -14,10 +14,6 @@ import cn.iocoder.yudao.module.ai.framework.ai.core.model.siliconflow.SiliconFlo @@ -14,10 +14,6 @@ import cn.iocoder.yudao.module.ai.framework.ai.core.model.siliconflow.SiliconFlo
14 import cn.iocoder.yudao.module.ai.framework.ai.core.model.suno.api.SunoApi; 14 import cn.iocoder.yudao.module.ai.framework.ai.core.model.suno.api.SunoApi;
15 import cn.iocoder.yudao.module.ai.framework.ai.core.model.xinghuo.XingHuoChatModel; 15 import cn.iocoder.yudao.module.ai.framework.ai.core.model.xinghuo.XingHuoChatModel;
16 import lombok.extern.slf4j.Slf4j; 16 import lombok.extern.slf4j.Slf4j;
17 -import org.springframework.ai.autoconfigure.vectorstore.milvus.MilvusServiceClientProperties;  
18 -import org.springframework.ai.autoconfigure.vectorstore.milvus.MilvusVectorStoreProperties;  
19 -import org.springframework.ai.autoconfigure.vectorstore.qdrant.QdrantVectorStoreProperties;  
20 -import org.springframework.ai.autoconfigure.vectorstore.redis.RedisVectorStoreProperties;  
21 import org.springframework.ai.embedding.BatchingStrategy; 17 import org.springframework.ai.embedding.BatchingStrategy;
22 import org.springframework.ai.embedding.TokenCountBatchingStrategy; 18 import org.springframework.ai.embedding.TokenCountBatchingStrategy;
23 import org.springframework.ai.model.tool.ToolCallingManager; 19 import org.springframework.ai.model.tool.ToolCallingManager;
@@ -26,6 +22,10 @@ import org.springframework.ai.openai.OpenAiChatOptions; @@ -26,6 +22,10 @@ import org.springframework.ai.openai.OpenAiChatOptions;
26 import org.springframework.ai.openai.api.OpenAiApi; 22 import org.springframework.ai.openai.api.OpenAiApi;
27 import org.springframework.ai.tokenizer.JTokkitTokenCountEstimator; 23 import org.springframework.ai.tokenizer.JTokkitTokenCountEstimator;
28 import org.springframework.ai.tokenizer.TokenCountEstimator; 24 import org.springframework.ai.tokenizer.TokenCountEstimator;
  25 +import org.springframework.ai.vectorstore.milvus.autoconfigure.MilvusServiceClientProperties;
  26 +import org.springframework.ai.vectorstore.milvus.autoconfigure.MilvusVectorStoreProperties;
  27 +import org.springframework.ai.vectorstore.qdrant.autoconfigure.QdrantVectorStoreProperties;
  28 +import org.springframework.ai.vectorstore.redis.autoconfigure.RedisVectorStoreProperties;
29 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; 29 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
30 import org.springframework.boot.context.properties.EnableConfigurationProperties; 30 import org.springframework.boot.context.properties.EnableConfigurationProperties;
31 import org.springframework.context.annotation.Bean; 31 import org.springframework.context.annotation.Bean;
yudao-module-ai/src/main/java/cn/iocoder/yudao/module/ai/framework/ai/core/model/siliconflow/SiliconFlowImageModel.java
@@ -89,7 +89,7 @@ public class SiliconFlowImageModel implements ImageModel { @@ -89,7 +89,7 @@ public class SiliconFlowImageModel implements ImageModel {
89 var observationContext = ImageModelObservationContext.builder() 89 var observationContext = ImageModelObservationContext.builder()
90 .imagePrompt(imagePrompt) 90 .imagePrompt(imagePrompt)
91 .provider(SiliconFlowApiConstants.PROVIDER_NAME) 91 .provider(SiliconFlowApiConstants.PROVIDER_NAME)
92 - .requestOptions(imagePrompt.getOptions()) 92 + .imagePrompt(imagePrompt)
93 .build(); 93 .build();
94 94
95 return ImageModelObservationDocumentation.IMAGE_MODEL_OPERATION 95 return ImageModelObservationDocumentation.IMAGE_MODEL_OPERATION
yudao-module-ai/src/main/java/cn/iocoder/yudao/module/ai/service/image/AiImageServiceImpl.java
@@ -9,9 +9,6 @@ import cn.hutool.core.util.ObjUtil; @@ -9,9 +9,6 @@ import cn.hutool.core.util.ObjUtil;
9 import cn.hutool.core.util.StrUtil; 9 import cn.hutool.core.util.StrUtil;
10 import cn.hutool.extra.spring.SpringUtil; 10 import cn.hutool.extra.spring.SpringUtil;
11 import cn.hutool.http.HttpUtil; 11 import cn.hutool.http.HttpUtil;
12 -import cn.iocoder.yudao.module.ai.enums.model.AiPlatformEnum;  
13 -import cn.iocoder.yudao.module.ai.framework.ai.core.model.midjourney.api.MidjourneyApi;  
14 -import cn.iocoder.yudao.module.ai.framework.ai.core.model.siliconflow.SiliconFlowImageOptions;  
15 import cn.iocoder.yudao.framework.common.pojo.PageResult; 12 import cn.iocoder.yudao.framework.common.pojo.PageResult;
16 import cn.iocoder.yudao.framework.common.util.object.BeanUtils; 13 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
17 import cn.iocoder.yudao.module.ai.controller.admin.image.vo.AiImageDrawReqVO; 14 import cn.iocoder.yudao.module.ai.controller.admin.image.vo.AiImageDrawReqVO;
@@ -24,17 +21,20 @@ import cn.iocoder.yudao.module.ai.dal.dataobject.image.AiImageDO; @@ -24,17 +21,20 @@ import cn.iocoder.yudao.module.ai.dal.dataobject.image.AiImageDO;
24 import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiModelDO; 21 import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiModelDO;
25 import cn.iocoder.yudao.module.ai.dal.mysql.image.AiImageMapper; 22 import cn.iocoder.yudao.module.ai.dal.mysql.image.AiImageMapper;
26 import cn.iocoder.yudao.module.ai.enums.image.AiImageStatusEnum; 23 import cn.iocoder.yudao.module.ai.enums.image.AiImageStatusEnum;
  24 +import cn.iocoder.yudao.module.ai.enums.model.AiPlatformEnum;
  25 +import cn.iocoder.yudao.module.ai.framework.ai.core.model.midjourney.api.MidjourneyApi;
  26 +import cn.iocoder.yudao.module.ai.framework.ai.core.model.siliconflow.SiliconFlowImageOptions;
27 import cn.iocoder.yudao.module.ai.service.model.AiModelService; 27 import cn.iocoder.yudao.module.ai.service.model.AiModelService;
28 import cn.iocoder.yudao.module.infra.api.file.FileApi; 28 import cn.iocoder.yudao.module.infra.api.file.FileApi;
29 import com.alibaba.cloud.ai.dashscope.image.DashScopeImageOptions; 29 import com.alibaba.cloud.ai.dashscope.image.DashScopeImageOptions;
30 import jakarta.annotation.Resource; 30 import jakarta.annotation.Resource;
31 import lombok.extern.slf4j.Slf4j; 31 import lombok.extern.slf4j.Slf4j;
  32 +import org.springaicommunity.qianfan.QianFanImageOptions;
32 import org.springframework.ai.image.ImageModel; 33 import org.springframework.ai.image.ImageModel;
33 import org.springframework.ai.image.ImageOptions; 34 import org.springframework.ai.image.ImageOptions;
34 import org.springframework.ai.image.ImagePrompt; 35 import org.springframework.ai.image.ImagePrompt;
35 import org.springframework.ai.image.ImageResponse; 36 import org.springframework.ai.image.ImageResponse;
36 import org.springframework.ai.openai.OpenAiImageOptions; 37 import org.springframework.ai.openai.OpenAiImageOptions;
37 -import org.springframework.ai.qianfan.QianFanImageOptions;  
38 import org.springframework.ai.stabilityai.api.StabilityAiImageOptions; 38 import org.springframework.ai.stabilityai.api.StabilityAiImageOptions;
39 import org.springframework.ai.zhipuai.ZhiPuAiImageOptions; 39 import org.springframework.ai.zhipuai.ZhiPuAiImageOptions;
40 import org.springframework.scheduling.annotation.Async; 40 import org.springframework.scheduling.annotation.Async;
@@ -140,10 +140,10 @@ public class AiImageServiceImpl implements AiImageService { @@ -140,10 +140,10 @@ public class AiImageServiceImpl implements AiImageService {
140 private static ImageOptions buildImageOptions(AiImageDrawReqVO draw, AiModelDO model) { 140 private static ImageOptions buildImageOptions(AiImageDrawReqVO draw, AiModelDO model) {
141 if (ObjUtil.equal(model.getPlatform(), AiPlatformEnum.OPENAI.getPlatform())) { 141 if (ObjUtil.equal(model.getPlatform(), AiPlatformEnum.OPENAI.getPlatform())) {
142 // https://platform.openai.com/docs/api-reference/images/create 142 // https://platform.openai.com/docs/api-reference/images/create
143 - return OpenAiImageOptions.builder().withModel(model.getModel())  
144 - .withHeight(draw.getHeight()).withWidth(draw.getWidth())  
145 - .withStyle(MapUtil.getStr(draw.getOptions(), "style")) // 风格  
146 - .withResponseFormat("b64_json") 143 + return OpenAiImageOptions.builder().model(model.getModel())
  144 + .height(draw.getHeight()).width(draw.getWidth())
  145 + .style(MapUtil.getStr(draw.getOptions(), "style")) // 风格
  146 + .responseFormat("b64_json")
147 .build(); 147 .build();
148 } else if (ObjUtil.equal(model.getPlatform(), AiPlatformEnum.SILICON_FLOW.getPlatform())) { 148 } else if (ObjUtil.equal(model.getPlatform(), AiPlatformEnum.SILICON_FLOW.getPlatform())) {
149 // https://docs.siliconflow.cn/cn/api-reference/images/images-generations 149 // https://docs.siliconflow.cn/cn/api-reference/images/images-generations
yudao-module-ai/src/main/java/cn/iocoder/yudao/module/ai/util/AiUtils.java
@@ -2,18 +2,18 @@ package cn.iocoder.yudao.module.ai.util; @@ -2,18 +2,18 @@ package cn.iocoder.yudao.module.ai.util;
2 2
3 import cn.hutool.core.util.ObjUtil; 3 import cn.hutool.core.util.ObjUtil;
4 import cn.hutool.core.util.StrUtil; 4 import cn.hutool.core.util.StrUtil;
5 -import cn.iocoder.yudao.module.ai.enums.model.AiPlatformEnum;  
6 import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; 5 import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
7 import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder; 6 import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
  7 +import cn.iocoder.yudao.module.ai.enums.model.AiPlatformEnum;
8 import com.alibaba.cloud.ai.dashscope.chat.DashScopeChatOptions; 8 import com.alibaba.cloud.ai.dashscope.chat.DashScopeChatOptions;
  9 +import org.springaicommunity.moonshot.MoonshotChatOptions;
  10 +import org.springaicommunity.qianfan.QianFanChatOptions;
9 import org.springframework.ai.azure.openai.AzureOpenAiChatOptions; 11 import org.springframework.ai.azure.openai.AzureOpenAiChatOptions;
10 import org.springframework.ai.chat.messages.*; 12 import org.springframework.ai.chat.messages.*;
11 import org.springframework.ai.chat.prompt.ChatOptions; 13 import org.springframework.ai.chat.prompt.ChatOptions;
12 import org.springframework.ai.minimax.MiniMaxChatOptions; 14 import org.springframework.ai.minimax.MiniMaxChatOptions;
13 -import org.springframework.ai.moonshot.MoonshotChatOptions;  
14 import org.springframework.ai.ollama.api.OllamaOptions; 15 import org.springframework.ai.ollama.api.OllamaOptions;
15 import org.springframework.ai.openai.OpenAiChatOptions; 16 import org.springframework.ai.openai.OpenAiChatOptions;
16 -import org.springframework.ai.qianfan.QianFanChatOptions;  
17 import org.springframework.ai.zhipuai.ZhiPuAiChatOptions; 17 import org.springframework.ai.zhipuai.ZhiPuAiChatOptions;
18 18
19 import java.util.Collections; 19 import java.util.Collections;
@@ -43,18 +43,18 @@ public class AiUtils { @@ -43,18 +43,18 @@ public class AiUtils {
43 switch (platform) { 43 switch (platform) {
44 case TONG_YI: 44 case TONG_YI:
45 return DashScopeChatOptions.builder().withModel(model).withTemperature(temperature).withMaxToken(maxTokens) 45 return DashScopeChatOptions.builder().withModel(model).withTemperature(temperature).withMaxToken(maxTokens)
46 - .withFunctions(toolNames).withToolContext(toolContext).build(); 46 + .withToolNames(toolNames).withToolContext(toolContext).build();
47 case YI_YAN: 47 case YI_YAN:
48 return QianFanChatOptions.builder().model(model).temperature(temperature).maxTokens(maxTokens).build(); 48 return QianFanChatOptions.builder().model(model).temperature(temperature).maxTokens(maxTokens).build();
49 case ZHI_PU: 49 case ZHI_PU:
50 return ZhiPuAiChatOptions.builder().model(model).temperature(temperature).maxTokens(maxTokens) 50 return ZhiPuAiChatOptions.builder().model(model).temperature(temperature).maxTokens(maxTokens)
51 - .functions(toolNames).toolContext(toolContext).build(); 51 + .toolNames(toolNames).toolContext(toolContext).build();
52 case MINI_MAX: 52 case MINI_MAX:
53 return MiniMaxChatOptions.builder().model(model).temperature(temperature).maxTokens(maxTokens) 53 return MiniMaxChatOptions.builder().model(model).temperature(temperature).maxTokens(maxTokens)
54 - .functions(toolNames).toolContext(toolContext).build(); 54 + .toolNames(toolNames).toolContext(toolContext).build();
55 case MOONSHOT: 55 case MOONSHOT:
56 return MoonshotChatOptions.builder().model(model).temperature(temperature).maxTokens(maxTokens) 56 return MoonshotChatOptions.builder().model(model).temperature(temperature).maxTokens(maxTokens)
57 - .functions(toolNames).toolContext(toolContext).build(); 57 + .toolNames(toolNames).toolContext(toolContext).build();
58 case OPENAI: 58 case OPENAI:
59 case DEEP_SEEK: // 复用 OpenAI 客户端 59 case DEEP_SEEK: // 复用 OpenAI 客户端
60 case DOU_BAO: // 复用 OpenAI 客户端 60 case DOU_BAO: // 复用 OpenAI 客户端
yudao-module-ai/src/test/java/cn/iocoder/yudao/module/ai/framework/ai/core/model/chat/OpenAIChatModelTests.java
@@ -25,10 +25,10 @@ public class OpenAIChatModelTests { @@ -25,10 +25,10 @@ public class OpenAIChatModelTests {
25 private final OpenAiChatModel chatModel = OpenAiChatModel.builder() 25 private final OpenAiChatModel chatModel = OpenAiChatModel.builder()
26 .openAiApi(OpenAiApi.builder() 26 .openAiApi(OpenAiApi.builder()
27 .baseUrl("https://api.holdai.top") 27 .baseUrl("https://api.holdai.top")
28 - .apiKey("sk-aN6nWn3fILjrgLFT0fC4Aa60B72e4253826c77B29dC94f17") // apiKey 28 + .apiKey("sk-PytRecQlmjEteoa2RRN6cGnwslo72UUPLQVNEMS6K9yjbmpD") // apiKey
29 .build()) 29 .build())
30 .defaultOptions(OpenAiChatOptions.builder() 30 .defaultOptions(OpenAiChatOptions.builder()
31 - .model(OpenAiApi.ChatModel.GPT_4_O) // 模型 31 + .model(OpenAiApi.ChatModel.GPT_4_1_NANO) // 模型
32 .temperature(0.7) 32 .temperature(0.7)
33 .build()) 33 .build())
34 .build(); 34 .build();
yudao-module-ai/src/test/java/cn/iocoder/yudao/module/ai/framework/ai/core/model/chat/TongYiChatModelTests.java
@@ -22,14 +22,17 @@ import java.util.List; @@ -22,14 +22,17 @@ import java.util.List;
22 */ 22 */
23 public class TongYiChatModelTests { 23 public class TongYiChatModelTests {
24 24
25 - private final DashScopeChatModel chatModel = new DashScopeChatModel(  
26 - new DashScopeApi("sk-7d903764249848cfa912733146da12d1"),  
27 - DashScopeChatOptions.builder() 25 + private final DashScopeChatModel chatModel = DashScopeChatModel.builder()
  26 + .dashScopeApi(DashScopeApi.builder()
  27 + .apiKey("sk-47aa124781be4bfb95244cc62f63f7d0")
  28 + .build())
  29 + .defaultOptions( DashScopeChatOptions.builder()
28 .withModel("qwen1.5-72b-chat") // 模型 30 .withModel("qwen1.5-72b-chat") // 模型
29 // .withModel("deepseek-r1") // 模型(deepseek-r1) 31 // .withModel("deepseek-r1") // 模型(deepseek-r1)
30 // .withModel("deepseek-v3") // 模型(deepseek-v3) 32 // .withModel("deepseek-v3") // 模型(deepseek-v3)
31 // .withModel("deepseek-r1-distill-qwen-1.5b") // 模型(deepseek-r1-distill-qwen-1.5b) 33 // .withModel("deepseek-r1-distill-qwen-1.5b") // 模型(deepseek-r1-distill-qwen-1.5b)
32 - .build()); 34 + .build())
  35 + .build();
33 36
34 @Test 37 @Test
35 @Disabled 38 @Disabled
yudao-module-ai/src/test/java/cn/iocoder/yudao/module/ai/framework/ai/core/model/image/OpenAiImageModelTests.java
@@ -18,7 +18,7 @@ public class OpenAiImageModelTests { @@ -18,7 +18,7 @@ public class OpenAiImageModelTests {
18 18
19 private final OpenAiImageModel imageModel = new OpenAiImageModel(OpenAiImageApi.builder() 19 private final OpenAiImageModel imageModel = new OpenAiImageModel(OpenAiImageApi.builder()
20 .baseUrl("https://api.holdai.top") // apiKey 20 .baseUrl("https://api.holdai.top") // apiKey
21 - .apiKey("sk-aN6nWn3fILjrgLFT0fC4Aa60B72e4253826c77B29dC94f17") 21 + .apiKey("sk-PytRecQlmjEteoa2RRN6cGnwslo72UUPLQVNEMS6K9yjbmpD")
22 .build()); 22 .build());
23 23
24 @Test 24 @Test
@@ -26,8 +26,8 @@ public class OpenAiImageModelTests { @@ -26,8 +26,8 @@ public class OpenAiImageModelTests {
26 public void testCall() { 26 public void testCall() {
27 // 准备参数 27 // 准备参数
28 ImageOptions options = OpenAiImageOptions.builder() 28 ImageOptions options = OpenAiImageOptions.builder()
29 - .withModel(OpenAiImageApi.ImageModel.DALL_E_2.getValue()) // 这个模型比较便宜  
30 - .withHeight(256).withWidth(256) 29 + .model(OpenAiImageApi.ImageModel.DALL_E_2.getValue()) // 这个模型比较便宜
  30 + .height(256).width(256)
31 .build(); 31 .build();
32 ImagePrompt prompt = new ImagePrompt("中国长城!", options); 32 ImagePrompt prompt = new ImagePrompt("中国长城!", options);
33 33
yudao-server/src/main/resources/application-dev.yaml
@@ -6,8 +6,8 @@ server: @@ -6,8 +6,8 @@ server:
6 spring: 6 spring:
7 autoconfigure: 7 autoconfigure:
8 exclude: 8 exclude:
9 - - org.springframework.ai.autoconfigure.vectorstore.qdrant.QdrantVectorStoreAutoConfiguration # 禁用 AI 模块的 Qdrant,手动创建  
10 - - org.springframework.ai.autoconfigure.vectorstore.milvus.MilvusVectorStoreAutoConfiguration # 禁用 AI 模块的 Milvus,手动创建 9 + - org.springframework.ai.vectorstore.qdrant.autoconfigure.QdrantVectorStoreAutoConfiguration # 禁用 AI 模块的 Qdrant,手动创建
  10 + - org.springframework.ai.vectorstore.milvus.autoconfigure.MilvusVectorStoreAutoConfiguration # 禁用 AI 模块的 Milvus,手动创建
11 # 数据源配置项 11 # 数据源配置项
12 datasource: 12 datasource:
13 druid: # Druid 【监控】相关的全局配置 13 druid: # Druid 【监控】相关的全局配置
yudao-server/src/main/resources/application-local.yaml
@@ -10,8 +10,8 @@ spring: @@ -10,8 +10,8 @@ spring:
10 - de.codecentric.boot.admin.server.config.AdminServerAutoConfiguration # 禁用 Spring Boot Admin 的 Server 的自动配置 10 - de.codecentric.boot.admin.server.config.AdminServerAutoConfiguration # 禁用 Spring Boot Admin 的 Server 的自动配置
11 - de.codecentric.boot.admin.server.ui.config.AdminServerUiAutoConfiguration # 禁用 Spring Boot Admin 的 Server UI 的自动配置 11 - de.codecentric.boot.admin.server.ui.config.AdminServerUiAutoConfiguration # 禁用 Spring Boot Admin 的 Server UI 的自动配置
12 - de.codecentric.boot.admin.client.config.SpringBootAdminClientAutoConfiguration # 禁用 Spring Boot Admin 的 Client 的自动配置 12 - de.codecentric.boot.admin.client.config.SpringBootAdminClientAutoConfiguration # 禁用 Spring Boot Admin 的 Client 的自动配置
13 - - org.springframework.ai.autoconfigure.vectorstore.qdrant.QdrantVectorStoreAutoConfiguration # 禁用 AI 模块的 Qdrant,手动创建  
14 - - org.springframework.ai.autoconfigure.vectorstore.milvus.MilvusVectorStoreAutoConfiguration # 禁用 AI 模块的 Milvus,手动创建 13 + - org.springframework.ai.vectorstore.qdrant.autoconfigure.QdrantVectorStoreAutoConfiguration # 禁用 AI 模块的 Qdrant,手动创建
  14 + - org.springframework.ai.vectorstore.milvus.autoconfigure.MilvusVectorStoreAutoConfiguration # 禁用 AI 模块的 Milvus,手动创建
15 # 数据源配置项 15 # 数据源配置项
16 datasource: 16 datasource:
17 druid: # Druid 【监控】相关的全局配置 17 druid: # Druid 【监控】相关的全局配置