Преглед изворни кода

修改core-ai,接口形式改为通用chat模型

Signed-off-by: luoshi <luoshi@qmth.com.cn>
luoshi пре 1 година
родитељ
комит
46b7f1e8ac

+ 0 - 27
core-ai/src/main/java/com/qmth/boot/core/ai/api/LlmApiClient.java

@@ -1,27 +0,0 @@
-package com.qmth.boot.core.ai.api;
-
-import com.qmth.boot.core.ai.config.LlmApiConfiguration;
-import com.qmth.boot.core.ai.model.AiConstants;
-import com.qmth.boot.core.retrofit.annotatioin.RetrofitClient;
-import com.qmth.boot.core.retrofit.utils.SignatureInfo;
-import retrofit2.http.Body;
-import retrofit2.http.POST;
-import retrofit2.http.Tag;
-
-/**
- * 大模型相关应用服务接口
- */
-@RetrofitClient(configuration = LlmApiConfiguration.class)
-public interface LlmApiClient {
-
-    /**
-     * 自动命题服务
-     *
-     * @param signatureInfo
-     * @param prompt
-     * @return
-     */
-    @POST(AiConstants.LLM_AGQ_PATH)
-    String autoGenerateQuestion(@Tag SignatureInfo signatureInfo, @Body String prompt);
-
-}

+ 47 - 0
core-ai/src/main/java/com/qmth/boot/core/ai/client/LlmApiClient.java

@@ -0,0 +1,47 @@
+package com.qmth.boot.core.ai.client;
+
+import com.qmth.boot.core.ai.config.LlmApiConfiguration;
+import com.qmth.boot.core.ai.model.AiConstants;
+import com.qmth.boot.core.ai.model.llm.ChatChoice;
+import com.qmth.boot.core.ai.model.llm.ChatRequest;
+import com.qmth.boot.core.ai.model.llm.LlmAppType;
+import com.qmth.boot.core.ai.model.llm.PromptTemplate;
+import com.qmth.boot.core.retrofit.annotatioin.RetrofitClient;
+import com.qmth.boot.core.retrofit.utils.SignatureInfo;
+import retrofit2.http.Body;
+import retrofit2.http.Header;
+import retrofit2.http.POST;
+import retrofit2.http.Tag;
+
+import java.util.List;
+
+/**
+ * 大模型应用服务接口
+ */
+@RetrofitClient(configuration = LlmApiConfiguration.class)
+public interface LlmApiClient {
+
+    /**
+     * 大模型chat类型请求
+     *
+     * @param signature 使用机构AK构造Secret类型签名
+     * @param type      大模型应用类型
+     * @param request   标准chat请求对象
+     * @return
+     */
+    @POST(AiConstants.LLM_CHAT_PATH)
+    List<ChatChoice> chat(@Tag SignatureInfo signature, @Header(AiConstants.LLM_APP_TYPE_HEADER) LlmAppType type,
+            @Body ChatRequest request);
+
+    /**
+     * 大模型提示词模版获取
+     *
+     * @param signature 使用机构AK构造Secret类型签名
+     * @param type      大模型应用类型
+     * @return
+     */
+    @POST(AiConstants.LLM_PROMPT_TEMPLATE_PATH)
+    PromptTemplate getPromptTemplate(@Tag SignatureInfo signature,
+            @Header(AiConstants.LLM_APP_TYPE_HEADER) LlmAppType type);
+
+}

+ 5 - 0
core-ai/src/main/java/com/qmth/boot/core/ai/config/AiAutoConfiguration.java

@@ -1,6 +1,7 @@
 package com.qmth.boot.core.ai.config;
 
 import com.qmth.boot.core.retrofit.annotatioin.RetrofitScan;
+import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.Configuration;
 
@@ -9,4 +10,8 @@ import org.springframework.context.annotation.Configuration;
 @RetrofitScan("com.qmth.boot.core.ai.api")
 public class AiAutoConfiguration {
 
+    @Bean
+    public LlmApiConfiguration llmApiConfiguration(LlmProperties llmProperties) {
+        return new LlmApiConfiguration(llmProperties);
+    }
 }

+ 1 - 1
core-ai/src/main/java/com/qmth/boot/core/ai/config/LlmProperties.java

@@ -12,7 +12,7 @@ import javax.validation.constraints.NotNull;
 public class LlmProperties {
 
     /**
-     * 云服务模式下,默认直接访问solar地址
+     * 默认直接访问solar地址
      */
     @NotNull
     private String server = SolarConstants.DEFAULT_SERVER;

+ 5 - 1
core-ai/src/main/java/com/qmth/boot/core/ai/model/AiConstants.java

@@ -2,5 +2,9 @@ package com.qmth.boot.core.ai.model;
 
 public interface AiConstants {
 
-    String LLM_AGQ_PATH = "/api/ai/llm/agq";
+    String LLM_APP_TYPE_HEADER = "llm_app_type";
+
+    String LLM_CHAT_PATH = "/api/ai/llm/chat";
+
+    String LLM_PROMPT_TEMPLATE_PATH = "/api/ai/llm/prompt_template";
 }

+ 17 - 0
core-ai/src/main/java/com/qmth/boot/core/ai/model/llm/ChatChoice.java

@@ -0,0 +1,17 @@
+package com.qmth.boot.core.ai.model.llm;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class ChatChoice {
+
+    private ChatMessage message;
+
+    public ChatMessage getMessage() {
+        return message;
+    }
+
+    public void setMessage(ChatMessage message) {
+        this.message = message;
+    }
+}

+ 27 - 0
core-ai/src/main/java/com/qmth/boot/core/ai/model/llm/ChatMessage.java

@@ -0,0 +1,27 @@
+package com.qmth.boot.core.ai.model.llm;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class ChatMessage {
+
+    private ChatRole role;
+
+    private String content;
+
+    public ChatRole getRole() {
+        return role;
+    }
+
+    public void setRole(ChatRole role) {
+        this.role = role;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+}

+ 31 - 0
core-ai/src/main/java/com/qmth/boot/core/ai/model/llm/ChatRequest.java

@@ -0,0 +1,31 @@
+package com.qmth.boot.core.ai.model.llm;
+
+import java.util.LinkedList;
+import java.util.List;
+
+/**
+ * 大模型通用chat请求
+ */
+public class ChatRequest {
+
+    private List<ChatMessage> messages;
+
+    public ChatRequest() {
+        this.messages = new LinkedList<>();
+    }
+
+    public void addMessage(ChatRole role, String content) {
+        ChatMessage message = new ChatMessage();
+        message.setRole(role);
+        message.setContent(content);
+        this.messages.add(message);
+    }
+
+    public List<ChatMessage> getMessages() {
+        return messages;
+    }
+
+    public void setMessages(List<ChatMessage> messages) {
+        this.messages = messages;
+    }
+}

+ 6 - 0
core-ai/src/main/java/com/qmth/boot/core/ai/model/llm/ChatRole.java

@@ -0,0 +1,6 @@
+package com.qmth.boot.core.ai.model.llm;
+
+public enum ChatRole {
+
+    system, user, assistant;
+}

+ 21 - 0
core-ai/src/main/java/com/qmth/boot/core/ai/model/llm/LlmAppType.java

@@ -0,0 +1,21 @@
+package com.qmth.boot.core.ai.model.llm;
+
+/**
+ * 大模型应用类型
+ */
+public enum LlmAppType {
+
+    /**
+     * 自动命题
+     */
+    AUTO_GENERATE_QUESTOIN;
+
+    public static LlmAppType find(String text) {
+        for (LlmAppType type : values()) {
+            if (type.toString().equalsIgnoreCase(text)) {
+                return type;
+            }
+        }
+        return null;
+    }
+}

+ 33 - 0
core-ai/src/main/java/com/qmth/boot/core/ai/model/llm/PromptTemplate.java

@@ -0,0 +1,33 @@
+package com.qmth.boot.core.ai.model.llm;
+
+/**
+ * 提示词模版
+ */
+public class PromptTemplate {
+
+    /**
+     * system角色提示词模版
+     */
+    private String system;
+
+    /**
+     * user角色提示词模版
+     */
+    private String user;
+
+    public String getSystem() {
+        return system;
+    }
+
+    public void setSystem(String system) {
+        this.system = system;
+    }
+
+    public String getUser() {
+        return user;
+    }
+
+    public void setUser(String user) {
+        this.user = user;
+    }
+}