diff --git a/VideoAnalysis/Components/Pages/VideoTaskPage.razor.cs b/VideoAnalysis/Components/Pages/VideoTaskPage.razor.cs index 12c0952..863725e 100644 --- a/VideoAnalysis/Components/Pages/VideoTaskPage.razor.cs +++ b/VideoAnalysis/Components/Pages/VideoTaskPage.razor.cs @@ -67,6 +67,8 @@ namespace Learn.VideoAnalysis.Components.Pages private static System.Timers.Timer _timer; public void StartTimer(Object source, System.Timers.ElapsedEventArgs e) { + if (_dataSource is null) + return; foreach (var item in _dataSource) { if (!string.IsNullOrEmpty(item.ErrorMessage) || item.LastEnum == RedisChannelEnum.EndTask) diff --git a/VideoAnalysis/Controllers/Dto/ApiDto.cs b/VideoAnalysis/Controllers/Dto/ApiDto.cs index 6938d22..5c14576 100644 --- a/VideoAnalysis/Controllers/Dto/ApiDto.cs +++ b/VideoAnalysis/Controllers/Dto/ApiDto.cs @@ -25,9 +25,9 @@ namespace Learn.VideoAnalysis.Controllers.Dto /// ///回调Api地址 /// - [Required(ErrorMessage = "回调Api地址是必填项")] - [Url(ErrorMessage = "请输入有效的 URL")] - public string CallBackUrl { get; set; } = string.Empty; + //[Required(ErrorMessage = "回调Api地址是必填项")] + //[Url(ErrorMessage = "请输入有效的 URL")] + //public string CallBackUrl { get; set; } = string.Empty; } diff --git a/VideoAnalysisCore/AICore/ChatGPT/KIMI/KIMI_GPT.cs b/VideoAnalysisCore/AICore/ChatGPT/KIMI/KIMI_GPT.cs index 9d1d5f5..a51e65e 100644 --- a/VideoAnalysisCore/AICore/ChatGPT/KIMI/KIMI_GPT.cs +++ b/VideoAnalysisCore/AICore/ChatGPT/KIMI/KIMI_GPT.cs @@ -14,6 +14,7 @@ using VideoAnalysisCore.Enum; using System.Reflection; using FreeRedis; using VideoAnalysisCore.Model.Dto; +using Newtonsoft.Json; namespace VideoAnalysisCore.AICore.ChatGPT.KIMI { @@ -54,7 +55,7 @@ namespace VideoAnalysisCore.AICore.ChatGPT.KIMI criteriaBuilder.Append(item.Id); criteriaBuilder.Append(":"); criteriaBuilder.Append(item.NamePrompt); - criteriaBuilder.Append("结果类型 bool|"); + criteriaBuilder.Append("结果类型 int (1-10分 5分不合格 10分满分)|"); } //拼接枚举提问 foreach (var value in System.Enum.GetValues(typeof(QuestionTypeEnum))) @@ -95,17 +96,20 @@ namespace VideoAnalysisCore.AICore.ChatGPT.KIMI }; var chatResp = await moonshotClient.Chat(chatRep); if (chatResp is null || chatResp.error != null) - throw new Exception($"KIMI模型返回异常 Chat 请求参数: {JsonSerializer.Serialize(chatRep)} " + - $" chatResp {JsonSerializer.Serialize(chatResp)}"); + throw new Exception($"KIMI模型返回异常 Chat 请求参数: {System.Text.Json.JsonSerializer.Serialize(chatRep)} " + + $" chatResp {System.Text.Json.JsonSerializer.Serialize(chatResp)}"); var chatResContent = chatResp?.choices.FirstOrDefault()?.message.content; + if (chatResContent is null) + throw new Exception("KIMIGPT返回message无效结果"); - var questionRes = JsonSerializer.Deserialize(chatResContent); + var questionRes = JsonConvert.DeserializeObject(chatResContent); var gptRes = new CallGPTRes(captions); if (questionRes is null) throw new Exception("KIMIGPT返回无效结果"); //处理 ai问答提问 var arr1 = questionRes.Where(s => s.问题编号 < 100); - var arr2 = questionRes.Where(s => s.问题编号 >= 100).ToDictionary(s => s.问题编号); + var arr2 = questionRes.Where(s => s.问题编号 >= 100) + .ToDictionary(s => s.问题编号); //AI综合评估 var criteriaDic = criteriaArr.ToDictionary(s => s.Id); gptRes.Assessment = new AssessmentDto() @@ -122,8 +126,9 @@ namespace VideoAnalysisCore.AICore.ChatGPT.KIMI .Select(s => new CourseCriteria() { Id = criteriaDic[s.问题编号].Id, - ImprovedMethods = criteriaDic[s.问题编号].ImprovedMethods, - Prompt = criteriaDic[s.问题编号].ImprovedMethods, + //ImprovedMethods = criteriaDic[s.问题编号].ImprovedMethods, + Analyze = s.问题解释 ?? string.Empty, + Prompt = criteriaDic[s.问题编号].Advantage, }).ToArray(), }; @@ -140,7 +145,16 @@ namespace VideoAnalysisCore.AICore.ChatGPT.KIMI End = double.Parse(s.key.Split(":")[2]??0.ToString()), Content = s.value, }); - //todo 分析上课时间段情况 分析 独立学习 小组合作 随堂练习等情况 + //分析上课时间段情况 分析 独立学习 小组合作 随堂练习等情况 + var extraTimeBase = arr2[(int)QuestionTypeEnum.额外课堂情况] + .结果.ToObject[]>()?.Select(s => + new TimeBase + { + Start = double.Parse(s.key.Split(":")[1] ?? 0.ToString()), + End = double.Parse(s.key.Split(":")[2] ?? 0.ToString()), + Content = s.value, + }); + var tId = long.Parse(task); diff --git a/VideoAnalysisCore/Common/RedisExpand.cs b/VideoAnalysisCore/Common/RedisExpand.cs index eefeac1..60d5455 100644 --- a/VideoAnalysisCore/Common/RedisExpand.cs +++ b/VideoAnalysisCore/Common/RedisExpand.cs @@ -192,15 +192,16 @@ namespace VideoAnalysisCore.Common Console.WriteLine(DateTime.Now.ToString("HH:mm:ss") + "-> " + key + " " + taskId); if (action is not null) { - var tID = long.Parse(taskId); - Redis.HMSet(RedisExpandKey.Task(taskId), "LastEnum", key); - Redis.HMSet(RedisExpandKey.Task(taskId), "Progress", 0); - await DbScoped.SugarScope.Updateable() - .SetColumns(it => it.LastEnum == key) - .Where(it => it.Id == tID) - .ExecuteCommandAsync(); try { + var tID = long.Parse(taskId); + Redis.HMSet(RedisExpandKey.Task(taskId), "LastEnum", key); + Redis.HMSet(RedisExpandKey.Task(taskId), "Progress", 0); + await DbScoped.SugarScope.Updateable() + .SetColumns(it => it.LastEnum == key) + .Where(it => it.Id == tID) + .ExecuteCommandAsync(); + await action(taskId); } catch (Exception ex) @@ -208,7 +209,6 @@ namespace VideoAnalysisCore.Common //执行任务时出现异常 var error = ex.Message + ex.StackTrace; await SetTaskErrorMessage(long.Parse(taskId), error); - Redis.HMSet(RedisExpandKey.Task(taskId), "Error", error); } } else diff --git a/VideoAnalysisCore/Enum/QuestionTypeEnum.cs b/VideoAnalysisCore/Enum/QuestionTypeEnum.cs index 7519d0b..868a243 100644 --- a/VideoAnalysisCore/Enum/QuestionTypeEnum.cs +++ b/VideoAnalysisCore/Enum/QuestionTypeEnum.cs @@ -11,10 +11,13 @@ namespace VideoAnalysisCore.Enum { [Display(Prompt = "分析授课中使用的高频词10个频率从高到低 结果类型[]")] - 高频词 =100, + 高频词 = 100, [Display(Prompt = "分析字幕中每5分钟的一个概览 结果类型[{key:时间段,value:概览}]")] 时间段概览 = 101, [Display(Prompt = "统计授课中教师提问类型的次数 类型[重复回答,老师追问,简单性表演,老师补充答案,表扬并补充答案] 结果类型[{key:类型,value:次数}]")] 提问类型 = 102, + + [Display(Prompt = " 分析授课中教师提到 类型[独立学习,小组合作,随堂练习]的时间段 结果类型[{key:类型,value:时间段/null}] ")] + 额外课堂情况 = 103, } } diff --git a/VideoAnalysisCore/Model/VideoTask.cs b/VideoAnalysisCore/Model/VideoTask.cs index 1cc119f..be55213 100644 --- a/VideoAnalysisCore/Model/VideoTask.cs +++ b/VideoAnalysisCore/Model/VideoTask.cs @@ -84,14 +84,14 @@ namespace VideoAnalysisCore.Model /// Chat模型分析缓存 /// [SugarColumn(ColumnName = "ChatAnalysis", ColumnDataType = "longtext", IsNullable = true)] - public string _ChatAnalysis { get; set; } = "[]"; + public string _ChatAnalysis { get; set; } = "{}"; /// /// Chat模型分析缓存 /// [SugarColumn(IsIgnore = true)] public CallGPTRes? ChatAnalysis { - get => JsonSerializer.Deserialize(_ChatAnalysis ?? "[]"); + get => JsonSerializer.Deserialize(_ChatAnalysis ?? "{}"); set => _ChatAnalysis = JsonSerializer.Serialize(value); }