From ed3014bedfe4b84d7b9be7040f44dccc8a07eda5 Mon Sep 17 00:00:00 2001 From: Elams4 Date: Mon, 17 Aug 2026 14:43:10 +0000 Subject: [PATCH] =?UTF-8?q?feat(ai):=20=E6=96=B0=E5=A2=9E=20OrcaRouter=20?= =?UTF-8?q?=E4=BD=9C=E4=B8=BA=E5=91=BD=E5=90=8D=E6=A8=A1=E5=9E=8B=E5=B9=B3?= =?UTF-8?q?=E5=8F=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - AiPlatformEnum 新增 ORCA_ROUTER 平台条目(OpenAI 兼容,openAiUrl https://api.orcarouter.ai/v1) - ChatModelServiceImpl 平台 switch 新增 case ORCA_ROUTER,复用 OpenAI 兼容聊天模型构建 - EmbeddingServiceImpl 平台 switch 新增 case "OrcaRouter",复用 OpenAI 兼容向量化模型构建 - 模型市场/我的模型前端 urlList 新增 OrcaRouter(官网 https://www.orcarouter.ai 获取 API KEY) - ai_model_platform 字典 latest初始化.sql / change.sql 新增 OrcaRouter 数据行 OrcaRouter 是兼容 OpenAI 的 LLM 路由网关,可在模型市场新增 OrcaRouter 平台后直接使用。 --- .../tech/qiantong/qknow/ai/enums/model/AiPlatformEnum.java | 1 + .../qiantong/qknow/ai/service/impl/ChatModelServiceImpl.java | 1 + .../qiantong/qknow/ai/service/impl/EmbeddingServiceImpl.java | 1 + qknow-ui/src/views/ai/modelMarket/index.vue | 5 +++++ qknow-ui/src/views/ai/myModel/index.vue | 5 +++++ sql/mysql/change.sql | 1 + "sql/mysql/latest\345\210\235\345\247\213\345\214\226.sql" | 1 + 7 files changed, 15 insertions(+) diff --git a/qknow-framework/qknow-ai/src/main/java/tech/qiantong/qknow/ai/enums/model/AiPlatformEnum.java b/qknow-framework/qknow-ai/src/main/java/tech/qiantong/qknow/ai/enums/model/AiPlatformEnum.java index c1709aad..5aa2681e 100644 --- a/qknow-framework/qknow-ai/src/main/java/tech/qiantong/qknow/ai/enums/model/AiPlatformEnum.java +++ b/qknow-framework/qknow-ai/src/main/java/tech/qiantong/qknow/ai/enums/model/AiPlatformEnum.java @@ -58,6 +58,7 @@ public enum AiPlatformEnum { MIDJOURNEY("Midjourney", "Midjourney", "","",""), // Midjourney SUNO("Suno", "Suno", "","",""), // Suno AI GROK("Grok", "Grok", "","",""), // Grok + ORCA_ROUTER("OrcaRouter", "OrcaRouter", "","OpenAI 兼容的 LLM 路由网关,OrcaRouter 提供的模型。","https://api.orcarouter.ai/v1"), // OrcaRouter ; diff --git a/qknow-framework/qknow-ai/src/main/java/tech/qiantong/qknow/ai/service/impl/ChatModelServiceImpl.java b/qknow-framework/qknow-ai/src/main/java/tech/qiantong/qknow/ai/service/impl/ChatModelServiceImpl.java index 58113b01..4504e584 100644 --- a/qknow-framework/qknow-ai/src/main/java/tech/qiantong/qknow/ai/service/impl/ChatModelServiceImpl.java +++ b/qknow-framework/qknow-ai/src/main/java/tech/qiantong/qknow/ai/service/impl/ChatModelServiceImpl.java @@ -70,6 +70,7 @@ public class ChatModelServiceImpl implements IChatModelService { case TONG_YI -> chatModel = this.getDashScopeChatModel(apiKey, modelName); case OLLAMA -> chatModel = this.getOllamaChatModel(baseUrl, modelName); case DEEP_SEEK -> chatModel = this.getDeepSeekChatModel(apiKey, modelName); + case ORCA_ROUTER -> chatModel = this.getOpenAiChatModel(baseUrl, apiKey, modelName); default -> throw new ServiceException("暂时不支持该平台"); } return chatModel; diff --git a/qknow-framework/qknow-ai/src/main/java/tech/qiantong/qknow/ai/service/impl/EmbeddingServiceImpl.java b/qknow-framework/qknow-ai/src/main/java/tech/qiantong/qknow/ai/service/impl/EmbeddingServiceImpl.java index feadc0a9..0d91af06 100644 --- a/qknow-framework/qknow-ai/src/main/java/tech/qiantong/qknow/ai/service/impl/EmbeddingServiceImpl.java +++ b/qknow-framework/qknow-ai/src/main/java/tech/qiantong/qknow/ai/service/impl/EmbeddingServiceImpl.java @@ -67,6 +67,7 @@ public class EmbeddingServiceImpl implements IEmbeddingService { case "OpenAI" -> embeddingModel = this.getOpenAiModel(baseUrl, apiKey, modelName); case "TongYi" -> embeddingModel = this.getDashScopeModel(apiKey, modelName); case "Ollama" -> embeddingModel = this.getOllamaModel(baseUrl, modelName); + case "OrcaRouter" -> embeddingModel = this.getOpenAiModel(baseUrl, apiKey, modelName); default -> throw new ServiceException("暂时不支持该平台"); } diff --git a/qknow-ui/src/views/ai/modelMarket/index.vue b/qknow-ui/src/views/ai/modelMarket/index.vue index 04084a73..eaf41e67 100644 --- a/qknow-ui/src/views/ai/modelMarket/index.vue +++ b/qknow-ui/src/views/ai/modelMarket/index.vue @@ -189,6 +189,11 @@ key: 'Ollama', keyUrl: '', desc: '123' + }, + { + key: 'OrcaRouter', + keyUrl: 'https://www.orcarouter.ai', + desc: '从 OrcaRouter 获取 API KEY' } ]); // 列显隐信息 diff --git a/qknow-ui/src/views/ai/myModel/index.vue b/qknow-ui/src/views/ai/myModel/index.vue index dd635cf3..afc6f49a 100644 --- a/qknow-ui/src/views/ai/myModel/index.vue +++ b/qknow-ui/src/views/ai/myModel/index.vue @@ -183,6 +183,11 @@ key: 'Ollama', keyUrl: '', desc: '123' + }, + { + key: 'OrcaRouter', + keyUrl: 'https://www.orcarouter.ai', + desc: '从 OrcaRouter 获取 API KEY' } ]); // 列显隐信息 diff --git a/sql/mysql/change.sql b/sql/mysql/change.sql index 455b1aae..fdeafd8d 100644 --- a/sql/mysql/change.sql +++ b/sql/mysql/change.sql @@ -220,6 +220,7 @@ INSERT INTO `system_dict_data` VALUES (162, 3, '通义千问', 'TongYi', 'ai_mod INSERT INTO `system_dict_data` VALUES (163, 2, 'Ollama', 'Ollama', 'ai_model_platform', NULL, 'default', 'N', '0', '吴同', '2026-04-24 10:01:38', '吴同', '2026-04-24 10:01:38', NULL); INSERT INTO `system_dict_data` VALUES (164, 3, '已配置', '2', 'ai_apikey_status', NULL, 'default', 'N', '0', '吴同', '2026-04-24 10:01:38', '吴同', '2026-04-24 10:01:38', NULL); INSERT INTO `system_dict_data` VALUES (172, 4, 'OpenAI', 'OpenAI', 'ai_model_platform', NULL, 'default', 'N', '0', '吴同', '2026-04-21 13:57:05', '吴同', '2026-04-21 13:57:05', NULL); +INSERT INTO `system_dict_data` VALUES (187, 5, 'OrcaRouter', 'OrcaRouter', 'ai_model_platform', NULL, 'default', 'N', '0', '吴同', '2026-08-17 10:00:00', '', NULL, NULL); -- v2.0.2版本change.sql diff --git "a/sql/mysql/latest\345\210\235\345\247\213\345\214\226.sql" "b/sql/mysql/latest\345\210\235\345\247\213\345\214\226.sql" index 46331864..94ea1e23 100644 --- "a/sql/mysql/latest\345\210\235\345\247\213\345\214\226.sql" +++ "b/sql/mysql/latest\345\210\235\345\247\213\345\214\226.sql" @@ -2865,6 +2865,7 @@ INSERT INTO `system_dict_data` VALUES (162, 3, '通义千问', 'TongYi', 'ai_mod INSERT INTO `system_dict_data` VALUES (163, 2, 'Ollama', 'Ollama', 'ai_model_platform', NULL, 'default', 'N', '0', '吴同', '2026-04-24 10:01:38', '吴同', '2026-04-24 10:01:38', NULL); INSERT INTO `system_dict_data` VALUES (164, 3, '已配置', '2', 'ai_apikey_status', NULL, 'default', 'N', '0', '吴同', '2026-04-24 10:01:38', '吴同', '2026-04-24 10:01:38', NULL); INSERT INTO `system_dict_data` VALUES (172, 4, 'OpenAI', 'OpenAI', 'ai_model_platform', NULL, 'default', 'N', '0', '吴同', '2026-04-21 13:57:05', '吴同', '2026-04-21 13:57:05', NULL); +INSERT INTO `system_dict_data` VALUES (187, 5, 'OrcaRouter', 'OrcaRouter', 'ai_model_platform', NULL, 'default', 'N', '0', '吴同', '2026-08-17 10:00:00', '', NULL, NULL); INSERT INTO `system_dict_data` VALUES (173, 1, '启用', 'true', 'kmc_know_valid', 'enabled', 'default', 'N', '0', '吴同', '2026-04-21 13:57:05', '吴同', '2026-05-07 14:14:41', NULL); INSERT INTO `system_dict_data` VALUES (175, 1, '工作流', '0', 'kg_bot_type', NULL, 'primary', 'N', '0', '吴同', '2026-05-07 16:47:34', '', NULL, NULL); INSERT INTO `system_dict_data` VALUES (176, 2, 'Chatflow', '1', 'kg_bot_type', NULL, 'primary', 'N', '0', '吴同', '2026-05-07 16:47:34', '', NULL, NULL); -- Gitee