Commit 2fa5909061a8a36113b0fa4e0bbd311205b59115
1 parent
dfc3c622
fix:【ai 大模型】硅基流动 thinking 返回
Showing
4 changed files
with
31 additions
and
12 deletions
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 | } | ... | ... |