Commit 9f9366f1581ff3431b469ec9b5df0015ab02ca6b

Authored by YunaiV
1 parent ea8f532f

feat:【ai】增加 Grok 接入

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