修复 过时的AI请求temperature 字段

This commit is contained in:
小肥羊 2026-02-06 17:15:29 +08:00
parent d948f854fb
commit 53951aa870
14 changed files with 129 additions and 23 deletions

View File

@ -101,7 +101,7 @@ namespace Learn.VideoAnalysis
app.UseMiddleware<BasicAuthMiddleware>("Swagger");
// Configure the HTTP request pipeline.
//¿ªÆôredis¶ÓÁзþÎñ
//_ = app.Services.GetRequiredService<RedisInit>();
_ = app.Services.GetRequiredService<RedisInit>();
app.UseSwagger();
app.UseSwaggerUI();
app.UseExceptionHandler("/Error");

View File

@ -62,12 +62,6 @@ namespace VideoAnalysisCore.AICore.GPT
public float? max_tokens { get; set; } = 8000;
public float? max_completion_tokens { get; set; } = 8000;
/// <summary>
/// 要使用的采样温度,介于 0 和 2 之间。较高的值(如 0.8)将使输出更加随机,而较低的值(如 0.2)将使其更加集中和确定。 我们通常建议更改此项或同时更改两者。top_p
/// <para> 默认为 1</para>
/// <para> <see cref="ChatRequest.top_p"/>联动</para>
/// </summary>
public float? temperature { get; set; } = 0.2f;
/// <summary>
/// 一种替代温度采样的方法,称为原子核采样, 其中模型考虑具有top_p概率的标记的结果 质量。所以 0.1 表示仅包含前 10% 概率质量的代币 被考
/// <para>建议与<see cref="ChatRequest.temperature"/>联动</para>
/// </summary>

View File

@ -58,7 +58,6 @@ namespace VideoAnalysisCore.AICore.GPT.ChatGPT
title = title,
max_tokens = max_tokens,
stream = true,
temperature = 0.2f,
messages = messageArr
};

View File

@ -57,7 +57,6 @@ namespace VideoAnalysisCore.AICore.GPT.ChatGPT
model = model ?? ChatGPTType.Deepseek_Chat,
max_tokens = model == ChatGPTType.Deepseek_Reasoner ? 32000 : max_tokens,
stream = true,
temperature = 0.2f,
messages = messageArr
};
return await base.ChatAsync<T>(chatReq);

View File

@ -187,7 +187,7 @@ namespace VideoAnalysisCore.AICore.GPT.DeepSeek
$"字幕列表 {rCaptionArr}。" +
$"输出格式 json字符串 对象格式{fileNameResFormat}";
var task = taskInfo.Id.ToString();
var fileNameInfoRes = await chatGPTClient.ChatAsync<FileNameInfo>
var fileNameInfoRes = await geminiClient.ChatAsync<FileNameInfo>
(task, fileNamePostMessages, "授课章节");
taskInfo.Sections = fileNameInfoRes.;
await videoTaskDB.AsUpdateable()
@ -309,7 +309,7 @@ namespace VideoAnalysisCore.AICore.GPT.DeepSeek
await Parallel.ForAsync(0, totalCount,
new ParallelOptions()
#if DEBUG
{ MaxDegreeOfParallelism = 1 },
{ MaxDegreeOfParallelism = 4 },
#else
{ MaxDegreeOfParallelism = 9 },
#endif
@ -725,6 +725,8 @@ namespace VideoAnalysisCore.AICore.GPT.DeepSeek
throw new Exception("未能找到对应知识点=>" + sections);
List<KnowledgeInfo>? knowledgeInfos = new List<KnowledgeInfo>();
var kInfo = await knowledgeInfoDB.GetByIdAsync(know.Parent_Id);
if (know.Parent_Id == 0)
kInfo = know;
try
{
knowledgeInfos = await knowledgeInfoDB.AsQueryable()
@ -800,6 +802,10 @@ namespace VideoAnalysisCore.AICore.GPT.DeepSeek
Stage = s.First().Stage,
Theme = s.First().Theme,
VideoTaskId = taskInfo.Id,
CourseLevel = taskInfo.CourseLevel,
TextBookVersionId = taskInfo.TextBookVersionId,
GradeSemester= taskInfo.GradeSemester,
GradeId = taskInfo.GradeId,
}).ToList();
//尝试追加 作业布置分段
if (homework != null && (!questionRes.Any(s => s.Stage == StageEnum..ToString())))
@ -850,6 +856,8 @@ namespace VideoAnalysisCore.AICore.GPT.DeepSeek
if (know is null)
throw new Exception("未能找到对应知识点=>" + sections);
var kInfo = await knowledgeInfoDB.GetByIdAsync(know.Parent_Id);
if (know.Parent_Id == 0)
kInfo = know;
var knowledgeInfos = await knowledgeInfoDB.AsQueryable()
.ToChildListAsync(s => s.Parent_Id, kInfo.Parent_Id == 0 ? kInfo.Id : kInfo.Parent_Id);
//开始分析复习课 试题

View File

@ -56,7 +56,6 @@ namespace VideoAnalysisCore.AICore.GPT.ChatGPT
model = model,
max_tokens = max_tokens,
stream = true,
temperature = 0.2f,
messages = messageArr,
max_completion_tokens= 12288,
};

View File

@ -139,8 +139,8 @@ namespace VideoAnalysisCore.Common
await scope.ServiceProvider.GetService<DownloadFile>()?.RunTask(task);
});
SubscribeList.Add(RedisChannelEnum., FFMPGE.RunAsync);
//SubscribeList.Add(RedisChannelEnum.解析字幕, senseVoice.RunTask);
SubscribeList.Add(RedisChannelEnum., funASRNano.RunTask);
SubscribeList.Add(RedisChannelEnum., senseVoice.RunTask);
//SubscribeList.Add(RedisChannelEnum.解析字幕, funASRNano.RunTask);
//SubscribeList.Add(RedisChannelEnum.解析说话人,Speaker.Run);
SubscribeList.Add(RedisChannelEnum.AI课程类型, async (task) =>
{
@ -433,15 +433,20 @@ namespace VideoAnalysisCore.Common
var oldTaskCount = Redis.LLen(RedisExpandKey.IDTask);
//重试任务并发过多可能会导致程序崩溃
// 未能重新分析的中断任务 则单独开一个网页来处理
if (oldTaskCount > 0 )
if (oldTaskCount > 0)
{
var oldTaskArr = Redis.LRange(RedisExpandKey.IDTask, 0, oldTaskCount);
//不自动清理未完成任务 等待执行完毕/失败后自动清理
//Redis.LTrim(RedisExpandKey.IDTask, 1, 0);//删除 redis 列表
//最多执行5个上次中断/或者未完成的任务
foreach (var oldTask in oldTaskArr.Take(5))
//获取所有未完成的任务
var oldTaskArr = Redis.LRange(RedisExpandKey.IDTask, 0, -1);
Console.WriteLine($"{DateTime.Now:HH:mm:ss}-------------> 发现 {oldTaskArr.Length} 个未完成任务,准备恢复...");
//使用信号量限制并发数(5),防止崩溃
using var semaphore = new System.Threading.SemaphoreSlim(5);
var retryTaskArr = new List<Task>();
foreach (var oldTask in oldTaskArr)
{
_ = Task.Run(async () =>
await semaphore.WaitAsync();
var res = Task.Run(async () =>
{
try
{
@ -453,10 +458,21 @@ namespace VideoAnalysisCore.Common
catch (Exception ex)
{
await SetTaskErrorMessage(long.Parse(oldTask), ex);
throw;
Console.WriteLine($"恢复任务 {oldTask} 失败: {ex.Message}");
}
finally
{
semaphore.Release();
}
});
retryTaskArr.Add(res);
}
//等待所有 重试任务完成后接收新任务
await Task.WhenAll(retryTaskArr);
Console.WriteLine(DateTime.Now.ToString("HH:mm:ss") + "-------------> 所有未完成任务处理完毕!");
ReceivingTaskAsync();
}
else
{

View File

@ -141,6 +141,10 @@ namespace VideoAnalysisCore.Controllers.Dto
/// 教育阶段
/// </summary>
public EducationStageEnum StageId { get; set; }
/// <summary>
/// 年级册(上册/下册)
/// </summary>
public GradeSemesterEnum? GradeSemester { get; set; }
}
/// <summary>
/// 视频处理 请求

View File

@ -115,6 +115,10 @@ namespace VideoAnalysisCore.Controllers
CloudSchoolId =s.UserCenterCloudSchoolId,
Area = s.Area,
HostIP = s.HostIP,
StageId = s.StageId,
GradeId = s.GradeId,
GradeSemester = s.GradeSemester,
TextBookVersionId = s.TextBookVersionId,
};
nodePackages.Add(np);
if (videoIdArr.Contains(s.VideoCode)) continue;
@ -134,6 +138,10 @@ namespace VideoAnalysisCore.Controllers
PPTVideoUrl = pptUrl,
VideoType = s.CourseType,
CloudSchoolId = s.UserCenterCloudSchoolId,
TextBookVersionId = s.TextBookVersionId,
GradeSemester =s .GradeSemester,
CourseLevel =s.CourseLevel,
GradeId = s.GradeId,
});
}
await nodePackageInfoDB.InsertRangeAsync(nodePackages);

View File

@ -266,7 +266,7 @@ namespace VideoAnalysisCore.Controllers
TagId = req.TagId,
PPTVideoCode = req.PPTVideoCode,
PPTVideoUrl = req.PPTVideoUrl,
VideoType = req.VideoType
VideoType = req.VideoType,
};
//入库
await baseService.InsertAsync(task);

View File

@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace VideoAnalysisCore.Model.Enum
{
/// <summary>
/// 年级层次
/// </summary>
public enum GradeSemesterEnum
{
= 1,
= 2
}
}

View File

@ -83,6 +83,25 @@ namespace VideoAnalysisCore.Model
/// </summary>
public string Area { get; set; }
/// <summary>
/// 年级
/// </summary>
[SugarColumn(IsNullable = true)]
public GradeEnum? GradeId { get; set; }
/// <summary>
/// 教育阶段
/// </summary>
[SugarColumn(IsNullable = true)]
public EducationStageEnum StageId { get; set; }
/// <summary>
/// 年级册(上册/下册)
/// </summary>
[SugarColumn(IsNullable = true)]
public GradeSemesterEnum? GradeSemester { get; set; }
/// <summary>
/// 学科网的教材版本Id
/// </summary>
public long TextBookVersionId { get; set; }
/// <summary>
/// 请求区域
/// <para>回调添加到Headers</para>
/// </summary>

View File

@ -145,5 +145,26 @@ namespace VideoAnalysisCore.Model
[SugarColumn(IsNullable = true)]
public long? CloudSchoolId { get; set; }
/// <summary>
/// 教材层次
/// </summary>
[SugarColumn(IsNullable = true)]
public CourselevelTypeEnum? CourseLevel { get; set; }
/// <summary>
/// 年级
/// </summary>
[SugarColumn(IsNullable = true)]
public GradeEnum? GradeId { get; set; }
/// <summary>
/// 年级册(上册/下册)
/// </summary>
[SugarColumn(IsNullable = true)]
public GradeSemesterEnum? GradeSemester { get; set; }
/// <summary>
/// 学科网的教材版本Id
/// </summary>
public long TextBookVersionId { get; set; }
}
}

View File

@ -57,6 +57,7 @@ namespace VideoAnalysisCore.Model
/// <summary>
/// 知识点来源 视频秒,来源原因
/// </summary>
[SugarColumn(Length = 500, IsNullable = true)]
public string Content { get; set; }
/// <summary>
/// 课程阶段
@ -75,5 +76,26 @@ namespace VideoAnalysisCore.Model
/// </summary>
[SugarColumn(IsNullable = true)]
public virtual string? TextbookSource { get; set; }
/// <summary>
/// 教材层次
/// </summary>
[SugarColumn(IsNullable = true)]
public CourselevelTypeEnum? CourseLevel { get; set; }
/// <summary>
/// 年级
/// </summary>
[SugarColumn(IsNullable = true)]
public GradeEnum? GradeId { get; set; }
/// <summary>
/// 年级册(上册/下册)
/// </summary>
[SugarColumn(IsNullable = true)]
public GradeSemesterEnum? GradeSemester { get; set; }
/// <summary>
/// 学科网的教材版本Id
/// </summary>
public long TextBookVersionId { get; set; }
}
}