From dd7e217bb230046c6ed5cd61032cd0888905961b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=B0=8F=E8=82=A5=E7=BE=8A?= <1048382248@qq.com>
Date: Fri, 30 May 2025 16:51:11 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=20AI=E5=AD=97=E5=B9=95?=
=?UTF-8?q?=E5=88=86=E6=9E=90=E6=B5=81=E7=A8=8B[deepseek=E5=8D=87=E7=BA=A7?=
=?UTF-8?q?]?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../AICore/GPT/DeepSeek/DeepSeekModel.cs | 2 +-
.../AICore/GPT/DeepSeek/DeepSeek_GPT.cs | 40 ++++++++-----------
VideoAnalysisCore/Common/AppCommon.cs | 4 +-
3 files changed, 19 insertions(+), 27 deletions(-)
diff --git a/VideoAnalysisCore/AICore/GPT/DeepSeek/DeepSeekModel.cs b/VideoAnalysisCore/AICore/GPT/DeepSeek/DeepSeekModel.cs
index 6ae5c77..3460ed1 100644
--- a/VideoAnalysisCore/AICore/GPT/DeepSeek/DeepSeekModel.cs
+++ b/VideoAnalysisCore/AICore/GPT/DeepSeek/DeepSeekModel.cs
@@ -27,7 +27,7 @@ namespace VideoAnalysisCore.AICore.GPT.DeepSeek
///
public string model { get; set; } = "deepseek-reasoner";
- public float max_tokens { get; set; } = 4000;
+ public float max_tokens { get; set; } = 8000;
///
/// 要使用的采样温度,介于 0 和 2 之间。较高的值(如 0.8)将使输出更加随机,而较低的值(如 0.2)将使其更加集中和确定。 我们通常建议更改此项或同时更改两者。top_p
/// 默认为 1
diff --git a/VideoAnalysisCore/AICore/GPT/DeepSeek/DeepSeek_GPT.cs b/VideoAnalysisCore/AICore/GPT/DeepSeek/DeepSeek_GPT.cs
index c4cb047..e257259 100644
--- a/VideoAnalysisCore/AICore/GPT/DeepSeek/DeepSeek_GPT.cs
+++ b/VideoAnalysisCore/AICore/GPT/DeepSeek/DeepSeek_GPT.cs
@@ -254,50 +254,42 @@ namespace VideoAnalysisCore.AICore.GPT.DeepSeek
///
///
private async Task Analytics(List 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(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();
//视频字幕分析
- await Analytics(questionRes, taskInfo, captionsArr, sections);
+ await Analytics(questionRes, taskInfo, captions, sections);
if (questionRes.Count == 0) continue;
//处理分段 知识点
diff --git a/VideoAnalysisCore/Common/AppCommon.cs b/VideoAnalysisCore/Common/AppCommon.cs
index 0b7ee2f..bbf2d48 100644
--- a/VideoAnalysisCore/Common/AppCommon.cs
+++ b/VideoAnalysisCore/Common/AppCommon.cs
@@ -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("|");
}