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,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 | } |