取消 ai优化字幕的 死循环情况

新增 接收的任务学科类型校验
This commit is contained in:
小肥羊 2025-08-28 10:29:57 +08:00
parent 2ddbe98a1b
commit 4f48553afd
4 changed files with 45 additions and 35 deletions

View File

@ -84,7 +84,7 @@ namespace VideoAnalysisCore.AICore.FFMPGE
keyFrames.Add((int)timestamp);
//string outputPath = Path.Combine(outputDir, $"change_{timestamp:0000}.jpg");
//currFrame.Save(outputPath);
Console.WriteLine($"变化帧: {timestamp}秒,差异值: {ssim:F2}");
//Console.WriteLine($"变化帧: {timestamp}秒,差异值: {ssim:F2}");
}
//Console.WriteLine($"帧: {timestamp}秒SSIM{ssim:F2} 差异值: {ssim:F2} ");

View File

@ -200,42 +200,40 @@ namespace VideoAnalysisCore.AICore.GPT.DeepSeek
new ParallelOptions() { MaxDegreeOfParallelism = 20 },
async (s, c) =>
{
while (true)
{
var cArr = captionsArr
.Skip(spanCount * s)
.Take(spanCount);
if (cArr.Count() == 0)
return;
var nowCaptionStr = cArr.Select(s => s.Text).ToJson();
var resFormat = """[string(修改结果)]""";
var postMessages =
$"这是一堂中国{subject}课堂的字幕,由结果是语音识别提供。" +
$"字幕内容与{subject}学科{sections}章节相关。" +
$"但是识别出来的字幕包含错误的关键字 例如应当是'数列'被识别为'树列'。" +
$"所以需要你帮我修复其中的错别字,修复公式排版。" +
$"请注意,只允许对字幕进行修改。" +
$"输出内容只返回json格式({resFormat})" +
$"字幕内容(JSON字符串)" +
$"`{nowCaptionStr}`" +
$"字幕结束。" +
$"最后请确保输出字幕条数与输入字幕条数一致!!! 如果不一致则重新优化并且确保字幕条数一致!!!!";
Console.WriteLine(DateTime.Now + $"=>{taskInfo.Id}字幕优化 分段{s}开始...");
var resData = await ChatAsync<string[]>(taskInfo.Id.ToString(), postMessages, "优化字幕", "deepseek-chat", 3000);
if (resData.Count() != cArr.Count())
{
Console.WriteLine(DateTime.Now + $"=>{taskInfo.Id}字幕优化 分段{s} AI结果数量不匹配,重试×");
continue;
}
newCaptionsList.AddRange(resData.Select((text, i) => new SenseVoiceRes()
{
Start = captionsArr[spanCount * s + i].Start,
End = captionsArr[spanCount * s + i].End,
Text = text,
}));
Console.WriteLine(DateTime.Now + $"=>{taskInfo.Id}字幕优化 分段{s}完成√ ");
var cArr = captionsArr
.Skip(spanCount * s)
.Take(spanCount);
if (cArr.Count() == 0)
return;
var cStrArr = cArr.Select(s => s.Text);
var nowCaptionStr = cStrArr.ToJson();
var resFormat = """[string(修改结果)]""";
var postMessages =
$"这是一堂中国{subject}课堂的字幕,由结果是语音识别提供。" +
$"字幕内容与{subject}学科{sections}章节相关。" +
$"但是识别出来的字幕包含错误的关键字 例如应当是'数列'被识别为'树列'。" +
$"所以需要你帮我修复其中的错别字,修复公式排版。" +
$"请注意,只允许对字幕进行修改。" +
$"输出内容只返回json格式({resFormat})" +
$"字幕内容(JSON字符串)" +
$"`{nowCaptionStr}`" +
$"字幕结束。" +
$"最后请确保输出字幕条数与输入字幕条数一致!!! 如果不一致则重新优化并且确保字幕条数一致!!!!";
Console.WriteLine(DateTime.Now + $"=>{taskInfo.Id}字幕优化 分段{s}开始...");
var resData = await ChatAsync<string[]>(taskInfo.Id.ToString(), postMessages, "优化字幕", "deepseek-chat", 3000);
if (resData.Count() != cArr.Count())
{
resData = cStrArr.ToArray();
Console.WriteLine(DateTime.Now + $"=>{taskInfo.Id}字幕优化 分段{s} AI结果数量不匹配,采用原始值");
}
newCaptionsList.AddRange(resData.Select((text, i) => new SenseVoiceRes()
{
Start = captionsArr[spanCount * s + i].Start,
End = captionsArr[spanCount * s + i].End,
Text = text,
}));
Console.WriteLine(DateTime.Now + $"=>{taskInfo.Id}字幕优化 分段{s}完成√ ");
return;
});
var res = newCaptionsList.OrderBy(s => s.Start).ToArray();
Console.WriteLine(DateTime.Now + $"=>字幕优化执行完成");
@ -505,6 +503,10 @@ namespace VideoAnalysisCore.AICore.GPT.DeepSeek
}
}
}
if(insertData==null || insertData.Count==0|| insertQuestionKonw.Count==0)
return null;
//上传oss 并更新imageUrl
ossClient.AddVideoQuestionUrl(insertData);

View File

@ -12,6 +12,7 @@ using VideoAnalysisCore.Job;
using VideoAnalysisCore.Model;
using VideoAnalysisCore.Model.Enum;
using AlibabaCloud.SDK.Vod20170321;
using UserCenter.Model.Enum;
namespace VideoAnalysisCore.Common
{

View File

@ -70,11 +70,18 @@ namespace VideoAnalysisCore.Controllers
var nodePackages = new List<NodePackageInfo>(reqArr.Count());
var videoIdArr = videoTaskDB.AsQueryable().Select(v => v.TagId).Distinct().ToArray();
var courseArr = await courseInfoDB.AsQueryable().ToArrayAsync();
//系统可接收任务的学科
var subjectArr = new List<SubjectEnum?>
{
SubjectEnum.
};
foreach (var sGroup in reqArr.GroupBy(s => s.ContentId))
{
var s = sGroup.FirstOrDefault(s => s.VideoType == VideoType.);
if (s is null)
return BadRequest("无有效的老师授课视频");
//校验学科有效
if (!subjectArr.Contains(s.SubjectId)) continue;
var stageId = s.StageId.GetHashCode();
var subjectId = s.SubjectId.GetHashCode();
var course = courseArr.FirstOrDefault(x => stageId == x.Stage_Id && subjectId == x.Subject_Id);