using HuanMeng.StableDiffusion.TextGeneration.api; using HuanMeng.StableDiffusion.TextGeneration.Models; using Microsoft.EntityFrameworkCore; using Newtonsoft.Json; using Newtonsoft.Json.Serialization; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace HuanMeng.StableDiffusion.TextGeneration.BLL { /// /// ai聊天 /// /// public class TextGenerationBLL(TextGenerationTestContext textGenerationTestContext) { /// /// /// /// /// /// public async IAsyncEnumerable Chat(string sessionId, string message, string character) { if (string.IsNullOrEmpty(sessionId)) { sessionId = Guid.NewGuid().ToString(); } var x = new List(); // textGenerationTestContext.TextGenerationSessionDetails.Where(it => it.SessionId == sessionId).OrderBy(it => it.TimeStamp).ToList(); List textGenerationRequestHttpApiModels = new List(); if (textGenerationRequestHttpApiModels != null) { foreach (var item in x) { textGenerationRequestHttpApiModels.Add(new TextGenerationRequestHttpApiStreamModel { Role = item.Role, Content = item.Message }); } } textGenerationRequestHttpApiModels.Add(new TextGenerationRequestHttpApiStreamModel { Role = "user", Content = message }); var messageStr = JsonConvert.SerializeObject(textGenerationRequestHttpApiModels, Formatting.None, new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver(), Formatting = Formatting.Indented // 这个选项是用于美化输出,便于阅读 }); TextGenerationSessionDetail d = new TextGenerationSessionDetail() { CreateDateTime = DateTime.Now, Message = message, Role = "user", Model = "", SessionId = sessionId, TimeStamp = ((DateTimeOffset)DateTime.Now).ToUnixTimeSeconds(), TextGenerationSessionId = 0 }; //textGenerationTestContext.TextGenerationSessionDetails.Add(d); string datex = ""; if (!string.IsNullOrEmpty(character)) { datex = $@" ""character"":""{character}"" "; } // string json = $@" //{{ // ""messages"": {messageStr}, // ""stream"": true, // ""mode"": ""chat"", // {datex} //}} //"; string json = $@" {{ ""messages"": {messageStr}, ""mode"": ""chat"", {datex} }} "; //TextGenerationRequestHttpApiStream textGenerationRequestHttpApi = new TextGenerationRequestHttpApiStream(json); TextGenerationRequestHttpApi textGenerationRequestHttpApi = new TextGenerationRequestHttpApi(json); await foreach (var item in textGenerationRequestHttpApi.SendMessageAsync()) { if (item == "") { continue; } yield return item; } TextGenerationSessionDetail d1 = new TextGenerationSessionDetail() { CreateDateTime = DateTime.Now, Message = textGenerationRequestHttpApi?.textGenerationModel?.Content ?? "", Role = textGenerationRequestHttpApi?.textGenerationModel?.Role ?? "", Model = textGenerationRequestHttpApi?.textGenerationModel?.Model ?? "", SessionId = sessionId, TimeStamp = ((DateTimeOffset)DateTime.Now).ToUnixTimeSeconds(), TextGenerationSessionId = 0 }; //textGenerationTestContext.TextGenerationSessionDetails.Add(d1); //await textGenerationTestContext.SaveChangesAsync(); } } }