Commit 59c853b54d3f5ca4f32e0ca82114b777850b7ed1

Authored by YunaiV
1 parent 4daff933

【代码优化】AI:完善 DeepSeekChatTests、XingHuoChatModelTests 单测,方便大家快速体验

Showing 10 changed files with 70 additions and 63 deletions
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/config/YudaoAiAutoConfiguration.java
@@ -2,11 +2,11 @@ package cn.iocoder.yudao.framework.ai.config; @@ -2,11 +2,11 @@ package cn.iocoder.yudao.framework.ai.config;
2 2
3 import cn.iocoder.yudao.framework.ai.core.factory.AiModelFactory; 3 import cn.iocoder.yudao.framework.ai.core.factory.AiModelFactory;
4 import cn.iocoder.yudao.framework.ai.core.factory.AiModelFactoryImpl; 4 import cn.iocoder.yudao.framework.ai.core.factory.AiModelFactoryImpl;
5 -import cn.iocoder.yudao.framework.ai.core.model.deepseek.DeepSeekChatClient; 5 +import cn.iocoder.yudao.framework.ai.core.model.deepseek.DeepSeekChatModel;
6 import cn.iocoder.yudao.framework.ai.core.model.deepseek.DeepSeekChatOptions; 6 import cn.iocoder.yudao.framework.ai.core.model.deepseek.DeepSeekChatOptions;
7 import cn.iocoder.yudao.framework.ai.core.model.midjourney.api.MidjourneyApi; 7 import cn.iocoder.yudao.framework.ai.core.model.midjourney.api.MidjourneyApi;
8 import cn.iocoder.yudao.framework.ai.core.model.suno.api.SunoApi; 8 import cn.iocoder.yudao.framework.ai.core.model.suno.api.SunoApi;
9 -import cn.iocoder.yudao.framework.ai.core.model.xinghuo.XingHuoChatClient; 9 +import cn.iocoder.yudao.framework.ai.core.model.xinghuo.XingHuoChatModel;
10 import cn.iocoder.yudao.framework.ai.core.model.xinghuo.XingHuoChatOptions; 10 import cn.iocoder.yudao.framework.ai.core.model.xinghuo.XingHuoChatOptions;
11 import com.alibaba.cloud.ai.tongyi.TongYiAutoConfiguration; 11 import com.alibaba.cloud.ai.tongyi.TongYiAutoConfiguration;
12 import lombok.extern.slf4j.Slf4j; 12 import lombok.extern.slf4j.Slf4j;
@@ -35,29 +35,29 @@ public class YudaoAiAutoConfiguration { @@ -35,29 +35,29 @@ public class YudaoAiAutoConfiguration {
35 // ========== 各种 AI Client 创建 ========== 35 // ========== 各种 AI Client 创建 ==========
36 36
37 @Bean 37 @Bean
38 - @ConditionalOnProperty(value = "yudao.ai.xinghuo.enable", havingValue = "true")  
39 - public XingHuoChatClient xingHuoChatClient(YudaoAiProperties yudaoAiProperties) {  
40 - YudaoAiProperties.XingHuoProperties properties = yudaoAiProperties.getXinghuo();  
41 - XingHuoChatOptions options = XingHuoChatOptions.builder() 38 + @ConditionalOnProperty(value = "yudao.ai.deepseek.enable", havingValue = "true")
  39 + public DeepSeekChatModel deepSeekChatModel(YudaoAiProperties yudaoAiProperties) {
  40 + YudaoAiProperties.DeepSeekProperties properties = yudaoAiProperties.getDeepSeek();
  41 + DeepSeekChatOptions options = DeepSeekChatOptions.builder()
42 .model(properties.getModel()) 42 .model(properties.getModel())
43 .temperature(properties.getTemperature()) 43 .temperature(properties.getTemperature())
44 .maxTokens(properties.getMaxTokens()) 44 .maxTokens(properties.getMaxTokens())
45 - .topK(properties.getTopK()) 45 + .topP(properties.getTopP())
46 .build(); 46 .build();
47 - return new XingHuoChatClient(properties.getAppKey(), properties.getSecretKey(), options); 47 + return new DeepSeekChatModel(properties.getApiKey(), options);
48 } 48 }
49 49
50 @Bean 50 @Bean
51 - @ConditionalOnProperty(value = "yudao.ai.deepseek.enable", havingValue = "true")  
52 - public DeepSeekChatClient deepSeekChatClient(YudaoAiProperties yudaoAiProperties) {  
53 - YudaoAiProperties.DeepSeekProperties properties = yudaoAiProperties.getDeepSeek();  
54 - DeepSeekChatOptions options = DeepSeekChatOptions.builder() 51 + @ConditionalOnProperty(value = "yudao.ai.xinghuo.enable", havingValue = "true")
  52 + public XingHuoChatModel xingHuoChatClient(YudaoAiProperties yudaoAiProperties) {
  53 + YudaoAiProperties.XingHuoProperties properties = yudaoAiProperties.getXinghuo();
  54 + XingHuoChatOptions options = XingHuoChatOptions.builder()
55 .model(properties.getModel()) 55 .model(properties.getModel())
56 .temperature(properties.getTemperature()) 56 .temperature(properties.getTemperature())
57 .maxTokens(properties.getMaxTokens()) 57 .maxTokens(properties.getMaxTokens())
58 - .topP(properties.getTopP()) 58 + .topK(properties.getTopK())
59 .build(); 59 .build();
60 - return new DeepSeekChatClient(properties.getApiKey(), options); 60 + return new XingHuoChatModel(properties.getAppKey(), properties.getSecretKey(), options);
61 } 61 }
62 62
63 @Bean 63 @Bean
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/config/YudaoAiProperties.java
@@ -14,14 +14,14 @@ import org.springframework.boot.context.properties.ConfigurationProperties; @@ -14,14 +14,14 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
14 public class YudaoAiProperties { 14 public class YudaoAiProperties {
15 15
16 /** 16 /**
17 - * 讯飞星火 17 + * DeepSeek
18 */ 18 */
19 - private XingHuoProperties xinghuo; 19 + private DeepSeekProperties deepSeek;
20 20
21 /** 21 /**
22 - * DeepSeek 22 + * 讯飞星火
23 */ 23 */
24 - private DeepSeekProperties deepSeek; 24 + private XingHuoProperties xinghuo;
25 25
26 /** 26 /**
27 * Midjourney 绘图 27 * Midjourney 绘图
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/core/factory/AiModelFactoryImpl.java
@@ -9,10 +9,10 @@ import cn.hutool.extra.spring.SpringUtil; @@ -9,10 +9,10 @@ import cn.hutool.extra.spring.SpringUtil;
9 import cn.iocoder.yudao.framework.ai.config.YudaoAiAutoConfiguration; 9 import cn.iocoder.yudao.framework.ai.config.YudaoAiAutoConfiguration;
10 import cn.iocoder.yudao.framework.ai.config.YudaoAiProperties; 10 import cn.iocoder.yudao.framework.ai.config.YudaoAiProperties;
11 import cn.iocoder.yudao.framework.ai.core.enums.AiPlatformEnum; 11 import cn.iocoder.yudao.framework.ai.core.enums.AiPlatformEnum;
12 -import cn.iocoder.yudao.framework.ai.core.model.deepseek.DeepSeekChatClient; 12 +import cn.iocoder.yudao.framework.ai.core.model.deepseek.DeepSeekChatModel;
13 import cn.iocoder.yudao.framework.ai.core.model.midjourney.api.MidjourneyApi; 13 import cn.iocoder.yudao.framework.ai.core.model.midjourney.api.MidjourneyApi;
14 import cn.iocoder.yudao.framework.ai.core.model.suno.api.SunoApi; 14 import cn.iocoder.yudao.framework.ai.core.model.suno.api.SunoApi;
15 -import cn.iocoder.yudao.framework.ai.core.model.xinghuo.XingHuoChatClient; 15 +import cn.iocoder.yudao.framework.ai.core.model.xinghuo.XingHuoChatModel;
16 import com.alibaba.cloud.ai.tongyi.TongYiAutoConfiguration; 16 import com.alibaba.cloud.ai.tongyi.TongYiAutoConfiguration;
17 import com.alibaba.cloud.ai.tongyi.TongYiConnectionProperties; 17 import com.alibaba.cloud.ai.tongyi.TongYiConnectionProperties;
18 import com.alibaba.cloud.ai.tongyi.chat.TongYiChatModel; 18 import com.alibaba.cloud.ai.tongyi.chat.TongYiChatModel;
@@ -59,10 +59,10 @@ public class AiModelFactoryImpl implements AiModelFactory { @@ -59,10 +59,10 @@ public class AiModelFactoryImpl implements AiModelFactory {
59 return buildTongYiChatModel(apiKey); 59 return buildTongYiChatModel(apiKey);
60 case YI_YAN: 60 case YI_YAN:
61 return buildYiYanChatModel(apiKey); 61 return buildYiYanChatModel(apiKey);
62 - case XING_HUO:  
63 - return buildXingHuoChatClient(apiKey);  
64 case DEEP_SEEK: 62 case DEEP_SEEK:
65 - return buildDeepSeekChatClient(apiKey); 63 + return buildDeepSeekChatModel(apiKey);
  64 + case XING_HUO:
  65 + return buildXingHuoChatModel(apiKey);
66 case OPENAI: 66 case OPENAI:
67 return buildOpenAiChatModel(apiKey, url); 67 return buildOpenAiChatModel(apiKey, url);
68 case OLLAMA: 68 case OLLAMA:
@@ -82,7 +82,7 @@ public class AiModelFactoryImpl implements AiModelFactory { @@ -82,7 +82,7 @@ public class AiModelFactoryImpl implements AiModelFactory {
82 case YI_YAN: 82 case YI_YAN:
83 return SpringUtil.getBean(QianFanChatModel.class); 83 return SpringUtil.getBean(QianFanChatModel.class);
84 case XING_HUO: 84 case XING_HUO:
85 - return SpringUtil.getBean(XingHuoChatClient.class); 85 + return SpringUtil.getBean(XingHuoChatModel.class);
86 case OPENAI: 86 case OPENAI:
87 return SpringUtil.getBean(OpenAiChatModel.class); 87 return SpringUtil.getBean(OpenAiChatModel.class);
88 case OLLAMA: 88 case OLLAMA:
@@ -112,7 +112,7 @@ public class AiModelFactoryImpl implements AiModelFactory { @@ -112,7 +112,7 @@ public class AiModelFactoryImpl implements AiModelFactory {
112 case OPENAI: 112 case OPENAI:
113 return buildOpenAiImageModel(apiKey, url); 113 return buildOpenAiImageModel(apiKey, url);
114 case STABLE_DIFFUSION: 114 case STABLE_DIFFUSION:
115 - return buildStabilityAiImageClient(apiKey, url); 115 + return buildStabilityAiImageModel(apiKey, url);
116 default: 116 default:
117 throw new IllegalArgumentException(StrUtil.format("未知平台({})", platform)); 117 throw new IllegalArgumentException(StrUtil.format("未知平台({})", platform));
118 } 118 }
@@ -169,6 +169,24 @@ public class AiModelFactoryImpl implements AiModelFactory { @@ -169,6 +169,24 @@ public class AiModelFactoryImpl implements AiModelFactory {
169 } 169 }
170 170
171 /** 171 /**
  172 + * 可参考 {@link YudaoAiAutoConfiguration#deepSeekChatModel(YudaoAiProperties)}
  173 + */
  174 + private static DeepSeekChatModel buildDeepSeekChatModel(String apiKey) {
  175 + return new DeepSeekChatModel(apiKey);
  176 + }
  177 +
  178 + /**
  179 + * 可参考 {@link YudaoAiAutoConfiguration#xingHuoChatClient(YudaoAiProperties)}
  180 + */
  181 + private static XingHuoChatModel buildXingHuoChatModel(String key) {
  182 + List<String> keys = StrUtil.split(key, '|');
  183 + Assert.equals(keys.size(), 3, "XingHuoChatClient 的密钥需要 (appid|appKey|secretKey) 格式");
  184 + String appKey = keys.get(1);
  185 + String secretKey = keys.get(2);
  186 + return new XingHuoChatModel(appKey, secretKey);
  187 + }
  188 +
  189 + /**
172 * 可参考 {@link OpenAiAutoConfiguration} 190 * 可参考 {@link OpenAiAutoConfiguration}
173 */ 191 */
174 private static OpenAiChatModel buildOpenAiChatModel(String openAiToken, String url) { 192 private static OpenAiChatModel buildOpenAiChatModel(String openAiToken, String url) {
@@ -194,22 +212,7 @@ public class AiModelFactoryImpl implements AiModelFactory { @@ -194,22 +212,7 @@ public class AiModelFactoryImpl implements AiModelFactory {
194 return new OllamaChatModel(ollamaApi); 212 return new OllamaChatModel(ollamaApi);
195 } 213 }
196 214
197 - /**  
198 - * 可参考 {@link YudaoAiAutoConfiguration#xingHuoChatClient(YudaoAiProperties)}  
199 - */  
200 - private static XingHuoChatClient buildXingHuoChatClient(String key) {  
201 - List<String> keys = StrUtil.split(key, '|');  
202 - Assert.equals(keys.size(), 3, "XingHuoChatClient 的密钥需要 (appid|appKey|secretKey) 格式");  
203 - String appKey = keys.get(1);  
204 - String secretKey = keys.get(2);  
205 - return new XingHuoChatClient(appKey, secretKey);  
206 - }  
207 -  
208 - private static DeepSeekChatClient buildDeepSeekChatClient(String apiKey) {  
209 - return new DeepSeekChatClient(apiKey);  
210 - }  
211 -  
212 - private StabilityAiImageModel buildStabilityAiImageClient(String apiKey, String url) { 215 + private StabilityAiImageModel buildStabilityAiImageModel(String apiKey, String url) {
213 url = StrUtil.blankToDefault(url, StabilityAiApi.DEFAULT_BASE_URL); 216 url = StrUtil.blankToDefault(url, StabilityAiApi.DEFAULT_BASE_URL);
214 StabilityAiApi stabilityAiApi = new StabilityAiApi(apiKey, StabilityAiApi.DEFAULT_IMAGE_MODEL, url); 217 StabilityAiApi stabilityAiApi = new StabilityAiApi(apiKey, StabilityAiApi.DEFAULT_IMAGE_MODEL, url);
215 return new StabilityAiImageModel(stabilityAiApi); 218 return new StabilityAiImageModel(stabilityAiApi);
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/core/model/deepseek/DeepSeekChatClient.java renamed to yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/core/model/deepseek/DeepSeekChatModel.java
@@ -29,7 +29,7 @@ import static cn.iocoder.yudao.framework.ai.core.model.deepseek.DeepSeekChatOpti @@ -29,7 +29,7 @@ import static cn.iocoder.yudao.framework.ai.core.model.deepseek.DeepSeekChatOpti
29 * @author fansili 29 * @author fansili
30 */ 30 */
31 @Slf4j 31 @Slf4j
32 -public class DeepSeekChatClient implements ChatModel { 32 +public class DeepSeekChatModel implements ChatModel {
33 33
34 private static final String BASE_URL = "https://api.deepseek.com"; 34 private static final String BASE_URL = "https://api.deepseek.com";
35 35
@@ -43,15 +43,15 @@ public class DeepSeekChatClient implements ChatModel { @@ -43,15 +43,15 @@ public class DeepSeekChatClient implements ChatModel {
43 */ 43 */
44 private final OpenAiApi openAiApi; 44 private final OpenAiApi openAiApi;
45 45
46 - public DeepSeekChatClient(String apiKey) { 46 + public DeepSeekChatModel(String apiKey) {
47 this(apiKey, DeepSeekChatOptions.builder().model(MODEL_DEFAULT).temperature(0.7F).build()); 47 this(apiKey, DeepSeekChatOptions.builder().model(MODEL_DEFAULT).temperature(0.7F).build());
48 } 48 }
49 49
50 - public DeepSeekChatClient(String apiKey, DeepSeekChatOptions options) { 50 + public DeepSeekChatModel(String apiKey, DeepSeekChatOptions options) {
51 this(apiKey, options, RetryUtils.DEFAULT_RETRY_TEMPLATE); 51 this(apiKey, options, RetryUtils.DEFAULT_RETRY_TEMPLATE);
52 } 52 }
53 53
54 - public DeepSeekChatClient(String apiKey, DeepSeekChatOptions options, RetryTemplate retryTemplate) { 54 + public DeepSeekChatModel(String apiKey, DeepSeekChatOptions options, RetryTemplate retryTemplate) {
55 Assert.notEmpty(apiKey, "apiKey 不能为空"); 55 Assert.notEmpty(apiKey, "apiKey 不能为空");
56 Assert.notNull(options, "options 不能为空"); 56 Assert.notNull(options, "options 不能为空");
57 Assert.notNull(retryTemplate, "retryTemplate 不能为空"); 57 Assert.notNull(retryTemplate, "retryTemplate 不能为空");
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/core/model/xinghuo/XingHuoChatClient.java renamed to yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/core/model/xinghuo/XingHuoChatModel.java
@@ -29,7 +29,7 @@ import static cn.iocoder.yudao.framework.ai.core.model.xinghuo.XingHuoChatOption @@ -29,7 +29,7 @@ import static cn.iocoder.yudao.framework.ai.core.model.xinghuo.XingHuoChatOption
29 * @author fansili 29 * @author fansili
30 */ 30 */
31 @Slf4j 31 @Slf4j
32 -public class XingHuoChatClient implements ChatModel { 32 +public class XingHuoChatModel implements ChatModel {
33 33
34 private static final String BASE_URL = "https://spark-api-open.xf-yun.com"; 34 private static final String BASE_URL = "https://spark-api-open.xf-yun.com";
35 35
@@ -43,16 +43,16 @@ public class XingHuoChatClient implements ChatModel { @@ -43,16 +43,16 @@ public class XingHuoChatClient implements ChatModel {
43 */ 43 */
44 private final OpenAiApi openAiApi; 44 private final OpenAiApi openAiApi;
45 45
46 - public XingHuoChatClient(String apiKey, String secretKey) { 46 + public XingHuoChatModel(String apiKey, String secretKey) {
47 this(apiKey, secretKey, 47 this(apiKey, secretKey,
48 XingHuoChatOptions.builder().model(MODEL_DEFAULT).temperature(0.7F).build()); 48 XingHuoChatOptions.builder().model(MODEL_DEFAULT).temperature(0.7F).build());
49 } 49 }
50 50
51 - public XingHuoChatClient(String apiKey, String secretKey, XingHuoChatOptions options) { 51 + public XingHuoChatModel(String apiKey, String secretKey, XingHuoChatOptions options) {
52 this(apiKey, secretKey, options, RetryUtils.DEFAULT_RETRY_TEMPLATE); 52 this(apiKey, secretKey, options, RetryUtils.DEFAULT_RETRY_TEMPLATE);
53 } 53 }
54 54
55 - public XingHuoChatClient(String apiKey, String secretKey, XingHuoChatOptions options, RetryTemplate retryTemplate) { 55 + public XingHuoChatModel(String apiKey, String secretKey, XingHuoChatOptions options, RetryTemplate retryTemplate) {
56 Assert.notEmpty(apiKey, "apiKey 不能为空"); 56 Assert.notEmpty(apiKey, "apiKey 不能为空");
57 Assert.notEmpty(secretKey, "secretKey 不能为空"); 57 Assert.notEmpty(secretKey, "secretKey 不能为空");
58 Assert.notNull(options, "options 不能为空"); 58 Assert.notNull(options, "options 不能为空");
yudao-module-ai/yudao-spring-boot-starter-ai/src/test/java/cn/iocoder/yudao/framework/ai/chat/DeepSeekChatTests.java renamed to yudao-module-ai/yudao-spring-boot-starter-ai/src/test/java/cn/iocoder/yudao/framework/ai/chat/DeepSeekChatModelTests.java
1 package cn.iocoder.yudao.framework.ai.chat; 1 package cn.iocoder.yudao.framework.ai.chat;
2 2
3 -import cn.iocoder.yudao.framework.ai.core.model.deepseek.DeepSeekChatClient; 3 +import cn.iocoder.yudao.framework.ai.core.model.deepseek.DeepSeekChatModel;
4 import org.junit.jupiter.api.Test; 4 import org.junit.jupiter.api.Test;
5 import org.springframework.ai.chat.messages.Message; 5 import org.springframework.ai.chat.messages.Message;
6 import org.springframework.ai.chat.messages.SystemMessage; 6 import org.springframework.ai.chat.messages.SystemMessage;
@@ -13,13 +13,13 @@ import java.util.ArrayList; @@ -13,13 +13,13 @@ import java.util.ArrayList;
13 import java.util.List; 13 import java.util.List;
14 14
15 /** 15 /**
16 - * {@link DeepSeekChatClient} 集成测试 16 + * {@link DeepSeekChatModel} 集成测试
17 * 17 *
18 * @author 芋道源码 18 * @author 芋道源码
19 */ 19 */
20 -public class DeepSeekChatTests { 20 +public class DeepSeekChatModelTests {
21 21
22 - private final DeepSeekChatClient chatModel = new DeepSeekChatClient("sk-e94db327cc7d457d99a8de8810fc6b12"); 22 + private final DeepSeekChatModel chatModel = new DeepSeekChatModel("sk-e94db327cc7d457d99a8de8810fc6b12");
23 23
24 @Test 24 @Test
25 public void testCall() { 25 public void testCall() {
yudao-module-ai/yudao-spring-boot-starter-ai/src/test/java/cn/iocoder/yudao/framework/ai/chat/OpenAIChatModelTests.java
1 package cn.iocoder.yudao.framework.ai.chat; 1 package cn.iocoder.yudao.framework.ai.chat;
2 2
3 -import cn.iocoder.yudao.framework.ai.core.model.xinghuo.XingHuoChatClient; 3 +import cn.iocoder.yudao.framework.ai.core.model.xinghuo.XingHuoChatModel;
4 import org.junit.jupiter.api.Disabled; 4 import org.junit.jupiter.api.Disabled;
5 import org.junit.jupiter.api.Test; 5 import org.junit.jupiter.api.Test;
6 import org.springframework.ai.chat.messages.Message; 6 import org.springframework.ai.chat.messages.Message;
@@ -17,7 +17,7 @@ import java.util.ArrayList; @@ -17,7 +17,7 @@ import java.util.ArrayList;
17 import java.util.List; 17 import java.util.List;
18 18
19 /** 19 /**
20 - * {@link XingHuoChatClient} 集成测试 20 + * {@link XingHuoChatModel} 集成测试
21 * 21 *
22 * @author 芋道源码 22 * @author 芋道源码
23 */ 23 */
yudao-module-ai/yudao-spring-boot-starter-ai/src/test/java/cn/iocoder/yudao/framework/ai/chat/XingHuoChatClientTests.java renamed to yudao-module-ai/yudao-spring-boot-starter-ai/src/test/java/cn/iocoder/yudao/framework/ai/chat/XingHuoChatModelTests.java
1 package cn.iocoder.yudao.framework.ai.chat; 1 package cn.iocoder.yudao.framework.ai.chat;
2 2
3 -import cn.iocoder.yudao.framework.ai.core.model.xinghuo.XingHuoChatClient; 3 +import cn.iocoder.yudao.framework.ai.core.model.xinghuo.XingHuoChatModel;
4 import org.junit.jupiter.api.Test; 4 import org.junit.jupiter.api.Test;
5 import org.springframework.ai.chat.messages.Message; 5 import org.springframework.ai.chat.messages.Message;
6 import org.springframework.ai.chat.messages.SystemMessage; 6 import org.springframework.ai.chat.messages.SystemMessage;
@@ -13,13 +13,13 @@ import java.util.ArrayList; @@ -13,13 +13,13 @@ import java.util.ArrayList;
13 import java.util.List; 13 import java.util.List;
14 14
15 /** 15 /**
16 - * {@link XingHuoChatClient} 集成测试 16 + * {@link XingHuoChatModel} 集成测试
17 * 17 *
18 * @author fansili 18 * @author fansili
19 */ 19 */
20 -public class XingHuoChatClientTests { 20 +public class XingHuoChatModelTests {
21 21
22 - private final XingHuoChatClient chatModel = new XingHuoChatClient( 22 + private final XingHuoChatModel chatModel = new XingHuoChatModel(
23 "cb6415c19d6162cda07b47316fcb0416", 23 "cb6415c19d6162cda07b47316fcb0416",
24 "Y2JiYTIxZjA3MDMxMjNjZjQzYzVmNzdh"); 24 "Y2JiYTIxZjA3MDMxMjNjZjQzYzVmNzdh");
25 25
yudao-module-ai/yudao-spring-boot-starter-ai/src/test/java/cn/iocoder/yudao/framework/ai/chat/YiYanChatTests.java renamed to yudao-module-ai/yudao-spring-boot-starter-ai/src/test/java/cn/iocoder/yudao/framework/ai/chat/YiYanChatModelTests.java
@@ -19,7 +19,7 @@ import java.util.List; @@ -19,7 +19,7 @@ import java.util.List;
19 * 19 *
20 * @author fansili 20 * @author fansili
21 */ 21 */
22 -public class YiYanChatTests { 22 +public class YiYanChatModelTests {
23 23
24 private final QianFanApi qianFanApi = new QianFanApi( 24 private final QianFanApi qianFanApi = new QianFanApi(
25 "qS8k8dYr2nXunagK4SSU8Xjj", 25 "qS8k8dYr2nXunagK4SSU8Xjj",
yudao-server/src/main/resources/application.yaml
@@ -153,6 +153,9 @@ spring: @@ -153,6 +153,9 @@ spring:
153 153
154 spring: 154 spring:
155 ai: 155 ai:
  156 + qianfan: # 文心一言
  157 + api-key: x0cuLZ7XsaTCU08vuJWO87Lg
  158 + secret-key: R9mYF9dl9KASgi5RUq0FQt3wRisSnOcK
156 ollama: 159 ollama:
157 base-url: http://127.0.0.1:11434 160 base-url: http://127.0.0.1:11434
158 chat: 161 chat:
@@ -162,9 +165,6 @@ spring: @@ -162,9 +165,6 @@ spring:
162 base-url: https://api.gptsapi.net 165 base-url: https://api.gptsapi.net
163 stabilityai: 166 stabilityai:
164 api-key: sk-e53UqbboF8QJCscYvzJscJxJXoFcFg4iJjl1oqgE7baJETmx 167 api-key: sk-e53UqbboF8QJCscYvzJscJxJXoFcFg4iJjl1oqgE7baJETmx
165 - qianfan: # 文心一言  
166 - api-key: x0cuLZ7XsaTCU08vuJWO87Lg  
167 - secret-key: R9mYF9dl9KASgi5RUq0FQt3wRisSnOcK  
168 cloud: 168 cloud:
169 ai: 169 ai:
170 tongyi: # 通义千问 170 tongyi: # 通义千问
@@ -173,6 +173,10 @@ spring: @@ -173,6 +173,10 @@ spring:
173 173
174 yudao: 174 yudao:
175 ai: 175 ai:
  176 + deep-seek:
  177 + enable: true
  178 + api-key: sk-e94db327cc7d457d99a8de8810fc6b12
  179 + model: deepseek-chat
176 xinghuo: 180 xinghuo:
177 enable: true 181 enable: true
178 appId: 13c8cca6 182 appId: 13c8cca6