Browse Source

【代码评审】AI:讯飞星火的接入调整

YunaiV 1 năm trước cách đây
mục cha
commit
645dfae003
18 tập tin đã thay đổi với 72 bổ sung66 xóa
  1. 3 3
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/config/AiChatClientFactory.java
  2. 1 1
      yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/vo/AiChatModalConfigVO.java
  3. 3 3
      yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/config/YudaoAiAutoConfiguration.java
  4. 2 2
      yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/config/YudaoAiImageProperties.java
  5. 1 2
      yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/config/YudaoAiProperties.java
  6. 10 3
      yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/core/enums/AiPlatformEnum.java
  7. 5 4
      yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/core/model/xinghuo/XingHuoChatClient.java
  8. 1 1
      yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/core/model/xinghuo/XingHuoChatModel.java
  9. 1 1
      yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/core/model/xinghuo/XingHuoOptions.java
  10. 3 2
      yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/core/model/xinghuo/api/XingHuoApi.java
  11. 1 1
      yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/core/model/xinghuo/api/XingHuoChatCompletion.java
  12. 1 1
      yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/core/model/xinghuo/api/XingHuoChatCompletionMessage.java
  13. 1 1
      yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/core/model/xinghuo/api/XingHuoChatCompletionRequest.java
  14. 2 2
      yudao-module-ai/yudao-spring-boot-starter-ai/src/test/java/cn/iocoder/yudao/framework/ai/chat/XingHuoChatClientMainTests.java
  15. 4 4
      yudao-module-ai/yudao-spring-boot-starter-ai/src/test/java/cn/iocoder/yudao/framework/ai/chat/XingHuoChatClientTests.java
  16. 3 3
      yudao-module-ai/yudao-spring-boot-starter-ai/src/test/java/cn/iocoder/yudao/framework/ai/chat/XingHuoOkHttpTests.java
  17. 0 31
      yudao-server/src/main/resources/application-local.yaml
  18. 30 1
      yudao-server/src/main/resources/application.yaml

+ 3 - 3
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/config/AiChatClientFactory.java

@@ -4,7 +4,7 @@ import cn.iocoder.yudao.framework.ai.core.enums.AiPlatformEnum;
 import org.springframework.ai.chat.ChatClient;
 import org.springframework.ai.chat.StreamingChatClient;
 import org.springframework.ai.models.tongyi.QianWenChatClient;
-import org.springframework.ai.models.xinghuo.XingHuoChatClient;
+import cn.iocoder.yudao.framework.ai.core.model.xinghuo.XingHuoChatClient;
 import cn.iocoder.yudao.framework.ai.core.model.yiyan.YiYanChatClient;
 import org.springframework.ai.ollama.OllamaChatClient;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -27,7 +27,7 @@ public class AiChatClientFactory {
     public ChatClient getChatClient(AiPlatformEnum platformEnum) {
         if (AiPlatformEnum.QIAN_WEN == platformEnum) {
             return applicationContext.getBean(QianWenChatClient.class);
-        } else if (AiPlatformEnum.YIYAN == platformEnum) {
+        } else if (AiPlatformEnum.YI_YAN == platformEnum) {
             return applicationContext.getBean(YiYanChatClient.class);
         } else if (AiPlatformEnum.XING_HUO == platformEnum) {
             return applicationContext.getBean(XingHuoChatClient.class);
@@ -42,7 +42,7 @@ public class AiChatClientFactory {
 //        }
         if (AiPlatformEnum.QIAN_WEN == platformEnum) {
             return applicationContext.getBean(QianWenChatClient.class);
-        } else if (AiPlatformEnum.YIYAN == platformEnum) {
+        } else if (AiPlatformEnum.YI_YAN == platformEnum) {
             return applicationContext.getBean(YiYanChatClient.class);
         } else if (AiPlatformEnum.XING_HUO == platformEnum) {
             return applicationContext.getBean(XingHuoChatClient.class);

+ 1 - 1
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/vo/AiChatModalConfigVO.java

@@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.ai.dal.vo;
 import cn.iocoder.yudao.framework.ai.core.enums.AiPlatformEnum;
 import lombok.Data;
 import lombok.experimental.Accessors;
-import org.springframework.ai.models.xinghuo.XingHuoChatModel;
+import cn.iocoder.yudao.framework.ai.core.model.xinghuo.XingHuoChatModel;
 import cn.iocoder.yudao.framework.ai.core.model.yiyan.api.YiYanChatModel;
 
 /**

+ 3 - 3
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/config/YudaoAiAutoConfiguration.java

@@ -5,9 +5,9 @@ import org.springframework.ai.models.tongyi.QianWenChatClient;
 import org.springframework.ai.models.tongyi.QianWenChatModal;
 import org.springframework.ai.models.tongyi.QianWenOptions;
 import org.springframework.ai.models.tongyi.api.QianWenApi;
-import org.springframework.ai.models.xinghuo.XingHuoChatClient;
-import org.springframework.ai.models.xinghuo.XingHuoOptions;
-import org.springframework.ai.models.xinghuo.api.XingHuoApi;
+import cn.iocoder.yudao.framework.ai.core.model.xinghuo.XingHuoChatClient;
+import cn.iocoder.yudao.framework.ai.core.model.xinghuo.XingHuoOptions;
+import cn.iocoder.yudao.framework.ai.core.model.xinghuo.api.XingHuoApi;
 import cn.iocoder.yudao.framework.ai.core.model.yiyan.YiYanChatClient;
 import cn.iocoder.yudao.framework.ai.core.model.yiyan.YiYanChatOptions;
 import cn.iocoder.yudao.framework.ai.core.model.yiyan.api.YiYanApi;

+ 2 - 2
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/config/YudaoAiImageProperties.java

@@ -1,8 +1,8 @@
 package cn.iocoder.yudao.framework.ai.config;
 
 import cn.iocoder.yudao.framework.ai.core.enums.AiPlatformEnum;
-import org.springframework.ai.models.xinghuo.XingHuoChatModel;
-import org.springframework.ai.models.xinghuo.XingHuoOptions;
+import cn.iocoder.yudao.framework.ai.core.model.xinghuo.XingHuoChatModel;
+import cn.iocoder.yudao.framework.ai.core.model.xinghuo.XingHuoOptions;
 import cn.iocoder.yudao.framework.ai.core.model.yiyan.api.YiYanChatModel;
 import lombok.Data;
 import lombok.experimental.Accessors;

+ 1 - 2
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/config/YudaoAiProperties.java

@@ -1,7 +1,7 @@
 package cn.iocoder.yudao.framework.ai.config;
 
 import cn.iocoder.yudao.framework.ai.core.enums.AiPlatformEnum;
-import org.springframework.ai.models.xinghuo.XingHuoChatModel;
+import cn.iocoder.yudao.framework.ai.core.model.xinghuo.XingHuoChatModel;
 import cn.iocoder.yudao.framework.ai.core.model.yiyan.api.YiYanChatModel;
 import cn.iocoder.yudao.framework.ai.core.enums.OpenAiImageModelEnum;
 import cn.iocoder.yudao.framework.ai.core.enums.OpenAiImageStyleEnum;
@@ -21,7 +21,6 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
 @ConfigurationProperties(prefix = "yudao.ai")
 public class YudaoAiProperties {
 
-    private String initSource;
     private QianWenProperties qianwen;
     private XingHuoProperties xinghuo;
     private YiYanProperties yiyan;

+ 10 - 3
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/core/enums/AiPlatformEnum.java

@@ -16,16 +16,23 @@ public enum AiPlatformEnum {
 
     OPENAI("OpenAI", "OpenAI"),
     OLLAMA("Ollama", "Ollama"),
-    YIYAN("YiYan", "文心一言"),
+    YI_YAN("YiYan", "文心一言"), // 百度
+    XING_HUO("XingHuo", "星火"), // 讯飞
+
+    QIAN_WEN("qianwen", "千问"), // 阿里
 
-    QIAN_WEN("qianwen", "千问"),
-    XING_HUO("xinghuo", "星火"),
     OPEN_AI_DALL("dall", "dall"),
     MIDJOURNEY("midjourney", "midjourney"),
 
     ;
 
+    /**
+     * 平台
+     */
     private final String platform;
+    /**
+     * 平台名
+     */
     private final String name;
 
 //    public static List<AiPlatformEnum> CHAT_PLATFORM_LIST = Lists.newArrayList(

+ 5 - 4
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/org/springframework/ai/models/xinghuo/XingHuoChatClient.java → yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/core/model/xinghuo/XingHuoChatClient.java

@@ -1,14 +1,14 @@
-package org.springframework.ai.models.xinghuo;
+package cn.iocoder.yudao.framework.ai.core.model.xinghuo;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.exceptions.ExceptionUtil;
 import cn.iocoder.yudao.framework.ai.core.exception.ChatException;
+import cn.iocoder.yudao.framework.ai.core.model.xinghuo.api.XingHuoApi;
+import cn.iocoder.yudao.framework.ai.core.model.xinghuo.api.XingHuoChatCompletion;
+import cn.iocoder.yudao.framework.ai.core.model.xinghuo.api.XingHuoChatCompletionRequest;
 import org.springframework.ai.chat.*;
 import org.springframework.ai.chat.prompt.ChatOptions;
 import org.springframework.ai.chat.prompt.Prompt;
-import org.springframework.ai.models.xinghuo.api.XingHuoApi;
-import org.springframework.ai.models.xinghuo.api.XingHuoChatCompletion;
-import org.springframework.ai.models.xinghuo.api.XingHuoChatCompletionRequest;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.http.ResponseEntity;
 import org.springframework.retry.RetryCallback;
@@ -21,6 +21,7 @@ import java.time.Duration;
 import java.util.List;
 import java.util.stream.Collectors;
 
+// TODO @fan:参考 yiyan 的修改建议,调整下 xinghuo 的实现;可以等 yiyan 修改完建议,然后我 review 完,再改这个哈;
 /**
  * 讯飞星火 client
  * <p>

+ 1 - 1
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/org/springframework/ai/models/xinghuo/XingHuoChatModel.java → yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/core/model/xinghuo/XingHuoChatModel.java

@@ -1,4 +1,4 @@
-package org.springframework.ai.models.xinghuo;
+package cn.iocoder.yudao.framework.ai.core.model.xinghuo;
 
 import lombok.Getter;
 

+ 1 - 1
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/org/springframework/ai/models/xinghuo/XingHuoOptions.java → yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/core/model/xinghuo/XingHuoOptions.java

@@ -1,4 +1,4 @@
-package org.springframework.ai.models.xinghuo;
+package cn.iocoder.yudao.framework.ai.core.model.xinghuo;
 
 import org.springframework.ai.chat.prompt.ChatOptions;
 import lombok.Data;

+ 3 - 2
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/org/springframework/ai/models/xinghuo/api/XingHuoApi.java → yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/core/model/xinghuo/api/XingHuoApi.java

@@ -1,8 +1,8 @@
-package org.springframework.ai.models.xinghuo.api;
+package cn.iocoder.yudao.framework.ai.core.model.xinghuo.api;
 
 import cn.hutool.http.HttpUtil;
 import cn.hutool.json.JSONUtil;
-import org.springframework.ai.models.xinghuo.XingHuoChatModel;
+import cn.iocoder.yudao.framework.ai.core.model.xinghuo.XingHuoChatModel;
 import lombok.Data;
 import org.springframework.http.HttpStatusCode;
 import org.springframework.http.ResponseEntity;
@@ -21,6 +21,7 @@ import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.stream.Collectors;
 
+// TODO @fan:讯飞使用 spring websocket 接入,还是 okhttp?确认了,未使用的最好删除下,反正 git 也能找回 history
 /**
  * 讯飞星火 属性、api
  * <p>

+ 1 - 1
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/org/springframework/ai/models/xinghuo/api/XingHuoChatCompletion.java → yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/core/model/xinghuo/api/XingHuoChatCompletion.java

@@ -1,4 +1,4 @@
-package org.springframework.ai.models.xinghuo.api;
+package cn.iocoder.yudao.framework.ai.core.model.xinghuo.api;
 
 import lombok.Data;
 import lombok.experimental.Accessors;

+ 1 - 1
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/org/springframework/ai/models/xinghuo/api/XingHuoChatCompletionMessage.java → yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/core/model/xinghuo/api/XingHuoChatCompletionMessage.java

@@ -1,4 +1,4 @@
-package org.springframework.ai.models.xinghuo.api;
+package cn.iocoder.yudao.framework.ai.core.model.xinghuo.api;
 
 /**
  * author: fansili

+ 1 - 1
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/org/springframework/ai/models/xinghuo/api/XingHuoChatCompletionRequest.java → yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/core/model/xinghuo/api/XingHuoChatCompletionRequest.java

@@ -1,4 +1,4 @@
-package org.springframework.ai.models.xinghuo.api;
+package cn.iocoder.yudao.framework.ai.core.model.xinghuo.api;
 
 import lombok.Data;
 import lombok.Getter;

+ 2 - 2
yudao-module-ai/yudao-spring-boot-starter-ai/src/test/java/cn/iocoder/yudao/framework/ai/chat/XingHuoChatClientMainTests.java

@@ -2,8 +2,8 @@ package cn.iocoder.yudao.framework.ai.chat;
 
 import cn.hutool.http.HttpUtil;
 import cn.hutool.json.JSONUtil;
-import org.springframework.ai.models.xinghuo.api.XingHuoChatCompletion;
-import org.springframework.ai.models.xinghuo.api.XingHuoChatCompletionRequest;
+import cn.iocoder.yudao.framework.ai.core.model.xinghuo.api.XingHuoChatCompletion;
+import cn.iocoder.yudao.framework.ai.core.model.xinghuo.api.XingHuoChatCompletionRequest;
 import org.springframework.web.reactive.socket.client.ReactorNettyWebSocketClient;
 import org.springframework.web.reactive.socket.client.WebSocketClient;
 import reactor.core.publisher.Flux;

+ 4 - 4
yudao-module-ai/yudao-spring-boot-starter-ai/src/test/java/cn/iocoder/yudao/framework/ai/chat/XingHuoChatClientTests.java

@@ -5,10 +5,10 @@ import org.springframework.ai.chat.messages.Message;
 import org.springframework.ai.chat.messages.SystemMessage;
 import org.springframework.ai.chat.messages.UserMessage;
 import org.springframework.ai.chat.prompt.Prompt;
-import org.springframework.ai.models.xinghuo.XingHuoChatClient;
-import org.springframework.ai.models.xinghuo.XingHuoChatModel;
-import org.springframework.ai.models.xinghuo.XingHuoOptions;
-import org.springframework.ai.models.xinghuo.api.XingHuoApi;
+import cn.iocoder.yudao.framework.ai.core.model.xinghuo.XingHuoChatClient;
+import cn.iocoder.yudao.framework.ai.core.model.xinghuo.XingHuoChatModel;
+import cn.iocoder.yudao.framework.ai.core.model.xinghuo.XingHuoOptions;
+import cn.iocoder.yudao.framework.ai.core.model.xinghuo.api.XingHuoApi;
 import org.junit.Before;
 import org.junit.Test;
 import reactor.core.publisher.Flux;

+ 3 - 3
yudao-module-ai/yudao-spring-boot-starter-ai/src/test/java/cn/iocoder/yudao/framework/ai/chat/XingHuoOkHttpTests.java

@@ -2,9 +2,9 @@ package cn.iocoder.yudao.framework.ai.chat;
 
 import cn.hutool.http.HttpUtil;
 import cn.hutool.json.JSONUtil;
-import org.springframework.ai.models.xinghuo.XingHuoChatClient;
-import org.springframework.ai.models.xinghuo.api.XingHuoChatCompletion;
-import org.springframework.ai.models.xinghuo.api.XingHuoChatCompletionRequest;
+import cn.iocoder.yudao.framework.ai.core.model.xinghuo.XingHuoChatClient;
+import cn.iocoder.yudao.framework.ai.core.model.xinghuo.api.XingHuoChatCompletion;
+import cn.iocoder.yudao.framework.ai.core.model.xinghuo.api.XingHuoChatCompletionRequest;
 import okhttp3.*;
 import org.jetbrains.annotations.NotNull;
 

+ 0 - 31
yudao-server/src/main/resources/application-local.yaml

@@ -209,37 +209,6 @@ wx:
 
 # 芋道配置项,设置当前项目所有自定义的配置
 yudao:
-  ai:
-    initSource: yaml
-    qianwen:
-      enable: true
-      aiPlatform: QIAN_WEN
-      max-tokens: 1500
-      temperature: 0.85
-      topP: 0.8
-      topK: 0
-      api-key: sk-Zsd81gZYg7
-    xinghuo:
-      enable: true
-      aiPlatform: XING_HUO
-      max-tokens: 1500
-      temperature: 0.85
-      topP: 0.8
-      topK: 0
-      appId: 13c8cca6
-      appKey: cb6415c19d6162cda07b47316fcb0416
-      secretKey: Y2JiYTIxZjA3MDMxMjNjZjQzYzVmNzdh
-      model: XING_HUO_3_5
-    openAiImage:
-      enable: true
-      api-key: ${OPEN_AI_KEY}
-      model: dall_e_2
-      style: vivid
-    midjourney:
-      enable: true
-      token: MTE4MjE3MjY2MjkxNTY3ODIzOA.GEV1SG.c49F8lZoGCUHwsj8O0UdodmM6nyQHvuD2fXflw
-      guild-id: 1237948819677904956
-      channel-id: 1237948819677904960
   captcha:
     enable: false # 本地环境,暂时关闭图片验证码,方便登录等接口的测试;
   security:

+ 30 - 1
yudao-server/src/main/resources/application.yaml

@@ -153,7 +153,7 @@ spring.ai:
 yudao.ai:
   yiyan:
     enable: true
-    aiPlatform: YIYAN # TODO @fan:建议每个都独立配置属性类
+    aiPlatform: YI_YAN # TODO @fan:建议每个都独立配置属性类
     max-tokens: 1500
     temperature: 0.85
     topP: 0.8
@@ -162,6 +162,35 @@ yudao.ai:
     secretKey: R9mYF9dl9KASgi5RUq0FQt3wRisSnOcK
     refreshTokenSecondTime: 86400
     model: ERNIE4_3_5_8K
+  xinghuo:
+    enable: true
+    aiPlatform: XING_HUO # TODO @fan:建议每个都独立配置属性类
+    max-tokens: 1500
+    temperature: 0.85
+    topP: 0.8
+    topK: 0
+    appId: 13c8cca6
+    appKey: cb6415c19d6162cda07b47316fcb0416
+    secretKey: Y2JiYTIxZjA3MDMxMjNjZjQzYzVmNzdh
+    model: XING_HUO_3_5
+  qianwen:
+    enable: true
+    aiPlatform: QIAN_WEN
+    max-tokens: 1500
+    temperature: 0.85
+    topP: 0.8
+    topK: 0
+    api-key: sk-Zsd81gZYg7
+  openAiImage:
+    enable: true
+    api-key: ${OPEN_AI_KEY}
+    model: dall_e_2
+    style: vivid
+  midjourney:
+    enable: true
+    token: MTE4MjE3MjY2MjkxNTY3ODIzOA.GEV1SG.c49F8lZoGCUHwsj8O0UdodmM6nyQHvuD2fXflw
+    guild-id: 1237948819677904956
+    channel-id: 1237948819677904960
 
 --- #################### 芋道相关配置 ####################