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 122 if (StrUtil.isEmpty(properties.getModel())) {
123 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 127 .baseUrl(SiliconFlowApiConstants.DEFAULT_BASE_URL)
128 128 .apiKey(properties.getApiKey())
129 129 .build())
130   - .defaultOptions(OpenAiChatOptions.builder()
  130 + .defaultOptions(DeepSeekChatOptions.builder()
131 131 .model(properties.getModel())
132 132 .temperature(properties.getTemperature())
133 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 23 /**
24 24 * 兼容 OpenAI 接口,进行复用
25 25 */
26   - private final OpenAiChatModel openAiChatModel;
  26 + private final ChatModel openAiChatModel;
27 27  
28 28 @Override
29 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 50 return QianFanChatOptions.builder().model(model).temperature(temperature).maxTokens(maxTokens).build();
51 51 case DEEP_SEEK:
52 52 case DOU_BAO: // 复用 DeepSeek 客户端
  53 + case HUN_YUAN: // 复用 DeepSeek 客户端
  54 + case SILICON_FLOW: // 复用 OpenAI 客户端
53 55 return DeepSeekChatOptions.builder().model(model).temperature(temperature).maxTokens(maxTokens)
54 56 .toolNames(toolNames).toolContext(toolContext).build();
55   - case HUN_YUAN: // 复用 DeepSeek 客户端
56 57 case ZHI_PU:
57 58 return ZhiPuAiChatOptions.builder().model(model).temperature(temperature).maxTokens(maxTokens)
58 59 .toolNames(toolNames).toolContext(toolContext).build();
... ... @@ -65,7 +66,6 @@ public class AiUtils {
65 66 case OPENAI:
66 67 case GEMINI: // 复用 OpenAI 客户端
67 68 case XING_HUO: // 复用 OpenAI 客户端
68   - case SILICON_FLOW: // 复用 OpenAI 客户端
69 69 case BAI_CHUAN: // 复用 OpenAI 客户端
70 70 return OpenAiChatOptions.builder().model(model).temperature(temperature).maxTokens(maxTokens)
71 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 import org.springframework.ai.chat.messages.UserMessage;
10 10 import org.springframework.ai.chat.model.ChatResponse;
11 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 15 import reactor.core.publisher.Flux;
16 16  
17 17 import java.util.ArrayList;
... ... @@ -24,12 +24,12 @@ import java.util.List;
24 24 */
25 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 29 .baseUrl(SiliconFlowApiConstants.DEFAULT_BASE_URL)
30 30 .apiKey("sk-epsakfenqnyzoxhmbucsxlhkdqlcbnimslqoivkshalvdozz") // apiKey
31 31 .build())
32   - .defaultOptions(OpenAiChatOptions.builder()
  32 + .defaultOptions(DeepSeekChatOptions.builder()
33 33 .model(SiliconFlowApiConstants.MODEL_DEFAULT) // 模型
34 34 // .model("deepseek-ai/DeepSeek-R1") // 模型(deepseek-ai/DeepSeek-R1)可用赠费
35 35 // .model("Pro/deepseek-ai/DeepSeek-R1") // 模型(Pro/deepseek-ai/DeepSeek-R1)需要付费
... ... @@ -67,4 +67,23 @@ public class SiliconFlowChatModelTests {
67 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 }
... ...