优化 AI字幕分析流程[deepseek升级]
This commit is contained in:
parent
2bdd77380c
commit
dd7e217bb2
|
|
@ -27,7 +27,7 @@ namespace VideoAnalysisCore.AICore.GPT.DeepSeek
|
|||
/// </summary>
|
||||
public string model { get; set; } = "deepseek-reasoner";
|
||||
|
||||
public float max_tokens { get; set; } = 4000;
|
||||
public float max_tokens { get; set; } = 8000;
|
||||
/// <summary>
|
||||
/// 要使用的采样温度,介于 0 和 2 之间。较高的值(如 0.8)将使输出更加随机,而较低的值(如 0.2)将使其更加集中和确定。 我们通常建议更改此项或同时更改两者。top_p
|
||||
/// <para> 默认为 1</para>
|
||||
|
|
|
|||
|
|
@ -254,50 +254,42 @@ namespace VideoAnalysisCore.AICore.GPT.DeepSeek
|
|||
/// </summary>
|
||||
/// <returns></returns>
|
||||
private async Task Analytics(List<VideoKnowRes> 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<VideoKnowRes[]>(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<VideoKnowRes>();
|
||||
//视频字幕分析
|
||||
await Analytics(questionRes, taskInfo, captionsArr, sections);
|
||||
await Analytics(questionRes, taskInfo, captions, sections);
|
||||
|
||||
if (questionRes.Count == 0) continue;
|
||||
//处理分段 知识点
|
||||
|
|
|
|||
|
|
@ -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("|");
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue