// Package aichatcfg aichat 的配置, 优先级要比 aichat 高 package aichatcfg import ( "github.com/sirupsen/logrus" zero "github.com/wdvxdr1123/ZeroBot" "github.com/wdvxdr1123/ZeroBot/message" ctrl "github.com/FloatTech/zbpctrl" "github.com/FloatTech/zbputils/chat" "github.com/FloatTech/zbputils/control" "github.com/FloatTech/zbputils/ctxext" ) var ( // en data [8 temp] [8 rate] LSB en = control.AutoRegister(&ctrl.Options[*zero.Ctx]{ DisableOnDefault: false, Extra: control.ExtraFromString("aichat"), Brief: "aichat 的配置", Help: "- 设置AI聊天触发概率10\n" + "- 设置AI聊天温度80\n" + "- 设置AI聊天(|识图|Agent)接口类型[OpenAI|OLLaMA|GenAI]\n" + "- 设置AI聊天(不)使用Agent模式\n" + "- 设置AI聊天(不)支持系统提示词\n" + "- 设置AI聊天(|识图|Agent)接口地址https://api.siliconflow.cn/v1/chat/completions\n" + "- 设置AI聊天(|识图|Agent)密钥xxx\n" + "- 设置AI聊天(|识图|Agent)模型名Qwen/Qwen3-8B\n" + "- 查看AI聊天系统提示词\n" + "- 重置AI聊天系统提示词\n" + "- 设置AI聊天系统提示词xxx\n" + "- 设置AI聊天Agent性格xxx" + "- 查看AI聊天Agent性格" + "- 设置AI聊天Agent性别xxx" + "- 查看AI聊天Agent性别" + "- 重置AI聊天Agent性格性别\n" + "- 设置AI聊天分隔符(留空则清除)\n" + "- 设置AI聊天(不)响应AT\n" + "- 设置AI聊天最大长度4096\n" + "- 设置AI聊天TopP 0.9\n" + "- 设置AI聊天(不)以AI语音输出\n" + "- 查看AI聊天配置\n" + "- 重置AI聊天Agent\n" + "- 重置AI聊天\n", }) ) func init() { en.UsePreHandler(chat.EnsureConfig, func(ctx *zero.Ctx) bool { k := zero.StateKeyPrefixKeep + "aichatcfg_stor__" if _, ok := ctx.State[k]; ok { return true } gid := ctx.Event.GroupID if gid == 0 { gid = -ctx.Event.UserID } stor, err := chat.NewStorage(ctx, gid) if err != nil { logrus.Warnln("ERROR: ", err) return false } ctx.State[k] = stor return true }) en.OnPrefix("设置AI聊天触发概率", zero.AdminPermission).SetBlock(true). Handle(ctxext.NewStorageSaveBitmapHandler(chat.BitmapRate, 0, 100)) en.OnPrefix("设置AI聊天温度", zero.AdminPermission).SetBlock(true). Handle(ctxext.NewStorageSaveBitmapHandler(chat.BitmapTemp, 0, 100)) en.OnPrefix("设置AI聊天接口类型", chat.EnsureConfig, zero.OnlyPrivate, zero.SuperUserPermission).SetBlock(true). Handle(chat.NewExtraSetModelType(&chat.AC.Type)) en.OnPrefix("设置AI聊天识图接口类型", chat.EnsureConfig, zero.OnlyPrivate, zero.SuperUserPermission).SetBlock(true). Handle(chat.NewExtraSetModelType(&chat.AC.ImageType)) en.OnPrefix("设置AI聊天Agent接口类型", chat.EnsureConfig, zero.OnlyPrivate, zero.SuperUserPermission).SetBlock(true). Handle(chat.NewExtraSetModelType(&chat.AC.AgentType)) en.OnPrefix("设置AI聊天接口地址", chat.EnsureConfig, zero.OnlyPrivate, zero.SuperUserPermission).SetBlock(true). Handle(chat.NewExtraSetStr(&chat.AC.API)) en.OnPrefix("设置AI聊天识图接口地址", chat.EnsureConfig, zero.OnlyPrivate, zero.SuperUserPermission).SetBlock(true). Handle(chat.NewExtraSetStr(&chat.AC.ImageAPI)) en.OnPrefix("设置AI聊天Agent接口地址", chat.EnsureConfig, zero.OnlyPrivate, zero.SuperUserPermission).SetBlock(true). Handle(chat.NewExtraSetStr(&chat.AC.AgentAPI)) en.OnPrefix("设置AI聊天密钥", chat.EnsureConfig, zero.OnlyPrivate, zero.SuperUserPermission).SetBlock(true). Handle(chat.NewExtraSetStr(&chat.AC.Key)) en.OnPrefix("设置AI聊天识图密钥", chat.EnsureConfig, zero.OnlyPrivate, zero.SuperUserPermission).SetBlock(true). Handle(chat.NewExtraSetStr(&chat.AC.ImageKey)) en.OnPrefix("设置AI聊天Agent密钥", chat.EnsureConfig, zero.OnlyPrivate, zero.SuperUserPermission).SetBlock(true). Handle(chat.NewExtraSetStr(&chat.AC.AgentKey)) en.OnPrefix("设置AI聊天模型名", chat.EnsureConfig, zero.OnlyPrivate, zero.SuperUserPermission).SetBlock(true). Handle(chat.NewExtraSetStr(&chat.AC.ModelName)) en.OnPrefix("设置AI聊天识图模型名", chat.EnsureConfig, zero.OnlyPrivate, zero.SuperUserPermission).SetBlock(true). Handle(chat.NewExtraSetStr(&chat.AC.ImageModelName)) en.OnPrefix("设置AI聊天Agent模型名", chat.EnsureConfig, zero.OnlyPrivate, zero.SuperUserPermission).SetBlock(true). Handle(chat.NewExtraSetStr(&chat.AC.AgentModelName)) en.OnPrefix("设置AI聊天系统提示词", chat.EnsureConfig, zero.OnlyPrivate, zero.SuperUserPermission).SetBlock(true). Handle(chat.NewExtraSetStr(&chat.AC.SystemP)) en.OnPrefix("设置AI聊天Agent性格", chat.EnsureConfig, zero.OnlyPrivate, zero.SuperUserPermission).SetBlock(true). Handle(chat.NewExtraSetStr(&chat.AC.AgentChar), func(ctx *zero.Ctx) { chat.AgentCharConfig.Chars = chat.AC.AgentChar }) en.OnPrefix("设置AI聊天Agent性别", chat.EnsureConfig, zero.OnlyPrivate, zero.SuperUserPermission).SetBlock(true). Handle(chat.NewExtraSetStr(&chat.AC.AgentSex), func(ctx *zero.Ctx) { chat.AgentCharConfig.Sex = chat.AC.AgentSex }) en.OnFullMatch("查看AI聊天系统提示词", chat.EnsureConfig, zero.OnlyPrivate, zero.SuperUserPermission).SetBlock(true).Handle(func(ctx *zero.Ctx) { ctx.SendChain(message.Text(chat.AC.SystemP)) }) en.OnFullMatch("查看AI聊天Agent性格", chat.EnsureConfig, zero.OnlyPrivate, zero.SuperUserPermission).SetBlock(true).Handle(func(ctx *zero.Ctx) { ctx.SendChain(message.Text(chat.AC.AgentChar)) }) en.OnFullMatch("重置AI聊天系统提示词", chat.EnsureConfig, zero.OnlyPrivate, zero.SuperUserPermission).SetBlock(true).Handle(func(ctx *zero.Ctx) { c, ok := ctx.State["manager"].(*ctrl.Control[*zero.Ctx]) if !ok { ctx.SendChain(message.Text("ERROR: no such plugin")) return } chat.AC.SystemP = chat.SystemPrompt err := c.SetExtra(&chat.AC) if err != nil { ctx.SendChain(message.Text("ERROR: set extra err: ", err)) return } ctx.SendChain(message.Text("成功")) }) en.OnFullMatch("重置AI聊天Agent性格性别", chat.EnsureConfig, zero.OnlyPrivate, zero.SuperUserPermission).SetBlock(true).Handle(func(ctx *zero.Ctx) { c, ok := ctx.State["manager"].(*ctrl.Control[*zero.Ctx]) if !ok { ctx.SendChain(message.Text("ERROR: no such plugin")) return } chat.ResetAgentCharConfig() err := c.SetExtra(&chat.AC) if err != nil { ctx.SendChain(message.Text("ERROR: set extra err: ", err)) return } ctx.SendChain(message.Text("成功, 请重置AI聊天Agent")) }) en.OnPrefix("设置AI聊天分隔符", chat.EnsureConfig, zero.OnlyPrivate, zero.SuperUserPermission).SetBlock(true). Handle(chat.NewExtraSetStr(&chat.AC.Separator)) en.OnRegex("^设置AI聊天(不)?响应AT$", zero.SuperUserPermission).SetBlock(true). Handle(ctxext.NewStorageSaveBoolHandler(chat.BitmapNrat)) en.OnRegex("^设置AI聊天(不)?支持系统提示词$", chat.EnsureConfig, zero.OnlyPrivate, zero.SuperUserPermission).SetBlock(true). Handle(chat.NewExtraSetBool(&chat.AC.NoSystemP)) en.OnRegex("^设置AI聊天(不)?使用Agent模式$", zero.SuperUserPermission).SetBlock(true). Handle(ctxext.NewStorageSaveBoolHandler(chat.BitmapNagt)) en.OnPrefix("设置AI聊天最大长度", chat.EnsureConfig, zero.OnlyPrivate, zero.SuperUserPermission).SetBlock(true). Handle(chat.NewExtraSetUint(&chat.AC.MaxN)) en.OnPrefix("设置AI聊天TopP", chat.EnsureConfig, zero.OnlyPrivate, zero.SuperUserPermission).SetBlock(true). Handle(chat.NewExtraSetFloat32(&chat.AC.TopP)) en.OnRegex("^设置AI聊天(不)?以AI语音输出$", zero.AdminPermission).SetBlock(true). Handle(ctxext.NewStorageSaveBoolHandler(chat.BitmapNrec)) en.OnFullMatch("查看AI聊天配置", chat.EnsureConfig, zero.SuperUserPermission).SetBlock(true). Handle(func(ctx *zero.Ctx) { gid := ctx.Event.GroupID if gid == 0 { gid = -ctx.Event.UserID } stor, err := chat.NewStorage(ctx, gid) if err != nil { ctx.SendChain(message.Text("ERROR: ", err)) return } ctx.SendChain( message.Text( "【当前AI聊天本群配置】\n", "• 触发概率:", int(stor.Rate()), "\n", "• 温度:", stor.Temp(), "\n", "• 以AI语音输出:", chat.ModelBool(!stor.NoRecord()), "\n", "• 使用Agent:", chat.ModelBool(!stor.NoAgent()), "\n", "• 响应@:", chat.ModelBool(!stor.NoReplyAt()), "\n", ), message.Text("【当前AI聊天全局配置】\n", &chat.AC), ) }) en.OnFullMatch("重置AI聊天Agent", chat.EnsureConfig, zero.SuperUserPermission).SetBlock(true).Handle(func(ctx *zero.Ctx) { chat.ResetAgents() ctx.SendChain(message.Text("成功")) }) en.OnFullMatch("重置AI聊天", chat.EnsureConfig, zero.SuperUserPermission).SetBlock(true).Handle(func(ctx *zero.Ctx) { chat.ResetChat() ctx.SendChain(message.Text("成功")) }) }