优化 AI分析流程的注释

This commit is contained in:
小肥羊 2026-01-06 14:08:28 +08:00
parent 89432c681f
commit 1f5ecaa604
5 changed files with 29 additions and 24 deletions

View File

@ -163,9 +163,13 @@ namespace VideoAnalysisCore.AICore.GPT.Dto
/// </summary> /// </summary>
public decimal Score { get; set; } public decimal Score { get; set; }
/// <summary> /// <summary>
/// 评分 /// 扣分原因
/// </summary> /// </summary>
public string Evaluation { get; set; } public string MinusScore { get; set; }
/// <summary>
/// 改进建议
/// </summary>
public string Suggestion { get; set; }
public VideoKnowRes[] Data { get; set; } public VideoKnowRes[] Data { get; set; }
} }

View File

@ -71,7 +71,7 @@ namespace VideoAnalysisCore.AICore.GPT
var chatResp = await PostJsonStreamAsync(Config.Host + Config.Path, chatReq, Config.ApiKey); var chatResp = await PostJsonStreamAsync(Config.Host + Config.Path, chatReq, Config.ApiKey);
if (!chatResp.IsSuccessStatusCode) if (!chatResp.IsSuccessStatusCode)
{ {
await redisManager.AddTaskLog(chatReq.taskId, "=>请求GPT服务器异常 " + chatResp?.StatusCode + " " + await chatResp.Content.ReadAsStringAsync()); await redisManager.AddTaskLog(chatReq.taskId, "==>请求GPT服务器异常 " + chatResp?.StatusCode + " " + await chatResp.Content.ReadAsStringAsync());
if (--i < 0) if (--i < 0)
{ {
throw new Exception("请求GPT服务器失败次数过多"); throw new Exception("请求GPT服务器失败次数过多");
@ -140,8 +140,8 @@ namespace VideoAnalysisCore.AICore.GPT
} }
} }
} }
throw new Exception(DateTime.Now + "=>AI请求超时 " + chatReq.taskId); throw new Exception(DateTime.Now + "==>AI请求超时 " + chatReq.taskId);
//await redisManager.AddTaskLog(chatReq.taskId, DateTime.Now + "=>AI请求超时 " + chatReq.taskId); //await redisManager.AddTaskLog(chatReq.taskId, DateTime.Now + "==>AI请求超时 " + chatReq.taskId);
//return null; //return null;
} }
@ -206,11 +206,11 @@ namespace VideoAnalysisCore.AICore.GPT
} }
catch (Exception ex) catch (Exception ex)
{ {
await redisManager.AddTaskLog(chatRep.taskId, $"=>GPT结果解析错误 重试剩余{tryCount} {ex.Message} {ex.StackTrace}"); await redisManager.AddTaskLog(chatRep.taskId, $"==>GPT结果解析错误 重试剩余{tryCount} {ex.Message} {ex.StackTrace}");
} }
} }
await redisManager.AddTaskLog(chatRep.taskId, $"=>GPT请求失败次数过多!!!"); await redisManager.AddTaskLog(chatRep.taskId, $"==>GPT请求失败次数过多!!!");
throw new Exception(DateTime.Now + "=>GPT请求失败次数过多!!!"); throw new Exception(DateTime.Now + "==>GPT请求失败次数过多!!!");
} }
public async Task<HttpResponseMessage> PostJsonStreamAsync( public async Task<HttpResponseMessage> PostJsonStreamAsync(
@ -249,7 +249,7 @@ namespace VideoAnalysisCore.AICore.GPT
{e.StackTrace} {e.StackTrace}
============================================== ==============================================
"""; """;
await redisManager.AddTaskLog(data.taskId, $"=>GPT Http请求失败 {msg} 1秒后重试"); await redisManager.AddTaskLog(data.taskId, $"==>GPT Http请求失败 {msg} 1秒后重试");
Thread.Sleep(1000); Thread.Sleep(1000);
} }
} }

View File

@ -90,7 +90,7 @@ namespace VideoAnalysisCore.AICore.GPT.DeepSeek
$"输出内容只返回json格式({checkResFormat1})\n" + $"输出内容只返回json格式({checkResFormat1})\n" +
$" 格式 (方法点Id|方法点名称) \n" + $" 格式 (方法点Id|方法点名称) \n" +
$"提供的`知识点名称({knows})。\n"; $"提供的`知识点名称({knows})。\n";
await redisManager.AddTaskLog(taskInfo.Id, "=>2.开始分析视频内容知识点"); await redisManager.AddTaskLog(taskInfo.Id, "==>2.开始分析视频内容知识点");
VideoKnowRes[] konwRes; VideoKnowRes[] konwRes;
var knowOK = false; var knowOK = false;
var chatClentArr = new GPTClient[] { chatGPTClient, geminiClient,deepSeekClient }; var chatClentArr = new GPTClient[] { chatGPTClient, geminiClient,deepSeekClient };
@ -189,7 +189,7 @@ namespace VideoAnalysisCore.AICore.GPT.DeepSeek
var pptFormat = taskInfo.VideoType == AttachmentsInfoType. var pptFormat = taskInfo.VideoType == AttachmentsInfoType.
? "这堂课是习题课,所讲解内容几乎都是试题。" ? "这堂课是习题课,所讲解内容几乎都是试题。"
: string.Empty; : string.Empty;
var checkResFormat = """{"Score":打分(number),"Evaluation":扣分原因/改进建议(string)""";//,"Data":优化后的分段(array)}"""; var checkResFormat = """{"Score":打分(number),"MinusScore":简洁的扣分原因(string)",Suggestion":改进建议(string)""";//,"Data":优化后的分段(array)}""";
var checkMessage = var checkMessage =
$""" $"""
@ -227,7 +227,7 @@ namespace VideoAnalysisCore.AICore.GPT.DeepSeek
var newCaptionsList = new List<SenseVoiceRes>(captionsArr.Length); var newCaptionsList = new List<SenseVoiceRes>(captionsArr.Length);
var spanCount = 75; var spanCount = 75;
var totalCount = captionsArr.Length / spanCount + 1; var totalCount = captionsArr.Length / spanCount + 1;
await redisManager.AddTaskLog(taskInfo.Id, $"=>字幕优化"); await redisManager.AddTaskLog(taskInfo.Id, $"==>字幕优化");
var chatClentArr = new GPTClient[] { deepSeekClient,chatGPTClient, geminiClient }; var chatClentArr = new GPTClient[] { deepSeekClient,chatGPTClient, geminiClient };
await Parallel.ForAsync(0, totalCount, await Parallel.ForAsync(0, totalCount,
@ -263,13 +263,13 @@ namespace VideoAnalysisCore.AICore.GPT.DeepSeek
if (resData.Count() == cArr.Count()) if (resData.Count() == cArr.Count())
break; break;
else else
await redisManager.AddTaskLog(taskInfo.Id, $"=>字幕优化 分段{s} AI结果数量不匹配 重试{i}"); await redisManager.AddTaskLog(taskInfo.Id, $"==>字幕优化 分段{s} AI结果数量不匹配 重试{i}");
} }
if (resData.Count() != cArr.Count()) if (resData.Count() != cArr.Count())
{ {
resData = cStrArr.ToArray(); resData = cStrArr.ToArray();
await redisManager.AddTaskLog(taskInfo.Id, $"=>字幕优化 分段{s} AI结果数量不匹配 采用原始值"); await redisManager.AddTaskLog(taskInfo.Id, $"==>字幕优化 分段{s} AI结果数量不匹配 采用原始值");
} }
newCaptionsList.AddRange(resData.Select((text, i) => new SenseVoiceRes() newCaptionsList.AddRange(resData.Select((text, i) => new SenseVoiceRes()
{ {
@ -349,7 +349,7 @@ namespace VideoAnalysisCore.AICore.GPT.DeepSeek
/// <returns></returns> /// <returns></returns>
private async Task<SenseVoiceRes[]> AnalysisVideoQuestions(VideoTask taskInfo, List<KnowledgeInfo> knowledgeInfos) private async Task<SenseVoiceRes[]> AnalysisVideoQuestions(VideoTask taskInfo, List<KnowledgeInfo> knowledgeInfos)
{ {
await redisManager.AddTaskLog(taskInfo.Id, $"=>{taskInfo.Id} 提取试题"); await redisManager.AddTaskLog(taskInfo.Id, $"==>{taskInfo.Id} 提取试题");
if (taskInfo is null || string.IsNullOrEmpty(taskInfo.PPTKeyFrame)) if (taskInfo is null || string.IsNullOrEmpty(taskInfo.PPTKeyFrame))
return null; return null;
var farmeArr = JsonSerializer.Deserialize<int[]>(taskInfo.PPTKeyFrame); var farmeArr = JsonSerializer.Deserialize<int[]>(taskInfo.PPTKeyFrame);
@ -390,7 +390,7 @@ namespace VideoAnalysisCore.AICore.GPT.DeepSeek
break; break;
#if DEBUG #if DEBUG
await redisManager.AddTaskLog(taskInfo.Id, $"=>{taskInfo.Id} 提取{knowInfoArr.StartTime}秒试题的试题内容"); await redisManager.AddTaskLog(taskInfo.Id, $"==>{taskInfo.Id} 提取{knowInfoArr.StartTime}秒试题的试题内容");
#endif #endif
//var knowArr=JsonSerializer.Serialize(knowInfoArr.Select(s => new { s.KnowPointId, s.KnowPoint })); //var knowArr=JsonSerializer.Serialize(knowInfoArr.Select(s => new { s.KnowPointId, s.KnowPoint }));
@ -449,7 +449,7 @@ namespace VideoAnalysisCore.AICore.GPT.DeepSeek
} }
catch (Exception ex) catch (Exception ex)
{ {
await redisManager.AddTaskLog(taskInfo.Id, $"=>{taskInfo.Id} 提取{knowInfoArr.StartTime}秒试题出现错误 {ex.Message}"); await redisManager.AddTaskLog(taskInfo.Id, $"==>{taskInfo.Id} 提取{knowInfoArr.StartTime}秒试题出现错误 {ex.Message}");
} }
} }
} }
@ -531,12 +531,13 @@ namespace VideoAnalysisCore.AICore.GPT.DeepSeek
if (questionRes is null) continue; if (questionRes is null) continue;
//处理分段 知识点 //处理分段 知识点
var insertData = await GetVideoKnow(questionRes, taskInfo, sections, knowledgeInfos);//ChatGPT var insertData = await GetVideoKnow(questionRes, taskInfo, sections, knowledgeInfos);
//校验结果质量 //校验结果质量
var checkRes = await VerifySpanQuality(questionRes, taskInfo, captions, sections, Course_Id); var checkRes = await VerifySpanQuality(questionRes, taskInfo, captions, sections, Course_Id);
await redisManager.AddTaskLog(taskInfo.Id, $"=>课堂内容AI分析结果 得分=>{checkRes.Score} "); await redisManager.AddTaskLog(taskInfo.Id, $"==>课堂内容AI分析结果 得分=>{checkRes.Score}");
await redisManager.AddTaskLog(taskInfo.Id, checkRes.Evaluation); await redisManager.AddTaskLog(taskInfo.Id, $"==>改进意见 {checkRes.Suggestion}");
await redisManager.AddTaskLog(taskInfo.Id, $"==>扣分原因 {checkRes.MinusScore}");
if (checkRes != null && checkRes.Score >= 85) if (checkRes != null && checkRes.Score >= 85)
{ {
@ -546,10 +547,10 @@ namespace VideoAnalysisCore.AICore.GPT.DeepSeek
break; break;
} }
else else
await redisManager.AddTaskLog(taskInfo.Id, $"=>课堂内容AI分析结果不合格!即将重试 剩余次数{tryCount}"); await redisManager.AddTaskLog(taskInfo.Id, $"==>课堂内容AI分析结果不合格!即将重试 剩余次数{tryCount}");
if (questionRes.Any(s => s.KeepTime < 30)) if (questionRes.Any(s => s.KeepTime < 30))
{ {
await redisManager.AddTaskLog(taskInfo.Id, "=>视频分段过短!! 重新进行AI分析"); await redisManager.AddTaskLog(taskInfo.Id, "==>视频分段过短!! 重新进行AI分析");
continue; continue;
} }
} }

View File

@ -196,7 +196,7 @@ namespace VideoAnalysisCore.AICore.SherpaOnnx
//如果携带任务ID //如果携带任务ID
if (!string.IsNullOrEmpty(task)) if (!string.IsNullOrEmpty(task))
{ {
await redisManager.AddTaskLog(task, "=> SenseVoice 字幕数量" + res.Count); await redisManager.AddTaskLog(task, "==> SenseVoice 字幕数量" + res.Count);
var captionsStr = res.ToJson(); var captionsStr = res.ToJson();
await videoTaskDB.AsUpdateable() await videoTaskDB.AsUpdateable()
.SetColumns(it => it.Captions == captionsStr) .SetColumns(it => it.Captions == captionsStr)

View File

@ -282,7 +282,7 @@ namespace VideoAnalysisCore.Common
throw new Exception(@enum + " 未实现"); throw new Exception(@enum + " 未实现");
var tId = taskId.ToString(); var tId = taskId.ToString();
await AddTaskLog(tId, "-------------> 开始执行任务 "); await AddTaskLog(tId, "==> 开始执行任务 ");
try try
{ {
while (true) while (true)