From 691a1e50f07e6ae2758e19edf1508b79787e9dfa Mon Sep 17 00:00:00 2001 From: ccnetcore Date: Sun, 3 Aug 2025 21:32:54 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=E6=9C=AA=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E7=94=A8=E6=88=B7=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Services/AiChatService.cs | 2 +- .../Entities/Chat/MessageAggregateRoot.cs | 4 +-- .../Entities/UsageStatisticsAggregateRoot.cs | 4 +-- .../Managers/AiGateWayManager.cs | 34 +++++++++---------- .../Managers/AiMessageManager.cs | 4 +-- .../Managers/UsageStatisticsManager.cs | 4 +-- 6 files changed, 25 insertions(+), 27 deletions(-) diff --git a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application/Services/AiChatService.cs b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application/Services/AiChatService.cs index be8e1dce..a33a9ccc 100644 --- a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application/Services/AiChatService.cs +++ b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application/Services/AiChatService.cs @@ -94,7 +94,7 @@ public class AiChatService : ApplicationService /// /// /// - public async Task PostSendAsync([FromBody] ThorChatCompletionsRequest input, [FromRoute] Guid sessionId, + public async Task PostSendAsync([FromBody] ThorChatCompletionsRequest input, [FromRoute] Guid? sessionId, CancellationToken cancellationToken) { //除了免费模型,其他的模型都要校验 diff --git a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Entities/Chat/MessageAggregateRoot.cs b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Entities/Chat/MessageAggregateRoot.cs index 752621b4..5d863c1b 100644 --- a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Entities/Chat/MessageAggregateRoot.cs +++ b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Entities/Chat/MessageAggregateRoot.cs @@ -19,7 +19,7 @@ public class MessageAggregateRoot : FullAuditedAggregateRoot { } - public MessageAggregateRoot(Guid userId, Guid? sessionId, string content, string role, string modelId, + public MessageAggregateRoot(Guid? userId, Guid? sessionId, string content, string role, string modelId, ThorUsageResponse? tokenUsage) { UserId = userId; @@ -48,7 +48,7 @@ public class MessageAggregateRoot : FullAuditedAggregateRoot this.MessageType = sessionId is null ? MessageTypeEnum.Api : MessageTypeEnum.Web; } - public Guid UserId { get; set; } + public Guid? UserId { get; set; } public Guid? SessionId { get; set; } [SugarColumn(ColumnDataType = StaticConfig.CodeFirst_BigString)] diff --git a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Entities/UsageStatisticsAggregateRoot.cs b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Entities/UsageStatisticsAggregateRoot.cs index ad0ad586..6f9e6aa3 100644 --- a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Entities/UsageStatisticsAggregateRoot.cs +++ b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Entities/UsageStatisticsAggregateRoot.cs @@ -13,7 +13,7 @@ public class UsageStatisticsAggregateRoot : FullAuditedAggregateRoot { } - public UsageStatisticsAggregateRoot(Guid userId, string modelId) + public UsageStatisticsAggregateRoot(Guid? userId, string modelId) { UserId = userId; ModelId = modelId; @@ -22,7 +22,7 @@ public class UsageStatisticsAggregateRoot : FullAuditedAggregateRoot /// /// 用户id /// - public Guid UserId { get; set; } + public Guid? UserId { get; set; } /// /// 哪个模型 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 4f9c3425..70f47354 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 @@ -242,25 +242,23 @@ public class AiGateWayManager : DomainService await outputTask; - if (userId is not null) - { - await _aiMessageManager.CreateUserMessageAsync(userId.Value, sessionId, - new MessageInputDto - { - Content = request.Messages?.LastOrDefault()?.Content ?? string.Empty, - ModelId = request.Model, - TokenUsage = tokenUsage, - }); - await _aiMessageManager.CreateSystemMessageAsync(userId.Value, sessionId, - new MessageInputDto - { - Content = backupSystemContent.ToString(), - ModelId = request.Model, - TokenUsage = tokenUsage - }); + await _aiMessageManager.CreateUserMessageAsync(userId, sessionId, + new MessageInputDto + { + Content = request.Messages?.LastOrDefault()?.Content ?? string.Empty, + ModelId = request.Model, + TokenUsage = tokenUsage, + }); - await _usageStatisticsManager.SetUsageAsync(userId.Value, request.Model, tokenUsage); - } + await _aiMessageManager.CreateSystemMessageAsync(userId, sessionId, + new MessageInputDto + { + Content = backupSystemContent.ToString(), + ModelId = request.Model, + TokenUsage = tokenUsage + }); + + await _usageStatisticsManager.SetUsageAsync(userId, request.Model, tokenUsage); } } \ No newline at end of file diff --git a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Managers/AiMessageManager.cs b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Managers/AiMessageManager.cs index 38c14605..df8e7586 100644 --- a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Managers/AiMessageManager.cs +++ b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Managers/AiMessageManager.cs @@ -23,7 +23,7 @@ public class AiMessageManager : DomainService /// /// /// - public async Task CreateSystemMessageAsync(Guid userId, Guid? sessionId, MessageInputDto input) + public async Task CreateSystemMessageAsync(Guid? userId, Guid? sessionId, MessageInputDto input) { input.Role = "system"; var message = new MessageAggregateRoot(userId, sessionId, input.Content, input.Role, input.ModelId,input.TokenUsage); @@ -37,7 +37,7 @@ public class AiMessageManager : DomainService /// /// /// - public async Task CreateUserMessageAsync(Guid userId, Guid? sessionId, MessageInputDto input) + public async Task CreateUserMessageAsync(Guid? userId, Guid? sessionId, MessageInputDto input) { input.Role = "user"; var message = new MessageAggregateRoot(userId, sessionId, input.Content, input.Role, input.ModelId,input.TokenUsage); diff --git a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Managers/UsageStatisticsManager.cs b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Managers/UsageStatisticsManager.cs index 66ae6f65..ef6613c3 100644 --- a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Managers/UsageStatisticsManager.cs +++ b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Managers/UsageStatisticsManager.cs @@ -18,7 +18,7 @@ public class UsageStatisticsManager : DomainService private IDistributedLockProvider DistributedLock => LazyServiceProvider.LazyGetRequiredService(); - public async Task SetUsageAsync(Guid userId, string modelId, ThorUsageResponse? tokenUsage) + public async Task SetUsageAsync(Guid? userId, string modelId, ThorUsageResponse? tokenUsage) { long inputTokenCount = tokenUsage?.PromptTokens ?? tokenUsage.InputTokens @@ -28,7 +28,7 @@ public class UsageStatisticsManager : DomainService ?? tokenUsage.OutputTokens ?? 0; - await using (await DistributedLock.AcquireLockAsync($"UsageStatistics:{userId.ToString()}")) + await using (await DistributedLock.AcquireLockAsync($"UsageStatistics:{userId?.ToString()}")) { var entity = await _repository._DbQueryable.FirstAsync(x => x.UserId == userId && x.ModelId == modelId); //存在数据,更细