Commit 2fa5909061a8a36113b0fa4e0bbd311205b59115

Authored by YunaiV
1 parent dfc3c622

fix:【ai 大模型】硅基流动 thinking 返回

yudao-module-ai/src/main/java/cn/iocoder/yudao/module/ai/framework/ai/config/AiAutoConfiguration.java
@@ -122,12 +122,12 @@ public class AiAutoConfiguration { @@ -122,12 +122,12 @@ public class AiAutoConfiguration {
122 if (StrUtil.isEmpty(properties.getModel())) { 122 if (StrUtil.isEmpty(properties.getModel())) {
123 properties.setModel(SiliconFlowApiConstants.MODEL_DEFAULT); 123 properties.setModel(SiliconFlowApiConstants.MODEL_DEFAULT);
124 } 124 }
125 - OpenAiChatModel openAiChatModel = OpenAiChatModel.builder()  
126 - .openAiApi(OpenAiApi.builder() 125 + DeepSeekChatModel openAiChatModel = DeepSeekChatModel.builder()
  126 + .deepSeekApi(DeepSeekApi.builder()
127 .baseUrl(SiliconFlowApiConstants.DEFAULT_BASE_URL) 127 .baseUrl(SiliconFlowApiConstants.DEFAULT_BASE_URL)
128 .apiKey(properties.getApiKey()) 128 .apiKey(properties.getApiKey())
129 .build()) 129 .build())
130 - .defaultOptions(OpenAiChatOptions.builder() 130 + .defaultOptions(DeepSeekChatOptions.builder()
131 .model(properties.getModel()) 131 .model(properties.getModel())
132 .temperature(properties.getTemperature()) 132 .temperature(properties.getTemperature())
133 .maxTokens(properties.getMaxTokens()) 133 .maxTokens(properties.getMaxTokens())
yudao-module-ai/src/main/java/cn/iocoder/yudao/module/ai/framework/ai/core/model/siliconflow/SiliconFlowChatModel.java
@@ -23,7 +23,7 @@ public class SiliconFlowChatModel implements ChatModel { @@ -23,7 +23,7 @@ public class SiliconFlowChatModel implements ChatModel {
23 /** 23 /**
24 * 兼容 OpenAI 接口,进行复用 24 * 兼容 OpenAI 接口,进行复用
25 */ 25 */
26 - private final OpenAiChatModel openAiChatModel; 26 + private final ChatModel openAiChatModel;
27 27
28 @Override 28 @Override
29 public ChatResponse call(Prompt prompt) { 29 public ChatResponse call(Prompt prompt) {
yudao-module-ai/src/main/java/cn/iocoder/yudao/module/ai/util/AiUtils.java
@@ -50,9 +50,10 @@ public class AiUtils { @@ -50,9 +50,10 @@ public class AiUtils {
50 return QianFanChatOptions.builder().model(model).temperature(temperature).maxTokens(maxTokens).build(); 50 return QianFanChatOptions.builder().model(model).temperature(temperature).maxTokens(maxTokens).build();
51 case DEEP_SEEK: 51 case DEEP_SEEK:
52 case DOU_BAO: // 复用 DeepSeek 客户端 52 case DOU_BAO: // 复用 DeepSeek 客户端
  53 + case HUN_YUAN: // 复用 DeepSeek 客户端
  54 + case SILICON_FLOW: // 复用 OpenAI 客户端
53 return DeepSeekChatOptions.builder().model(model).temperature(temperature).maxTokens(maxTokens) 55 return DeepSeekChatOptions.builder().model(model).temperature(temperature).maxTokens(maxTokens)
54 .toolNames(toolNames).toolContext(toolContext).build(); 56 .toolNames(toolNames).toolContext(toolContext).build();
55 - case HUN_YUAN: // 复用 DeepSeek 客户端  
56 case ZHI_PU: 57 case ZHI_PU:
57 return ZhiPuAiChatOptions.builder().model(model).temperature(temperature).maxTokens(maxTokens) 58 return ZhiPuAiChatOptions.builder().model(model).temperature(temperature).maxTokens(maxTokens)
58 .toolNames(toolNames).toolContext(toolContext).build(); 59 .toolNames(toolNames).toolContext(toolContext).build();
@@ -65,7 +66,6 @@ public class AiUtils { @@ -65,7 +66,6 @@ public class AiUtils {
65 case OPENAI: 66 case OPENAI:
66 case GEMINI: // 复用 OpenAI 客户端 67 case GEMINI: // 复用 OpenAI 客户端
67 case XING_HUO: // 复用 OpenAI 客户端 68 case XING_HUO: // 复用 OpenAI 客户端
68 - case SILICON_FLOW: // 复用 OpenAI 客户端  
69 case BAI_CHUAN: // 复用 OpenAI 客户端 69 case BAI_CHUAN: // 复用 OpenAI 客户端
70 return OpenAiChatOptions.builder().model(model).temperature(temperature).maxTokens(maxTokens) 70 return OpenAiChatOptions.builder().model(model).temperature(temperature).maxTokens(maxTokens)
71 .toolNames(toolNames).toolContext(toolContext).build(); 71 .toolNames(toolNames).toolContext(toolContext).build();
yudao-module-ai/src/test/java/cn/iocoder/yudao/module/ai/framework/ai/core/model/chat/SiliconFlowChatModelTests.java
@@ -9,9 +9,9 @@ import org.springframework.ai.chat.messages.SystemMessage; @@ -9,9 +9,9 @@ import org.springframework.ai.chat.messages.SystemMessage;
9 import org.springframework.ai.chat.messages.UserMessage; 9 import org.springframework.ai.chat.messages.UserMessage;
10 import org.springframework.ai.chat.model.ChatResponse; 10 import org.springframework.ai.chat.model.ChatResponse;
11 import org.springframework.ai.chat.prompt.Prompt; 11 import org.springframework.ai.chat.prompt.Prompt;
12 -import org.springframework.ai.openai.OpenAiChatModel;  
13 -import org.springframework.ai.openai.OpenAiChatOptions;  
14 -import org.springframework.ai.openai.api.OpenAiApi; 12 +import org.springframework.ai.deepseek.DeepSeekChatModel;
  13 +import org.springframework.ai.deepseek.DeepSeekChatOptions;
  14 +import org.springframework.ai.deepseek.api.DeepSeekApi;
15 import reactor.core.publisher.Flux; 15 import reactor.core.publisher.Flux;
16 16
17 import java.util.ArrayList; 17 import java.util.ArrayList;
@@ -24,12 +24,12 @@ import java.util.List; @@ -24,12 +24,12 @@ import java.util.List;
24 */ 24 */
25 public class SiliconFlowChatModelTests { 25 public class SiliconFlowChatModelTests {
26 26
27 - private final OpenAiChatModel openAiChatModel = OpenAiChatModel.builder()  
28 - .openAiApi(OpenAiApi.builder() 27 + private final DeepSeekChatModel openAiChatModel = DeepSeekChatModel.builder()
  28 + .deepSeekApi(DeepSeekApi.builder()
29 .baseUrl(SiliconFlowApiConstants.DEFAULT_BASE_URL) 29 .baseUrl(SiliconFlowApiConstants.DEFAULT_BASE_URL)
30 .apiKey("sk-epsakfenqnyzoxhmbucsxlhkdqlcbnimslqoivkshalvdozz") // apiKey 30 .apiKey("sk-epsakfenqnyzoxhmbucsxlhkdqlcbnimslqoivkshalvdozz") // apiKey
31 .build()) 31 .build())
32 - .defaultOptions(OpenAiChatOptions.builder() 32 + .defaultOptions(DeepSeekChatOptions.builder()
33 .model(SiliconFlowApiConstants.MODEL_DEFAULT) // 模型 33 .model(SiliconFlowApiConstants.MODEL_DEFAULT) // 模型
34 // .model("deepseek-ai/DeepSeek-R1") // 模型(deepseek-ai/DeepSeek-R1)可用赠费 34 // .model("deepseek-ai/DeepSeek-R1") // 模型(deepseek-ai/DeepSeek-R1)可用赠费
35 // .model("Pro/deepseek-ai/DeepSeek-R1") // 模型(Pro/deepseek-ai/DeepSeek-R1)需要付费 35 // .model("Pro/deepseek-ai/DeepSeek-R1") // 模型(Pro/deepseek-ai/DeepSeek-R1)需要付费
@@ -67,4 +67,23 @@ public class SiliconFlowChatModelTests { @@ -67,4 +67,23 @@ public class SiliconFlowChatModelTests {
67 flux.doOnNext(System.out::println).then().block(); 67 flux.doOnNext(System.out::println).then().block();
68 } 68 }
69 69
  70 + @Test
  71 + @Disabled
  72 + public void testStream_thinking() {
  73 + // 准备参数
  74 + List<Message> messages = new ArrayList<>();
  75 + messages.add(new UserMessage("详细分析下,如何设计一个电商系统?"));
  76 + DeepSeekChatOptions options = DeepSeekChatOptions.builder()
  77 + .model("deepseek-ai/DeepSeek-R1")
  78 + .build();
  79 +
  80 + // 调用
  81 + Flux<ChatResponse> flux = chatModel.stream(new Prompt(messages, options));
  82 + // 打印结果
  83 + flux.doOnNext(response -> {
  84 +// System.out.println(response);
  85 + System.out.println(response.getResult().getOutput());
  86 + }).then().block();
  87 + }
  88 +
70 } 89 }