From bd5cf303492c820601ed5c9af1800a1643467896 Mon Sep 17 00:00:00 2001 From: ccnetcore Date: Fri, 13 Feb 2026 18:35:36 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E7=BB=9F=E4=B8=80=E6=A8=A1?= =?UTF-8?q?=E5=9E=8B=E5=89=8D=E7=BC=80=E5=A4=84=E7=90=86=E5=B9=B6=E8=A7=84?= =?UTF-8?q?=E8=8C=83=E7=BD=91=E5=85=B3=E5=B1=82=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 抽取并统一使用 ModelConst 处理模型前缀,移除重复的 yi- 前缀判断代码 - 网关层模型 ID 规范化逻辑集中,提升可维护性 - 修复常量文件缺失换行问题 - 前端版本号调整为 3.7.1 --- .../Consts/AiHubConst.cs | 2 +- .../Consts/ModelConst.cs | 47 +++++++++++ .../Managers/AiGateWayManager.cs | 77 ++++--------------- Yi.Ai.Vue3/src/config/version.ts | 2 +- 4 files changed, 66 insertions(+), 62 deletions(-) create mode 100644 Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain.Shared/Consts/ModelConst.cs diff --git a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain.Shared/Consts/AiHubConst.cs b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain.Shared/Consts/AiHubConst.cs index c1f3c416..7eea51dd 100644 --- a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain.Shared/Consts/AiHubConst.cs +++ b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain.Shared/Consts/AiHubConst.cs @@ -3,4 +3,4 @@ public class AiHubConst { public const string VipRole = "YiXinAi-Vip"; -} \ No newline at end of file +} diff --git a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain.Shared/Consts/ModelConst.cs b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain.Shared/Consts/ModelConst.cs new file mode 100644 index 00000000..c88d6749 --- /dev/null +++ b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain.Shared/Consts/ModelConst.cs @@ -0,0 +1,47 @@ +namespace Yi.Framework.AiHub.Domain.Shared.Consts; + +public class ModelConst +{ + /// + /// 需要移除的模型前缀列表 + /// + private static readonly List ModelPrefixesToRemove = + [ + "yi-", + "ma-" + ]; + + /// + /// 获取模型ID的前缀(如果存在) + /// + private static string? GetModelPrefix(string? modelId) + { + if (string.IsNullOrEmpty(modelId)) return null; + + return ModelPrefixesToRemove.FirstOrDefault(prefix => + modelId!.StartsWith(prefix, StringComparison.OrdinalIgnoreCase)); + } + + /// + /// 移除模型ID的前缀,返回标准模型ID + /// + public static string RemoveModelPrefix(string? modelId) + { + if (string.IsNullOrEmpty(modelId)) return string.Empty; + + var prefix = GetModelPrefix(modelId); + if (prefix != null) + { + return modelId[prefix.Length..]; + } + return modelId; + } + + /// + /// 处理模型ID,如有前缀则移除并返回新字符串 + /// + public static string ProcessModelId(string? modelId) + { + return RemoveModelPrefix(modelId); + } +} diff --git a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Managers/AiGateWayManager.cs b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Managers/AiGateWayManager.cs index 38938708..5e83745e 100644 --- a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Managers/AiGateWayManager.cs +++ b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Managers/AiGateWayManager.cs @@ -15,6 +15,7 @@ using Yi.Framework.AiHub.Domain.AiGateWay.Exceptions; using Yi.Framework.AiHub.Domain.Entities.Chat; using Yi.Framework.AiHub.Domain.Entities.Model; using Yi.Framework.AiHub.Domain.Shared.Consts; +using ModelConst = Yi.Framework.AiHub.Domain.Shared.Consts.ModelConst; using Yi.Framework.AiHub.Domain.Shared.Dtos; using Yi.Framework.AiHub.Domain.Shared.Dtos.Anthropic; using Yi.Framework.AiHub.Domain.Shared.Dtos.Gemini; @@ -97,12 +98,8 @@ public class AiGateWayManager : DomainService throw new UserFriendlyException($"【{modelId}】模型当前版本【{modelApiType}】格式不支持"); } - // ✅ 统一处理 yi- 后缀(网关层模型规范化) - if (!string.IsNullOrEmpty(aiModelDescribe.ModelId) && - aiModelDescribe.ModelId.StartsWith("yi-", StringComparison.OrdinalIgnoreCase)) - { - aiModelDescribe.ModelId = aiModelDescribe.ModelId[3..]; - } + // ✅ 统一处理模型前缀(网关层模型规范化) + aiModelDescribe.ModelId = ModelConst.RemoveModelPrefix(aiModelDescribe.ModelId); return aiModelDescribe; } @@ -134,11 +131,7 @@ public class AiGateWayManager : DomainService LazyServiceProvider.GetRequiredKeyedService(modelDescribe.HandlerName); var sourceModelId = request.Model; - if (!string.IsNullOrEmpty(request.Model) && - request.Model.StartsWith("yi-", StringComparison.OrdinalIgnoreCase)) - { - request.Model = request.Model[3..]; - } + request.Model = ModelConst.ProcessModelId(request.Model); var data = await chatService.CompleteChatAsync(modelDescribe, request, cancellationToken); data.SupplementalMultiplier(modelDescribe.Multiplier); @@ -208,11 +201,7 @@ public class AiGateWayManager : DomainService LazyServiceProvider.GetRequiredKeyedService(modelDescribe.HandlerName); var sourceModelId = request.Model; - if (!string.IsNullOrEmpty(request.Model) && - request.Model.StartsWith("yi-", StringComparison.OrdinalIgnoreCase)) - { - request.Model = request.Model[3..]; - } + request.Model = ModelConst.ProcessModelId(request.Model); var completeChatResponse = chatService.CompleteChatStreamAsync(modelDescribe, request, cancellationToken); var tokenUsage = new ThorUsageResponse(); @@ -540,11 +529,7 @@ public class AiGateWayManager : DomainService var modelDescribe = await GetModelAsync(ModelApiTypeEnum.Messages, request.Model); var sourceModelId = request.Model; - if (!string.IsNullOrEmpty(request.Model) && - request.Model.StartsWith("yi-", StringComparison.OrdinalIgnoreCase)) - { - request.Model = request.Model[3..]; - } + request.Model = ModelConst.ProcessModelId(request.Model); var chatService = LazyServiceProvider.GetRequiredKeyedService(modelDescribe.HandlerName); @@ -620,11 +605,7 @@ public class AiGateWayManager : DomainService LazyServiceProvider.GetRequiredKeyedService(modelDescribe.HandlerName); var sourceModelId = request.Model; - if (!string.IsNullOrEmpty(request.Model) && - request.Model.StartsWith("yi-", StringComparison.OrdinalIgnoreCase)) - { - request.Model = request.Model[3..]; - } + request.Model = ModelConst.ProcessModelId(request.Model); var completeChatResponse = chatService.StreamChatCompletionsAsync(modelDescribe, request, cancellationToken); ThorUsageResponse? tokenUsage = new ThorUsageResponse(); @@ -744,11 +725,7 @@ public class AiGateWayManager : DomainService var chatService = LazyServiceProvider.GetRequiredKeyedService(modelDescribe.HandlerName); var sourceModelId = request.Model; - if (!string.IsNullOrEmpty(request.Model) && - request.Model.StartsWith("yi-", StringComparison.OrdinalIgnoreCase)) - { - request.Model = request.Model[3..]; - } + request.Model = ModelConst.ProcessModelId(request.Model); var data = await chatService.ResponsesAsync(modelDescribe, request, cancellationToken); @@ -820,11 +797,7 @@ public class AiGateWayManager : DomainService var chatService = LazyServiceProvider.GetRequiredKeyedService(modelDescribe.HandlerName); var sourceModelId = request.Model; - if (!string.IsNullOrEmpty(request.Model) && - request.Model.StartsWith("yi-", StringComparison.OrdinalIgnoreCase)) - { - request.Model = request.Model[3..]; - } + request.Model = ModelConst.ProcessModelId(request.Model); var completeChatResponse = chatService.ResponsesStreamAsync(modelDescribe, request, cancellationToken); ThorUsageResponse? tokenUsage = null; @@ -1164,12 +1137,8 @@ public class AiGateWayManager : DomainService response.Headers.TryAdd("Connection", "keep-alive"); var sourceModelId = modelId; - // 处理 yi- 前缀 - if (!string.IsNullOrEmpty(modelId) && - modelId.StartsWith("yi-", StringComparison.OrdinalIgnoreCase)) - { - modelId = modelId[3..]; - } + // 处理模型前缀 + modelId = ModelConst.RemoveModelPrefix(modelId); var modelDescribe = await GetModelAsync(apiType, sourceModelId); @@ -1302,12 +1271,8 @@ public class AiGateWayManager : DomainService // 提取用户最后一条消息 var userContent = request.Messages?.LastOrDefault()?.MessagesStore ?? string.Empty; - // 处理 yi- 前缀 - if (!string.IsNullOrEmpty(request.Model) && - request.Model.StartsWith("yi-", StringComparison.OrdinalIgnoreCase)) - { - request.Model = request.Model[3..]; - } + // 处理模型前缀 + request.Model = ModelConst.ProcessModelId(request.Model); var chatService = LazyServiceProvider.GetRequiredKeyedService(modelDescribe.HandlerName); var completeChatResponse = chatService.CompleteChatStreamAsync(modelDescribe, request, cancellationToken); @@ -1391,12 +1356,8 @@ public class AiGateWayManager : DomainService userContent = textContent?.Text ?? System.Text.Json.JsonSerializer.Serialize(lastMessage.Contents); } - // 处理 yi- 前缀 - if (!string.IsNullOrEmpty(request.Model) && - request.Model.StartsWith("yi-", StringComparison.OrdinalIgnoreCase)) - { - request.Model = request.Model[3..]; - } + // 处理模型前缀 + request.Model = ModelConst.ProcessModelId(request.Model); var chatService = LazyServiceProvider.GetRequiredKeyedService(modelDescribe.HandlerName); var completeChatResponse = chatService.StreamChatCompletionsAsync(modelDescribe, request, cancellationToken); @@ -1509,12 +1470,8 @@ public class AiGateWayManager : DomainService } } - // 处理 yi- 前缀 - if (!string.IsNullOrEmpty(request.Model) && - request.Model.StartsWith("yi-", StringComparison.OrdinalIgnoreCase)) - { - request.Model = request.Model[3..]; - } + // 处理模型前缀 + request.Model = ModelConst.ProcessModelId(request.Model); var chatService = LazyServiceProvider.GetRequiredKeyedService(modelDescribe.HandlerName); var completeChatResponse = chatService.ResponsesStreamAsync(modelDescribe, request, cancellationToken); diff --git a/Yi.Ai.Vue3/src/config/version.ts b/Yi.Ai.Vue3/src/config/version.ts index 953680a5..34558fcf 100644 --- a/Yi.Ai.Vue3/src/config/version.ts +++ b/Yi.Ai.Vue3/src/config/version.ts @@ -6,7 +6,7 @@ */ // 主版本号 - 修改此处即可同步更新所有地方的版本显示 -export const APP_VERSION = '3.8.0'; +export const APP_VERSION = '3.7.1'; // 应用名称 export const APP_NAME = '意心AI';