tsurumure 5 ماه پیش
والد
کامیت
3762d4000e

+ 15 - 12
db/ai_chat_model.sql

@@ -10,20 +10,23 @@ CREATE TABLE `ai_chat_model` (
     `id` BIGINT AUTO_INCREMENT COMMENT 'ID',
     `parent_id` BIGINT DEFAULT '-1' COMMENT '父ID',
     `label` VARCHAR(255) COMMENT '模型名称',
-    `value` VARCHAR(255) COMMENT '模型 (HUNYUAN-混元, DEEPSEEK_API, OLLAMA)',
+    `value` VARCHAR(255) COMMENT '模型 (HUNYUAN-混元, DEEPSEEK_API, DEEPSEEK_R1)',
+    `tag` VARCHAR(255) COMMENT '模型组 (OLLAMA, API)',
     `disabled` TINYINT(1) DEFAULT '1' COMMENT '是否禁用 (-1可用, 1禁用)',
     `status` TINYINT(1) DEFAULT '1' COMMENT '状态 (-1禁用, 1启用)'
 ) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='AI助手模型表';
 
-INSERT INTO ai_chat_model(id, parent_id, label, value, disabled, status) VALUES
-    (1, -1, 'DeepSeek R1', 'DEEPSEEK_R1', -1, 1),
-        (2, 1, 'deepseek-r1:1.5b', 'deepseek-r1:1.5b', -1, 1),
-        (3, 1, 'deepseek-r1:70b', 'deepseek-r1:70b', -1, 1),
-        (4, 1, 'deepseek-r1:671b', 'deepseek-r1:671b', 1, 1),
-    (5, -1, 'DeepSeek API', 'DEEPSEEK_API', -1, 1),
-        (6, 5, 'deepseek-chat', 'deepseek-chat', -1, 1),
-        (7, 5, 'deepseek-reasoner', 'deepseek-reasoner', -1, 1),
-    (8, -1, '混元大模型', 'HUNYUAN', -1, 1),
-    (9, -1, 'Gemma3', 'GEMMA', -1, 1),
-        (10, 9, 'gemma3:27b', 'gemma3:27b', -1, 1)
+INSERT INTO ai_chat_model(id, parent_id, label, value, tag, disabled, status) VALUES
+    (1, -1, 'DeepSeek R1', 'DEEPSEEK_R1', 'OLLAMA', -1, 1),
+        (2, 1, 'deepseek-r1:1.5b', 'deepseek-r1:1.5b', 'OLLAMA', -1, 1),
+        (3, 1, 'deepseek-r1:70b', 'deepseek-r1:70b', 'OLLAMA', -1, 1),
+        (4, 1, 'deepseek-r1:671b', 'deepseek-r1:671b', 'OLLAMA', -1, 1),
+    (5, -1, 'DeepSeek API', 'DEEPSEEK_API', 'API', -1, 1),
+        (6, 5, 'deepseek-chat', 'deepseek-chat', 'API', -1, 1),
+        (7, 5, 'deepseek-reasoner', 'deepseek-reasoner', 'API', -1, 1),
+    (8, -1, '混元大模型', 'HUNYUAN', 'API', -1, 1),
+    (9, -1, 'Gemma3', 'GEMMA', 'OLLAMA', -1, 1),
+        (10, 9, 'gemma3:27b', 'gemma3:27b', 'OLLAMA', -1, 1),
+    (11, -1, '通义千问', 'QwQ', 'OLLAMA', -1, 1),
+        (12, 11, 'qwq:32b', 'qwq:32b', 'OLLAMA', -1, 1)
 ;

+ 4 - 0
src/main/java/com/backendsys/modules/ai/chat/entity/Chat.java

@@ -2,6 +2,7 @@ package com.backendsys.modules.ai.chat.entity;
 
 import com.backendsys.entity.validator.RangeStringArray;
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import jakarta.validation.constraints.NotEmpty;
@@ -32,6 +33,9 @@ public class Chat {
     // @RangeStringArray(message="模型取值有误,范围应是(HUNYUAN, DEEPSEEK_API, DEEPSEEK_R1)", value = {"HUNYUAN", "DEEPSEEK_API", "DEEPSEEK_R1"}, groups = { Create.class, Update.class })
     private String model;
     private String model_version;
+    @NotEmpty(message = "tag 不能为空", groups = { Create.class })
+    @TableField(exist = false)
+    private String tag;
 
     private Long user_id;
 //    private String user_nickname;

+ 1 - 0
src/main/java/com/backendsys/modules/ai/chat/entity/ChatModel.java

@@ -19,6 +19,7 @@ public class ChatModel {
     private Long parent_id;
     private String label;
     private String value;
+    private String tag;
     @TableField(exist = false)
     private List<ChatModel> children;
     private Integer disabled;

+ 14 - 11
src/main/java/com/backendsys/modules/ai/chat/service/impl/ChatServiceImpl.java

@@ -68,6 +68,7 @@ public class ChatServiceImpl implements ChatService {
 
         String model = chat.getModel();
         String model_version = chat.getModel_version();
+        String tag = chat.getTag();
         String prompt = chat.getContent();
 
         if (("DEEPSEEK".equals(model)) && StrUtil.isEmpty(model_version)) {
@@ -147,20 +148,22 @@ public class ChatServiceImpl implements ChatService {
 
                 ChatResult chatResult = null;
                 // -- [Deepseek R1] -------------------------------------------------------
-                if ("DEEPSEEK_R1".equals(model) || "GEMMA".equals(model)) {
-//                if ("OLLAMA".equals(model)) {
+//                if ("DEEPSEEK_R1".equals(model) || "GEMMA".equals(model)) {
+                if ("OLLAMA".equals(tag)) {
                     chatResult = ollamaUtil.chatCompletion(user_id, model_version, prompt, final_history_code, chatList);
                 }
-                // -- [Deepseek Api] ------------------------------------------------------
-                if ("DEEPSEEK_API".equals(model)) {
-                    // [DeepSeek] 发起对话
-                    chatResult = deepSeekClient.chatCompletion(user_id, model_version, prompt, final_history_code, chatList);
-                }
-                // -- [腾讯混元大模型] -------------------------------------------------------
-                if ("HUNYUAN".equals(model)) {
-                    chatResult = hunYuanClient.chatCompletion(user_id, prompt, final_history_code, chatList);
+                if ("API".equals(tag)) {
+                    // -- [Deepseek Api] ------------------------------------------------------
+                    if ("DEEPSEEK_API".equals(model)) {
+                        // [DeepSeek] 发起对话
+                        chatResult = deepSeekClient.chatCompletion(user_id, model_version, prompt, final_history_code, chatList);
+                    }
+                    // -- [腾讯混元大模型] -------------------------------------------------------
+                    if ("HUNYUAN".equals(model)) {
+                        chatResult = hunYuanClient.chatCompletion(user_id, prompt, final_history_code, chatList);
+                    }
+                    // ------------------------------------------------------------------------
                 }
-                // ------------------------------------------------------------------------
 
                 if (chatResult != null) {