优化 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>
public decimal Score { get; set; }
/// <summary>
/// 评分
/// 扣分原因
/// </summary>
public string Evaluation { get; set; }
public string MinusScore { get; set; }
/// <summary>
/// 改进建议
/// </summary>
public string Suggestion { 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);
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)
{
throw new Exception("请求GPT服务器失败次数过多");
@ -140,8 +140,8 @@ namespace VideoAnalysisCore.AICore.GPT
}
}
}
throw new Exception(DateTime.Now + "=>AI请求超时 " + chatReq.taskId);
//await redisManager.AddTaskLog(chatReq.taskId, DateTime.Now + "=>AI请求超时 " + chatReq.taskId);
throw new Exception(DateTime.Now + "==>AI请求超时 " + chatReq.taskId);
//await redisManager.AddTaskLog(chatReq.taskId, DateTime.Now + "==>AI请求超时 " + chatReq.taskId);
//return null;
}
@ -206,11 +206,11 @@ namespace VideoAnalysisCore.AICore.GPT
}
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请求失败次数过多!!!");
throw new Exception(DateTime.Now + "=>GPT请求失败次数过多!!!");
await redisManager.AddTaskLog(chatRep.taskId, $"==>GPT请求失败次数过多!!!");
throw new Exception(DateTime.Now + "==>GPT请求失败次数过多!!!");
}
public async Task<HttpResponseMessage> PostJsonStreamAsync(
@ -249,7 +249,7 @@ namespace VideoAnalysisCore.AICore.GPT
{e.StackTrace}
==============================================
""";
await redisManager.AddTaskLog(data.taskId, $"=>GPT Http请求失败 {msg} 1秒后重试");
await redisManager.AddTaskLog(data.taskId, $"==>GPT Http请求失败 {msg} 1秒后重试");
Thread.Sleep(1000);
}
}

View File

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

View File

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

View File

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