Commit 9f9366f1581ff3431b469ec9b5df0015ab02ca6b
1 parent
ea8f532f
feat:【ai】增加 Grok 接入
Showing
3 changed files
with
30 additions
and
30 deletions
yudao-module-ai/src/main/java/cn/iocoder/yudao/module/ai/framework/ai/config/AiAutoConfiguration.java
| ... | ... | @@ -255,6 +255,28 @@ public class AiAutoConfiguration { |
| 255 | 255 | return new SunoApi(yudaoAiProperties.getSuno().getBaseUrl()); |
| 256 | 256 | } |
| 257 | 257 | |
| 258 | + public ChatModel buildGrokChatClient(YudaoAiProperties.Grok properties) { | |
| 259 | + if (StrUtil.isEmpty(properties.getModel())) { | |
| 260 | + properties.setModel(GrokChatModel.MODEL_DEFAULT); | |
| 261 | + } | |
| 262 | + OpenAiChatModel openAiChatModel = OpenAiChatModel.builder() | |
| 263 | + .openAiApi(OpenAiApi.builder() | |
| 264 | + .baseUrl(Optional.ofNullable(properties.getBaseUrl()) | |
| 265 | + .orElse(GrokChatModel.BASE_URL)) | |
| 266 | + .completionsPath(GrokChatModel.COMPLETE_PATH) | |
| 267 | + .apiKey(properties.getApiKey()) | |
| 268 | + .build()) | |
| 269 | + .defaultOptions(OpenAiChatOptions.builder() | |
| 270 | + .model(properties.getModel()) | |
| 271 | + .temperature(properties.getTemperature()) | |
| 272 | + .maxTokens(properties.getMaxTokens()) | |
| 273 | + .topP(properties.getTopP()) | |
| 274 | + .build()) | |
| 275 | + .toolCallingManager(getToolCallingManager()) | |
| 276 | + .build(); | |
| 277 | + return new DouBaoChatModel(openAiChatModel); | |
| 278 | + } | |
| 279 | + | |
| 258 | 280 | // ========== RAG 相关 ========== |
| 259 | 281 | |
| 260 | 282 | @Bean |
| ... | ... | @@ -289,25 +311,4 @@ public class AiAutoConfiguration { |
| 289 | 311 | return List.of(ToolCallbacks.from(personService)); |
| 290 | 312 | } |
| 291 | 313 | |
| 292 | - public ChatModel buildGrokChatClient(YudaoAiProperties.Grok properties) { | |
| 293 | - if (StrUtil.isEmpty(properties.getModel())) { | |
| 294 | - properties.setModel(GrokChatModel.MODEL_DEFAULT); | |
| 295 | - } | |
| 296 | - OpenAiChatModel openAiChatModel = OpenAiChatModel.builder() | |
| 297 | - .openAiApi(OpenAiApi.builder() | |
| 298 | - .baseUrl(Optional.ofNullable(properties.getBaseUrl()) | |
| 299 | - .orElse(GrokChatModel.BASE_URL)) | |
| 300 | - .completionsPath(GrokChatModel.COMPLETE_PATH) | |
| 301 | - .apiKey(properties.getApiKey()) | |
| 302 | - .build()) | |
| 303 | - .defaultOptions(OpenAiChatOptions.builder() | |
| 304 | - .model(properties.getModel()) | |
| 305 | - .temperature(properties.getTemperature()) | |
| 306 | - .maxTokens(properties.getMaxTokens()) | |
| 307 | - .topP(properties.getTopP()) | |
| 308 | - .build()) | |
| 309 | - .toolCallingManager(getToolCallingManager()) | |
| 310 | - .build(); | |
| 311 | - return new DouBaoChatModel(openAiChatModel); | |
| 312 | - } | |
| 313 | 314 | } |
| 314 | 315 | \ No newline at end of file | ... | ... |
yudao-module-ai/src/main/java/cn/iocoder/yudao/module/ai/framework/ai/core/model/AiModelFactoryImpl.java
| ... | ... | @@ -407,12 +407,6 @@ public class AiModelFactoryImpl implements AiModelFactory { |
| 407 | 407 | .build(); |
| 408 | 408 | } |
| 409 | 409 | |
| 410 | - private ChatModel buildGrokChatModel(String apiKey,String url) { | |
| 411 | - YudaoAiProperties.Grok properties = new YudaoAiProperties.Grok() | |
| 412 | - .setBaseUrl(url) | |
| 413 | - .setApiKey(apiKey); | |
| 414 | - return new AiAutoConfiguration().buildGrokChatClient(properties); | |
| 415 | - } | |
| 416 | 410 | /** |
| 417 | 411 | * 可参考 {@link AiAutoConfiguration#douBaoChatClient(YudaoAiProperties)} |
| 418 | 412 | */ |
| ... | ... | @@ -596,6 +590,13 @@ public class AiModelFactoryImpl implements AiModelFactory { |
| 596 | 590 | return new StabilityAiImageModel(stabilityAiApi); |
| 597 | 591 | } |
| 598 | 592 | |
| 593 | + private ChatModel buildGrokChatModel(String apiKey,String url) { | |
| 594 | + YudaoAiProperties.Grok properties = new YudaoAiProperties.Grok() | |
| 595 | + .setBaseUrl(url) | |
| 596 | + .setApiKey(apiKey); | |
| 597 | + return new AiAutoConfiguration().buildGrokChatClient(properties); | |
| 598 | + } | |
| 599 | + | |
| 599 | 600 | // ========== 各种创建 EmbeddingModel 的方法 ========== |
| 600 | 601 | |
| 601 | 602 | /** | ... | ... |
yudao-module-ai/src/main/java/cn/iocoder/yudao/module/ai/util/AiUtils.java
| ... | ... | @@ -68,6 +68,7 @@ public class AiUtils { |
| 68 | 68 | case OPENAI: |
| 69 | 69 | case GEMINI: // 复用 OpenAI 客户端 |
| 70 | 70 | case BAI_CHUAN: // 复用 OpenAI 客户端 |
| 71 | + case GROK: // 复用 OpenAI 客户端 | |
| 71 | 72 | return OpenAiChatOptions.builder().model(model).temperature(temperature).maxTokens(maxTokens) |
| 72 | 73 | .toolCallbacks(toolCallbacks).toolContext(toolContext).build(); |
| 73 | 74 | case AZURE_OPENAI: |
| ... | ... | @@ -79,9 +80,6 @@ public class AiUtils { |
| 79 | 80 | case OLLAMA: |
| 80 | 81 | return OllamaChatOptions.builder().model(model).temperature(temperature).numPredict(maxTokens) |
| 81 | 82 | .toolCallbacks(toolCallbacks).toolContext(toolContext).build(); |
| 82 | - case GROK: | |
| 83 | - return OpenAiChatOptions.builder().model(model).temperature(temperature).maxTokens(maxTokens) | |
| 84 | - .toolCallbacks(toolCallbacks).toolContext(toolContext).build(); | |
| 85 | 83 | default: |
| 86 | 84 | throw new IllegalArgumentException(StrUtil.format("未知平台({})", platform)); |
| 87 | 85 | } | ... | ... |