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