diff --git a/README.md b/README.md index 4dbcd65..ebf7270 100644 --- a/README.md +++ b/README.md @@ -5,10 +5,21 @@ # 在解决方案下运行 docker build -t miaoyu:dev-0.0.3 -f src/2-api/HuanMeng.MiaoYu.WebApi/Dockerfile . docker build -t miaoyu:dev-0.0.4 --build-arg VERSION=7.0 --build-arg TARGET=dev -f src/2-api/HuanMeng.MiaoYu.WebApi/Dockerfile . +docker build -t miaoyuapi:dev-1.2.7 --build-arg VERSION=1.2.7 --build-arg TARGET=dev -f src/2-api/HuanMeng.MiaoYu.WebApi/Dockerfile . +docker tag miaoyuapi:dev-1.2.7 123.207.203.228:92/miaoyuapi:dev-1.2.7 +docker push 123.207.203.228:92/miaoyuapi:dev-1.2.7 +//docker build -t myregistry.com/myusername/myapp:v1.0 . - + docker build --no-cache --progress=plain -t hm-admin:dev-1.0.3 -t hm-admin:latest -t 123.207.203.228:92/hm-admin:dev-1.0.3 -t 123.207.203.228:92/hm-admin:latest -f MiaoYu.Api.Admin/Dockerfile . + docker tag hm-admin:dev-1.0.0 + docker build -t hm-admin:v1.0 -t hm-admin:latest . + docker build --no-cache --progress=plain -t hm-admin:dev-1.0.4 -t hm-admin:latest -t 123.207.203.228:92/hm-admin:dev-1.0.4 -t 123.207.203.228:92/hm-admin:latest -f MiaoYu.Api.Admin/Dockerfile . +docker push 123.207.203.228:92/hm-admin:latest +docker push 123.207.203.228:92/hm-admin:dev-1.0.4 # 运行 docker run -d -p 90:90 -v E://disk/output:/app/output --name webapi miaoyu:dev-0.0.3 + +docker run -d -p 91:80 --name hm-admin hm-admin:latest # 运行。挂载日志文件夹 docker run -d -p 90:90 -v E://disk/output:/app/output --name webapi miaoyu:dev-0.0.3 docker run -d -p 90:90 -v E://disk/output:/app/output --name webapi miaoyu:dev-0.0.3 diff --git a/src/0-core/HuanMeng.MiaoYu.Code/Chat/Minimax/MinimaxChatParams.cs b/src/0-core/HuanMeng.MiaoYu.Code/Chat/Minimax/MinimaxChatParams.cs index 5734174..a0eaaa0 100644 --- a/src/0-core/HuanMeng.MiaoYu.Code/Chat/Minimax/MinimaxChatParams.cs +++ b/src/0-core/HuanMeng.MiaoYu.Code/Chat/Minimax/MinimaxChatParams.cs @@ -1,19 +1,7 @@ -using HuanMeng.MiaoYu.Code.Chat.Claude; -using HuanMeng.MiaoYu.Code.Chat.Contract; -using HuanMeng.MiaoYu.Model.DbSqlServer.Db_MiaoYu; -using HuanMeng.MiaoYu.Model.Dto.Character; -using HuanMeng.MiaoYu.Model.EnumModel.Chat; - using Newtonsoft.Json; using Newtonsoft.Json.Linq; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Reflection.PortableExecutable; -using System.Runtime.InteropServices.JavaScript; -using System.Text; -using System.Threading.Tasks; +using System.Text.Json.Nodes; namespace HuanMeng.MiaoYu.Code.Chat.Minimax { @@ -27,7 +15,7 @@ namespace HuanMeng.MiaoYu.Code.Chat.Minimax /// /// /// - /// + /// /// public MinimaxChatParams(List messages, CharacterCache character, string botName) { @@ -39,49 +27,65 @@ namespace HuanMeng.MiaoYu.Code.Chat.Minimax this.Headers = JsonConvert.DeserializeObject>(Model_Config.HeadersTemplate) ?? new Dictionary(); } Message = messages[messages.Count - 1].Content; + var otherTemplate = Model_Config.OtherTemplate; + //角色需要的类型 + string ai_messages = string.Empty; + string user_messages = string.Empty; + if (!string.IsNullOrEmpty(otherTemplate)) + { + var otherObj = JObject.Parse(otherTemplate); + if (otherObj != null) + { + ai_messages = otherObj["ai_messages"]?.ToString() ?? "{}"; + user_messages = otherObj["user_messages"]?.ToString() ?? "{}"; + } + } if (!string.IsNullOrEmpty(Model_Config.RequestTemplate)) { var assistant = ChatRole.assistant.ToString(); var user = ChatRole.user.ToString(); - List minimaxChatMessages = new List(); + + JArray minimaxChatMessages = new JArray(); messages.ForEach(message => { - MinimaxChatMessage minimaxChatMessage = new MinimaxChatMessage(); - minimaxChatMessage.Text = message.Content; + JObject jobject = null; if (message.Role == assistant) { - minimaxChatMessage.SenderType = "BOT"; + jobject = JObject.Parse(ai_messages); } else if (message.Role == user) { - minimaxChatMessage.SenderType = "USER"; + jobject = JObject.Parse(user_messages); + } + if (jobject != null) + { + foreach (var item in jobject) + { + if (item.Value?.Type == JTokenType.String) + { + var val = item.Value.ToString(); + if (val.Contains("${message}")) + { + jobject[item.Key] = val + .Replace("${message}", message.Content); + } + } + } + minimaxChatMessages.Add(jobject); } - minimaxChatMessages.Add(minimaxChatMessage); - }); var mess = JsonConvert.SerializeObject(minimaxChatMessages); - + var messObj = mess.TrimStart('[').TrimEnd(']'); var systemp = Model_Config.RequestTemplate .Replace("${messages}", mess) .Replace("${bot_name}", botName) + .Replace("${messagesobj}", messObj) ; + + var jobj = JObject.Parse(systemp); - foreach (var item in jobj) - { - if (item.Value?.Type == JTokenType.String) - { - var prompt = item.Value?.ToString() ?? ""; - if (prompt.Contains("${prompt}")) - { - jobj[item.Key] = prompt.Replace("${prompt}", character.System); - } - } - - - } + ProcessJObject(jobj, character.System); systemp = JsonConvert.SerializeObject(jobj); - //.Replace("${prompt}", cc["prompt"].ToString()) - this.RequestBody = systemp; } if (!string.IsNullOrEmpty(character.ModelConfig.ResponseTemplate)) @@ -108,6 +112,42 @@ namespace HuanMeng.MiaoYu.Code.Chat.Minimax /// 请求返回结果 /// public Dictionary? ResponseConten { get; set; } + + /// + /// + /// + /// + /// + private void ProcessJObject(JObject jobj, string systemValue) + { + foreach (var item in jobj) + { + if (item.Value?.Type == JTokenType.String) + { + var prompt = item.Value?.ToString() ?? ""; + if (prompt.Contains("${prompt}")) + { + jobj[item.Key] = prompt.Replace("${prompt}", systemValue); + return; + } + } + else if (item.Value?.Type == JTokenType.Object) + { + // 递归调用处理子对象 + ProcessJObject((JObject)item.Value, systemValue); + } + else if (item.Value?.Type == JTokenType.Array) + { + var array = (JArray)item.Value; + foreach (var item2 in array) + { + ProcessJObject((JObject)item2, systemValue); + } + // 递归调用处理子对象 + + } + } + } } /// /// diff --git a/src/0-core/HuanMeng.MiaoYu.Model/DbSqlServer/Db_MiaoYu/MiaoYuContext.cs b/src/0-core/HuanMeng.MiaoYu.Model/DbSqlServer/Db_MiaoYu/MiaoYuContext.cs index 973c217..2eeb00c 100644 --- a/src/0-core/HuanMeng.MiaoYu.Model/DbSqlServer/Db_MiaoYu/MiaoYuContext.cs +++ b/src/0-core/HuanMeng.MiaoYu.Model/DbSqlServer/Db_MiaoYu/MiaoYuContext.cs @@ -557,6 +557,7 @@ public partial class MiaoYuContext : MultiTenantDbContext//DbContext entity.Property(e => e.ModelName) .HasMaxLength(50) .HasComment("模型名称"); + entity.Property(e => e.OtherTemplate).HasComment("其它的模板"); entity.Property(e => e.RequestTemplate).HasComment("请求模板"); entity.Property(e => e.ResponseTemplate).HasComment("返回数据模板"); entity.Property(e => e.SystemTemplate).HasComment("system上下文模板"); diff --git a/src/0-core/HuanMeng.MiaoYu.Model/DbSqlServer/Db_MiaoYu/T_Model_Config.cs b/src/0-core/HuanMeng.MiaoYu.Model/DbSqlServer/Db_MiaoYu/T_Model_Config.cs index 49fbcf1..a1dcee0 100644 --- a/src/0-core/HuanMeng.MiaoYu.Model/DbSqlServer/Db_MiaoYu/T_Model_Config.cs +++ b/src/0-core/HuanMeng.MiaoYu.Model/DbSqlServer/Db_MiaoYu/T_Model_Config.cs @@ -75,4 +75,9 @@ public partial class T_Model_Config: MultiTenantEntity /// 是否默认 /// public virtual bool? IsDefabult { get; set; } + + /// + /// 其它的模板 + /// + public virtual string? OtherTemplate { get; set; } }