diff --git a/VideoAnalysisCore/AICore/GPT/DeepSeek/DeepSeekModel.cs b/VideoAnalysisCore/AICore/GPT/DeepSeek/DeepSeekModel.cs index 6ae5c77..3460ed1 100644 --- a/VideoAnalysisCore/AICore/GPT/DeepSeek/DeepSeekModel.cs +++ b/VideoAnalysisCore/AICore/GPT/DeepSeek/DeepSeekModel.cs @@ -27,7 +27,7 @@ namespace VideoAnalysisCore.AICore.GPT.DeepSeek /// public string model { get; set; } = "deepseek-reasoner"; - public float max_tokens { get; set; } = 4000; + public float max_tokens { get; set; } = 8000; /// /// 要使用的采样温度,介于 0 和 2 之间。较高的值(如 0.8)将使输出更加随机,而较低的值(如 0.2)将使其更加集中和确定。 我们通常建议更改此项或同时更改两者。top_p /// 默认为 1 diff --git a/VideoAnalysisCore/AICore/GPT/DeepSeek/DeepSeek_GPT.cs b/VideoAnalysisCore/AICore/GPT/DeepSeek/DeepSeek_GPT.cs index c4cb047..e257259 100644 --- a/VideoAnalysisCore/AICore/GPT/DeepSeek/DeepSeek_GPT.cs +++ b/VideoAnalysisCore/AICore/GPT/DeepSeek/DeepSeek_GPT.cs @@ -254,50 +254,42 @@ namespace VideoAnalysisCore.AICore.GPT.DeepSeek /// /// private async Task Analytics(List questionRes, VideoTask taskInfo, - SenseVoiceRes[] captionsArr, string sections) + TotalCaptionsDto captions, string sections) { - var lastTime = 0; - var endTime = 0; - var maxVideoTime = captionsArr?.LastOrDefault()?.End ?? 0; - var subject = taskInfo.Subject.ToString(); - var timeSpan = (int)(maxVideoTime * 0.5); - while (endTime + 60 < maxVideoTime) + var tryCount = 10; + while (tryCount-->10) { try { - endTime = lastTime + timeSpan; - var nowCaptionStr = string.Join('|', captionsArr - .Where(s => s.Text != "。") - .Where((s, i) => s.Start > lastTime && s.End < endTime) - .Select(s => s.Start + ":" + s.Text)); var keyFrameArr = string.IsNullOrEmpty(taskInfo?.PPTVideoCode) ? string.Empty : $"视频授课内容发生了变化的时间节点{taskInfo.PPTKeyFrame},授课阶段应当在附近时间发生变化。"; var resFormat = """[{"StartTime":开始秒(number),"EndTime":结束秒(number),"Stage":阶段(string),"Theme":主题(string),"Content":内容总结(string)}]"""; + + var exerciseClass = taskInfo?.VideoType == AttachmentsInfoType.Review + ? $"本堂课是习题课,每个阶段因当是不同得例题讲解片段,并且所有的授课阶段都视为例题精讲。" + : $"完整的课堂标准流程包含以下5个阶段:课程引入/新知讲解/例题精讲/课堂练习/知识总结。" + + $"通过授课阶段的主要讲解内容分析出对应的授课阶段内容总结。" + + $"通过生成的内容总结分析出对应的授课阶段主题。 "; + //$"请注意 本次分析的视频字幕只是其中一部分 不需要分析出所有类型的授课阶段。"; var postMessages = - $"请通过视频字幕内容分析出视频中{subject}课堂的授课阶段。" + + $"请通过视频字幕内容分析出视频中{taskInfo.Subject}课堂的授课阶段。" + $"课堂内容与{sections}章节相关。" + $"{keyFrameArr}" + - $"完整的课堂标准流程包含以下5个阶段:课程引入/新知讲解/例题精讲/课堂练习/知识总结。" + - $"通过授课阶段的主要讲解内容分析出对应的授课阶段内容总结。" + - $"通过生成的内容总结分析出对应的授课阶段主题。 " + - $"请注意 本次分析的视频字幕只是其中一部分 不需要分析出所有类型的授课阶段。" + + $"{exerciseClass}" + $"最后请检查每个授课阶段的时长,不允许出现超出800秒或者低于50秒的授课阶段。" + $"输出内容只返回json格式({resFormat})" + $"字幕格式(开始秒:内容|下一段字幕).以下是包含时间的视频字幕文本。" + - $"字幕列表 {nowCaptionStr} 字幕结束!"; + $"字幕列表 {captions.Captions} 字幕结束!"; - Console.WriteLine(DateTime.Now + $"=>{taskInfo.Id.ToString()}.开始分析视频内容 {lastTime}~{endTime}"); + Console.WriteLine(DateTime.Now + $"=>{taskInfo.Id.ToString()}.开始分析视频内容 {tryCount}"); questionRes.AddRange(await ChatAsync(taskInfo.Id.ToString(), postMessages, "分析字幕")); - lastTime = (int)questionRes.Last().EndTime.Value - (lastTime == 0 ? 0 : 30); } catch (Exception ex) { - Console.WriteLine(DateTime.Now + $"=>分析视频内容失败 {lastTime}~{endTime}"); + Console.WriteLine(DateTime.Now + $"=>{taskInfo.Id.ToString()}分析视频内容失败 {tryCount}"); Console.WriteLine(DateTime.Now + ex.Message); Console.WriteLine(DateTime.Now + ex.StackTrace); - endTime = lastTime - timeSpan; - } } } @@ -501,7 +493,7 @@ namespace VideoAnalysisCore.AICore.GPT.DeepSeek { questionRes = new List(); //视频字幕分析 - await Analytics(questionRes, taskInfo, captionsArr, sections); + await Analytics(questionRes, taskInfo, captions, sections); if (questionRes.Count == 0) continue; //处理分段 知识点 diff --git a/VideoAnalysisCore/Common/AppCommon.cs b/VideoAnalysisCore/Common/AppCommon.cs index 0b7ee2f..bbf2d48 100644 --- a/VideoAnalysisCore/Common/AppCommon.cs +++ b/VideoAnalysisCore/Common/AppCommon.cs @@ -246,8 +246,8 @@ namespace VideoAnalysisCore.Common //stringBuilder.Append(":"); stringBuilder.Append((int)item.Key.Start); stringBuilder.Append(":"); - stringBuilder.Append((int)item.Key.End); - stringBuilder.Append(":"); + //stringBuilder.Append((int)item.Key.End); + //stringBuilder.Append(":"); stringBuilder.Append(item.Key.Text); stringBuilder.Append("|"); }