From 8f4f48fd661a819994c31943f4e383883d3ee949 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E8=82=A5=E7=BE=8A?= <1048382248@qq.com> Date: Wed, 27 Nov 2024 11:48:06 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=20gpt=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E7=BB=93=E6=9E=9C=E5=AE=9E=E4=BD=93=E8=A7=A3=E6=9E=90=E6=96=B9?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- VideoAnalysis/Program.cs | 5 ---- .../AICore/ChatGPT/Dto/QuestionRes.cs | 20 +++++++++++++++- .../AICore/ChatGPT/KIMI/KIMI_GPT.cs | 24 +++++++++---------- .../AICore/ChatGPT/KIMI/MoonshotClient.cs | 10 ++++---- VideoAnalysisCore/Enum/QuestionTypeEnum.cs | 2 +- 5 files changed, 36 insertions(+), 25 deletions(-) diff --git a/VideoAnalysis/Program.cs b/VideoAnalysis/Program.cs index 55514e4..a413ac5 100644 --- a/VideoAnalysis/Program.cs +++ b/VideoAnalysis/Program.cs @@ -1,16 +1,11 @@ using VideoAnalysisCore.Common; -using VideoAnalysisRazor; using Learn.VideoAnalysis.Components; using Microsoft.OpenApi.Models; using AntDesign.ProLayout; using VideoAnalysisCore.AICore.ChatGPT; using VideoAnalysisCore.AICore.ChatGPT.KIMI; using VideoAnalysisCore.AICore.SherpaOnnx; -using SqlSugar; using Mapster; -using VideoAnalysisCore.AICore.ChatGPT.Dto; -using System.Text.Json; -using Newtonsoft.Json; diff --git a/VideoAnalysisCore/AICore/ChatGPT/Dto/QuestionRes.cs b/VideoAnalysisCore/AICore/ChatGPT/Dto/QuestionRes.cs index 11136b1..d2a3767 100644 --- a/VideoAnalysisCore/AICore/ChatGPT/Dto/QuestionRes.cs +++ b/VideoAnalysisCore/AICore/ChatGPT/Dto/QuestionRes.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; +using System.Text.Json; using System.Text.Json.Nodes; using System.Threading.Tasks; @@ -18,7 +19,24 @@ namespace VideoAnalysisCore.AICore.ChatGPT.Dto /// /// 结果 /// - public JToken 结果 { get; set; } + public JsonDocument 结果 { get; set; } + + /// + /// 转换结果为对象 + /// + /// + /// + public T? ToObject() + { + try + { + return System.Text.Json.JsonSerializer.Deserialize(结果.RootElement.GetRawText()); + } + catch + { + return default; + } + } /// /// 问题解释 /// diff --git a/VideoAnalysisCore/AICore/ChatGPT/KIMI/KIMI_GPT.cs b/VideoAnalysisCore/AICore/ChatGPT/KIMI/KIMI_GPT.cs index fd718f0..31e47c2 100644 --- a/VideoAnalysisCore/AICore/ChatGPT/KIMI/KIMI_GPT.cs +++ b/VideoAnalysisCore/AICore/ChatGPT/KIMI/KIMI_GPT.cs @@ -14,7 +14,6 @@ using VideoAnalysisCore.Enum; using System.Reflection; using FreeRedis; using VideoAnalysisCore.Model.Dto; -using Newtonsoft.Json; using AntDesign; using SqlSugar.IOC; @@ -86,7 +85,7 @@ namespace VideoAnalysisCore.AICore.ChatGPT.KIMI var modelId = reqTokenCount > 32 * 1000 ? "moonshot-v1-128k" : "moonshot-v1-32k"; var chatRep = new ChatReq { - max_tokens = 32*1024 - (reqTokenCount + 20), + max_tokens = 32*1024 - (reqTokenCount + 30), temperature = 0.3f, frequency_penalty = 0, presence_penalty = 0, @@ -100,14 +99,13 @@ namespace VideoAnalysisCore.AICore.ChatGPT.KIMI RedisExpand.SetTaskGPTCached(task, chatResp); if (chatResp is null || chatResp.error != null) throw new Exception($"KIMI模型返回异常 Chat 返回参数: " + - $" {System.Text.Json.JsonSerializer.Serialize(chatResp)}"); + $" {JsonSerializer.Serialize(chatResp)}"); var chatResContent = chatResp?.choices.FirstOrDefault()?.message.content; if (chatResContent is null) throw new Exception("KIMIGPT返回message无效结果"); - - var questionRes = JsonConvert.DeserializeObject(chatResContent); + var questionRes = JsonSerializer.Deserialize(chatResContent); var gptRes = new TaskRes(captions); if (questionRes is null) throw new Exception("KIMIGPT返回无效结果"); @@ -119,20 +117,20 @@ namespace VideoAnalysisCore.AICore.ChatGPT.KIMI var criteriaDic = criteriaArr.ToDictionary(s => s.Id); gptRes.Assessment = new AssessmentDto() { - Bad = arr1.Where(s => s.结果.ToObject() < 6) + Bad = arr1.Where(s => s.ToObject() < 6) .Select(s => new CourseCriteria() { Id = criteriaDic[s.问题编号].Id, ImprovedMethods = criteriaDic[s.问题编号].ImprovedMethods, Analyze = s.问题解释 ?? string.Empty, - Score = s.结果.ToObject(), + Score = s.ToObject(), Prompt = criteriaDic[s.问题编号].Flaw, }).ToArray(), - Merit = arr1.Where(s => s.结果.ToObject() >= 6) + Merit = arr1.Where(s => s.ToObject() >= 6) .Select(s => new CourseCriteria() { Id = criteriaDic[s.问题编号].Id, - Score = s.结果.ToObject(), + Score = s.ToObject(), //ImprovedMethods = criteriaDic[s.问题编号].ImprovedMethods, Analyze = s.问题解释 ?? string.Empty, Prompt = criteriaDic[s.问题编号].Advantage, @@ -140,18 +138,18 @@ namespace VideoAnalysisCore.AICore.ChatGPT.KIMI }; //高频词汇 - gptRes.Hotwords = arr2[(int)QuestionTypeEnum.高频词].结果.ToObject() ?? ["暂无数据"]; + gptRes.Hotwords = arr2[(int)QuestionTypeEnum.高频词].ToObject() ?? ["暂无数据"]; //时间段概览 gptRes.TimeOverview = arr2[(int)QuestionTypeEnum.时间段概览] - .结果.ToObject(); + .ToObject(); //提问类型 gptRes.QuestionType = arr2[(int)QuestionTypeEnum.提问类型] - .结果.ToObject>(); + .ToObject>(); //分析上课时间段情况 分析 独立学习 小组合作 随堂练习等情况 var extraTimeBase = arr2[(int)QuestionTypeEnum.额外课堂情况] - .结果.ToObject(); + .ToObject(); if (extraTimeBase is not null) foreach (var item in extraTimeBase) { diff --git a/VideoAnalysisCore/AICore/ChatGPT/KIMI/MoonshotClient.cs b/VideoAnalysisCore/AICore/ChatGPT/KIMI/MoonshotClient.cs index fc8df02..2416cac 100644 --- a/VideoAnalysisCore/AICore/ChatGPT/KIMI/MoonshotClient.cs +++ b/VideoAnalysisCore/AICore/ChatGPT/KIMI/MoonshotClient.cs @@ -56,7 +56,7 @@ namespace VideoAnalysisCore.AICore.ChatGPT.KIMI /// Return HttpResponseMessage for SSE public async Task Chat(ChatReq chatReq) { - var requestBody = Newtonsoft.Json.JsonConvert.SerializeObject(chatReq); + var requestBody = System.Text.Json.JsonSerializer.Serialize(chatReq); var chatResp = await PostJsonStreamAsync("/v1/chat/completions", requestBody); return await chatResp.Content.ReadFromJsonAsync(); } @@ -84,7 +84,7 @@ namespace VideoAnalysisCore.AICore.ChatGPT.KIMI var responseObj = JToken.Parse(responseText); return responseObj?["data"]?["total_tokens"]?.ToObject(); } - var error = Newtonsoft.Json.JsonConvert.DeserializeObject(responseText); + var error = JsonConvert.DeserializeObject(responseText); _logger.LogError($"{error?.error?.type}: {error?.error?.message}"); throw new Exception($"{error?.error.type}: {error?.error.message}"); } @@ -97,7 +97,7 @@ namespace VideoAnalysisCore.AICore.ChatGPT.KIMI /// public async Task GetAsTiMateTokenCount(ChatReq chatReq) { - var chatReqText = Newtonsoft.Json.JsonConvert.SerializeObject(chatReq); + var chatReqText = JsonConvert.SerializeObject(chatReq); return await GetAsTiMateTokenCount(chatReqText); } @@ -226,9 +226,9 @@ namespace VideoAnalysisCore.AICore.ChatGPT.KIMI var responseText = await response.Content.ReadAsStringAsync(); if (response.IsSuccessStatusCode) { - return Newtonsoft.Json.JsonConvert.DeserializeObject(responseText) ?? default; + return JsonConvert.DeserializeObject(responseText) ?? default; } - var error = Newtonsoft.Json.JsonConvert.DeserializeObject(responseText); + var error = JsonConvert.DeserializeObject(responseText); _logger.LogError($"{error?.error.type}: {error?.error.message}"); throw new Exception($"{error?.error.type}: {error?.error.message}"); } diff --git a/VideoAnalysisCore/Enum/QuestionTypeEnum.cs b/VideoAnalysisCore/Enum/QuestionTypeEnum.cs index 5dd928e..c7d06dd 100644 --- a/VideoAnalysisCore/Enum/QuestionTypeEnum.cs +++ b/VideoAnalysisCore/Enum/QuestionTypeEnum.cs @@ -7,7 +7,7 @@ using System.Threading.Tasks; namespace VideoAnalysisCore.Enum { - enum QuestionTypeEnum + public enum QuestionTypeEnum { [Display(Prompt = "分析授课中使用的高频词" +