优化提示词逻辑

This commit is contained in:
小肥羊 2024-11-08 18:25:50 +08:00
parent 8bf9caedf1
commit c06878db59
6 changed files with 41 additions and 22 deletions

View File

@ -67,6 +67,8 @@ namespace Learn.VideoAnalysis.Components.Pages
private static System.Timers.Timer _timer; private static System.Timers.Timer _timer;
public void StartTimer(Object source, System.Timers.ElapsedEventArgs e) public void StartTimer(Object source, System.Timers.ElapsedEventArgs e)
{ {
if (_dataSource is null)
return;
foreach (var item in _dataSource) foreach (var item in _dataSource)
{ {
if (!string.IsNullOrEmpty(item.ErrorMessage) || item.LastEnum == RedisChannelEnum.EndTask) if (!string.IsNullOrEmpty(item.ErrorMessage) || item.LastEnum == RedisChannelEnum.EndTask)

View File

@ -25,9 +25,9 @@ namespace Learn.VideoAnalysis.Controllers.Dto
/// <summary> /// <summary>
///回调Api地址 ///回调Api地址
/// </summary> /// </summary>
[Required(ErrorMessage = "回调Api地址是必填项")] //[Required(ErrorMessage = "回调Api地址是必填项")]
[Url(ErrorMessage = "请输入有效的 URL")] //[Url(ErrorMessage = "请输入有效的 URL")]
public string CallBackUrl { get; set; } = string.Empty; //public string CallBackUrl { get; set; } = string.Empty;
} }

View File

@ -14,6 +14,7 @@ using VideoAnalysisCore.Enum;
using System.Reflection; using System.Reflection;
using FreeRedis; using FreeRedis;
using VideoAnalysisCore.Model.Dto; using VideoAnalysisCore.Model.Dto;
using Newtonsoft.Json;
namespace VideoAnalysisCore.AICore.ChatGPT.KIMI namespace VideoAnalysisCore.AICore.ChatGPT.KIMI
{ {
@ -54,7 +55,7 @@ namespace VideoAnalysisCore.AICore.ChatGPT.KIMI
criteriaBuilder.Append(item.Id); criteriaBuilder.Append(item.Id);
criteriaBuilder.Append(":"); criteriaBuilder.Append(":");
criteriaBuilder.Append(item.NamePrompt); criteriaBuilder.Append(item.NamePrompt);
criteriaBuilder.Append("结果类型 bool|"); criteriaBuilder.Append("结果类型 int (1-10分 5分不合格 10分满分)|");
} }
//拼接枚举提问 //拼接枚举提问
foreach (var value in System.Enum.GetValues(typeof(QuestionTypeEnum))) foreach (var value in System.Enum.GetValues(typeof(QuestionTypeEnum)))
@ -95,17 +96,20 @@ namespace VideoAnalysisCore.AICore.ChatGPT.KIMI
}; };
var chatResp = await moonshotClient.Chat(chatRep); var chatResp = await moonshotClient.Chat(chatRep);
if (chatResp is null || chatResp.error != null) if (chatResp is null || chatResp.error != null)
throw new Exception($"KIMI模型返回异常 Chat 请求参数: {JsonSerializer.Serialize(chatRep)} " + throw new Exception($"KIMI模型返回异常 Chat 请求参数: {System.Text.Json.JsonSerializer.Serialize(chatRep)} " +
$" chatResp {JsonSerializer.Serialize(chatResp)}"); $" chatResp {System.Text.Json.JsonSerializer.Serialize(chatResp)}");
var chatResContent = chatResp?.choices.FirstOrDefault()?.message.content; var chatResContent = chatResp?.choices.FirstOrDefault()?.message.content;
if (chatResContent is null)
throw new Exception("KIMIGPT返回message无效结果");
var questionRes = JsonSerializer.Deserialize<QuestionRes[]>(chatResContent); var questionRes = JsonConvert.DeserializeObject<QuestionRes[]>(chatResContent);
var gptRes = new CallGPTRes(captions); var gptRes = new CallGPTRes(captions);
if (questionRes is null) if (questionRes is null)
throw new Exception("KIMIGPT返回无效结果"); throw new Exception("KIMIGPT返回无效结果");
//处理 ai问答提问 //处理 ai问答提问
var arr1 = questionRes.Where(s => s. < 100); var arr1 = questionRes.Where(s => s. < 100);
var arr2 = questionRes.Where(s => s. >= 100).ToDictionary(s => s.); var arr2 = questionRes.Where(s => s. >= 100)
.ToDictionary(s => s.);
//AI综合评估 //AI综合评估
var criteriaDic = criteriaArr.ToDictionary(s => s.Id); var criteriaDic = criteriaArr.ToDictionary(s => s.Id);
gptRes.Assessment = new AssessmentDto() gptRes.Assessment = new AssessmentDto()
@ -122,8 +126,9 @@ namespace VideoAnalysisCore.AICore.ChatGPT.KIMI
.Select(s => new CourseCriteria() .Select(s => new CourseCriteria()
{ {
Id = criteriaDic[s.].Id, Id = criteriaDic[s.].Id,
ImprovedMethods = criteriaDic[s.].ImprovedMethods, //ImprovedMethods = criteriaDic[s.问题编号].ImprovedMethods,
Prompt = criteriaDic[s.].ImprovedMethods, Analyze = s. ?? string.Empty,
Prompt = criteriaDic[s.].Advantage,
}).ToArray(), }).ToArray(),
}; };
@ -140,7 +145,16 @@ namespace VideoAnalysisCore.AICore.ChatGPT.KIMI
End = double.Parse(s.key.Split(":")[2]??0.ToString()), End = double.Parse(s.key.Split(":")[2]??0.ToString()),
Content = s.value, Content = s.value,
}); });
//todo 分析上课时间段情况 分析 独立学习 小组合作 随堂练习等情况 //分析上课时间段情况 分析 独立学习 小组合作 随堂练习等情况
var extraTimeBase = arr2[(int)QuestionTypeEnum.]
..ToObject<KeyValue<string>[]>()?.Select(s =>
new TimeBase
{
Start = double.Parse(s.key.Split(":")[1] ?? 0.ToString()),
End = double.Parse(s.key.Split(":")[2] ?? 0.ToString()),
Content = s.value,
});
var tId = long.Parse(task); var tId = long.Parse(task);

View File

@ -191,6 +191,8 @@ namespace VideoAnalysisCore.Common
if (taskId is null) return; if (taskId is null) return;
Console.WriteLine(DateTime.Now.ToString("HH:mm:ss") + "-> " + key + " " + taskId); Console.WriteLine(DateTime.Now.ToString("HH:mm:ss") + "-> " + key + " " + taskId);
if (action is not null) if (action is not null)
{
try
{ {
var tID = long.Parse(taskId); var tID = long.Parse(taskId);
Redis.HMSet(RedisExpandKey.Task(taskId), "LastEnum", key); Redis.HMSet(RedisExpandKey.Task(taskId), "LastEnum", key);
@ -199,8 +201,7 @@ namespace VideoAnalysisCore.Common
.SetColumns(it => it.LastEnum == key) .SetColumns(it => it.LastEnum == key)
.Where(it => it.Id == tID) .Where(it => it.Id == tID)
.ExecuteCommandAsync(); .ExecuteCommandAsync();
try
{
await action(taskId); await action(taskId);
} }
catch (Exception ex) catch (Exception ex)
@ -208,7 +209,6 @@ namespace VideoAnalysisCore.Common
//执行任务时出现异常 //执行任务时出现异常
var error = ex.Message + ex.StackTrace; var error = ex.Message + ex.StackTrace;
await SetTaskErrorMessage(long.Parse(taskId), error); await SetTaskErrorMessage(long.Parse(taskId), error);
Redis.HMSet(RedisExpandKey.Task(taskId), "Error", error);
} }
} }
else else

View File

@ -11,10 +11,13 @@ namespace VideoAnalysisCore.Enum
{ {
[Display(Prompt = "分析授课中使用的高频词10个频率从高到低 结果类型[]")] [Display(Prompt = "分析授课中使用的高频词10个频率从高到低 结果类型[]")]
=100, = 100,
[Display(Prompt = "分析字幕中每5分钟的一个概览 结果类型[{key:时间段,value:概览}]")] [Display(Prompt = "分析字幕中每5分钟的一个概览 结果类型[{key:时间段,value:概览}]")]
= 101, = 101,
[Display(Prompt = "统计授课中教师提问类型的次数 类型[重复回答,老师追问,简单性表演,老师补充答案,表扬并补充答案] [{key:,value:}]")] [Display(Prompt = "统计授课中教师提问类型的次数 类型[重复回答,老师追问,简单性表演,老师补充答案,表扬并补充答案] [{key:,value:}]")]
= 102, = 102,
[Display(Prompt = " 分析授课中教师提到 类型[独立学习,小组合作,随堂练习] [{key:,value:/null}] ")]
= 103,
} }
} }

View File

@ -84,14 +84,14 @@ namespace VideoAnalysisCore.Model
/// Chat模型分析缓存 /// Chat模型分析缓存
/// </summary> /// </summary>
[SugarColumn(ColumnName = "ChatAnalysis", ColumnDataType = "longtext", IsNullable = true)] [SugarColumn(ColumnName = "ChatAnalysis", ColumnDataType = "longtext", IsNullable = true)]
public string _ChatAnalysis { get; set; } = "[]"; public string _ChatAnalysis { get; set; } = "{}";
/// <summary> /// <summary>
/// Chat模型分析缓存 /// Chat模型分析缓存
/// </summary> /// </summary>
[SugarColumn(IsIgnore = true)] [SugarColumn(IsIgnore = true)]
public CallGPTRes? ChatAnalysis public CallGPTRes? ChatAnalysis
{ {
get => JsonSerializer.Deserialize<CallGPTRes>(_ChatAnalysis ?? "[]"); get => JsonSerializer.Deserialize<CallGPTRes>(_ChatAnalysis ?? "{}");
set => _ChatAnalysis = JsonSerializer.Serialize(value); set => _ChatAnalysis = JsonSerializer.Serialize(value);
} }