feat: 完成用量统计功能模块

This commit is contained in:
ccnetcore
2025-06-27 22:13:26 +08:00
parent 96e275efa6
commit 01a3c81359
20 changed files with 281 additions and 98 deletions

View File

@@ -1,7 +1,10 @@
using SqlSugar;
using Mapster;
using SqlSugar;
using Volo.Abp.Domain.Entities.Auditing;
using Yi.Framework.AiHub.Domain.Entities.ValueObjects;
using Yi.Framework.AiHub.Domain.Shared.Dtos;
namespace Yi.Framework.AiHub.Domain.Entities;
namespace Yi.Framework.AiHub.Domain.Entities.Chat;
[SugarTable("Ai_Message")]
[SugarIndex($"index_{{table}}_{nameof(UserId)}_{nameof(SessionId)}",
@@ -14,21 +17,32 @@ public class MessageAggregateRoot : FullAuditedAggregateRoot<Guid>
{
}
public MessageAggregateRoot(Guid userId, Guid sessionId, string content, string role, string modelId)
public MessageAggregateRoot(Guid userId, Guid sessionId, string content, string role, string modelId,
TokenUsage? tokenUsage)
{
UserId = userId;
SessionId = sessionId;
Content = content;
Role = role;
ModelId = modelId;
if (tokenUsage is not null)
{
this.TokenUsage = tokenUsage.Adapt<TokenUsageValueObject>();
}
}
public Guid UserId { get; set; }
public Guid SessionId { get; set; }
[SugarColumn(ColumnDataType = StaticConfig.CodeFirst_BigString)]
public string Content { get; set; }
public string Role { get; set; }
public decimal DeductCost { get; set; }
public decimal TotalTokens { get; set; }
public string ModelId { get; set; }
public string Remark { get; set; }
public string? Remark { get; set; }
[SugarColumn(IsOwnsOne = true)] public TokenUsageValueObject TokenUsage { get; set; }
}

View File

@@ -1,7 +1,7 @@
using SqlSugar;
using Volo.Abp.Domain.Entities.Auditing;
namespace Yi.Framework.AiHub.Domain.Entities;
namespace Yi.Framework.AiHub.Domain.Entities.Chat;
[SugarTable("Ai_Session")]
[SugarIndex($"index_{{table}}_{nameof(UserId)}",$"{nameof(UserId)}", OrderByType.Asc)]

View File

@@ -2,7 +2,7 @@
using Volo.Abp.Domain.Entities.Auditing;
using Yi.Framework.Core.Data;
namespace Yi.Framework.AiHub.Domain.Entities;
namespace Yi.Framework.AiHub.Domain.Entities.Model;
/// <summary>
/// ai应用

View File

@@ -1,9 +1,8 @@
using SqlSugar;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Domain.Entities.Auditing;
using Yi.Framework.Core.Data;
namespace Yi.Framework.AiHub.Domain.Entities;
namespace Yi.Framework.AiHub.Domain.Entities.Model;
/// <summary>
/// ai模型定义

View File

@@ -9,6 +9,16 @@ namespace Yi.Framework.AiHub.Domain.Entities;
[SugarTable("Ai_UsageStatistics")]
public class UsageStatisticsAggregateRoot : FullAuditedAggregateRoot<Guid>
{
public UsageStatisticsAggregateRoot()
{
}
public UsageStatisticsAggregateRoot(Guid userId, string modelId)
{
UserId = userId;
ModelId = modelId;
}
/// <summary>
/// 用户id
/// </summary>
@@ -19,18 +29,34 @@ public class UsageStatisticsAggregateRoot : FullAuditedAggregateRoot<Guid>
/// </summary>
public string ModelId { get; set; }
/// <summary>
/// 输入使用token使用
/// </summary>
public decimal InputTokens { get; set; }
/// <summary>
/// 输出使用token使用
/// </summary>
public decimal OutputTokens { get; set; }
/// <summary>
/// 对话次数
/// </summary>
public int Number { get; set; }
public int UsageTotalNumber { get; set; }
/// <summary>
/// 使用输出token总数
/// </summary>
public int UsageOutputTokenCount { get; set; }
/// <summary>
/// 使用输入总数
/// </summary>
public int UsageInputTokenCount { get; set; }
/// <summary>
/// 总token使用数量
/// </summary>
public int TotalTokenCount { get; set; }
/// <summary>
/// 新增一次聊天统计
/// </summary>
public void AddOnceChat(int inputTokenCount, int outputTokenCount)
{
UsageTotalNumber += 1;
UsageOutputTokenCount += outputTokenCount;
UsageInputTokenCount += inputTokenCount;
TotalTokenCount += (outputTokenCount + inputTokenCount);
}
}

View File

@@ -0,0 +1,10 @@
namespace Yi.Framework.AiHub.Domain.Entities.ValueObjects;
public class TokenUsageValueObject
{
public int OutputTokenCount { get; set; }
public int InputTokenCount { get; set; }
public int TotalTokenCount { get; set; }
}