diff --git a/README.md b/README.md index 865e31da..34b79d22 100644 --- a/README.md +++ b/README.md @@ -1558,10 +1558,14 @@ print("run[CQ:image,file="+j["img"]+"]") - [x] 设置AI聊天触发概率10 - [x] 设置AI聊天温度80 + - [x] 设置AI聊天接口类型[OpenAI|OLLaMA|GenAI] + - [x] 设置AI聊天(不)支持系统提示词 + - [x] 设置AI聊天接口地址https://xxx - [x] 设置AI聊天密钥xxx - [x] 设置AI聊天模型名xxx - - [x] 设置AI聊天系统提示词xxx + - [x] 查看AI聊天系统提示词 - [x] 重置AI聊天系统提示词 + - [x] 设置AI聊天系统提示词xxx - [x] 设置AI聊天分隔符``(留空则清除) - [x] 设置AI聊天(不)响应AT diff --git a/go.mod b/go.mod index 3b80190e..27e49196 100644 --- a/go.mod +++ b/go.mod @@ -12,7 +12,7 @@ require ( github.com/FloatTech/sqlite v1.7.1 github.com/FloatTech/ttl v0.0.0-20240716161252-965925764562 github.com/FloatTech/zbpctrl v1.7.0 - github.com/FloatTech/zbputils v1.7.2-0.20250329125132-70de78bc2407 + github.com/FloatTech/zbputils v1.7.2-0.20250330125231-d8be1c9d3b9c github.com/RomiChan/syncx v0.0.0-20240418144900-b7402ffdebc7 github.com/RomiChan/websocket v1.4.3-0.20220227141055-9b2c6168c9c5 github.com/Tnze/go-mc v1.20.2 @@ -22,7 +22,7 @@ require ( github.com/disintegration/imaging v1.6.2 github.com/fumiama/ahsai v0.1.0 github.com/fumiama/cron v1.3.0 - github.com/fumiama/deepinfra v0.0.0-20250329170232-577f83008e8d + github.com/fumiama/deepinfra v0.0.0-20250330125128-71ec2f7c085e github.com/fumiama/go-base16384 v1.7.0 github.com/fumiama/go-registry v0.2.7 github.com/fumiama/gotracemoe v0.0.3 diff --git a/go.sum b/go.sum index 48808fa0..22d75815 100644 --- a/go.sum +++ b/go.sum @@ -17,8 +17,8 @@ github.com/FloatTech/ttl v0.0.0-20240716161252-965925764562 h1:snfw7FNFym1eNnLrQ github.com/FloatTech/ttl v0.0.0-20240716161252-965925764562/go.mod h1:fHZFWGquNXuHttu9dUYoKuNbm3dzLETnIOnm1muSfDs= github.com/FloatTech/zbpctrl v1.7.0 h1:Hxo6EIhJo+pHjcQP9QgIJgluaT1pHH99zkk3njqTNMo= github.com/FloatTech/zbpctrl v1.7.0/go.mod h1:xmM4dSwHA02Gei3ogCRiG+RTrw/7Z69PfrN5NYf8BPE= -github.com/FloatTech/zbputils v1.7.2-0.20250329125132-70de78bc2407 h1:2+cY/Yn30x8hOczSvnU/lnj/jgtxmGyfOfv0eJn5GQI= -github.com/FloatTech/zbputils v1.7.2-0.20250329125132-70de78bc2407/go.mod h1:LOBLheF9yCSSYAA85MtkQNyVYP1DblttTLk5OYFbtpk= +github.com/FloatTech/zbputils v1.7.2-0.20250330125231-d8be1c9d3b9c h1:nIybmanPvQknseVOJ+s4/m3q7EZxtqMoTy3wiiZts6E= +github.com/FloatTech/zbputils v1.7.2-0.20250330125231-d8be1c9d3b9c/go.mod h1:ArZ0fMAcmPEIXOqDmfzbSx+oYH8sssApQnbCu694iS8= github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc= github.com/RomiChan/syncx v0.0.0-20240418144900-b7402ffdebc7 h1:S/ferNiehVjNaBMNNBxUjLtVmP/YWD6Yh79RfPv4ehU= github.com/RomiChan/syncx v0.0.0-20240418144900-b7402ffdebc7/go.mod h1:vD7Ra3Q9onRtojoY5sMCLQ7JBgjUsrXDnDKyFxqpf9w= @@ -59,8 +59,8 @@ github.com/fumiama/ahsai v0.1.0 h1:LXD61Kaj6kJHa3AEGsLIfKNzcgaVxg7JB72OR4yNNZ4= github.com/fumiama/ahsai v0.1.0/go.mod h1:fFeNnqgo44i8FIaguK659aQryuZeFy+4klYLQu/rfdk= github.com/fumiama/cron v1.3.0 h1:ZWlwuexF+HQHl3cYytEE5HNwD99q+3vNZF1GrEiXCFo= github.com/fumiama/cron v1.3.0/go.mod h1:bz5Izvgi/xEUI8tlBN8BI2jr9Moo8N4or0KV8xXuPDY= -github.com/fumiama/deepinfra v0.0.0-20250329170232-577f83008e8d h1:LCiYR+AbnDn8QV3s8yJrE+N340s3KwkvLjmDDQbWYvs= -github.com/fumiama/deepinfra v0.0.0-20250329170232-577f83008e8d/go.mod h1:wW05PQSn8mo1mZIoa6LBUE+3xIBjkoONvnfPTV5ZOhY= +github.com/fumiama/deepinfra v0.0.0-20250330125128-71ec2f7c085e h1:L/Z5N6UfpuqNIiPUrjSzmrnWj3mjd3auwl/2ctpGXNY= +github.com/fumiama/deepinfra v0.0.0-20250330125128-71ec2f7c085e/go.mod h1:wW05PQSn8mo1mZIoa6LBUE+3xIBjkoONvnfPTV5ZOhY= github.com/fumiama/go-base16384 v1.7.0 h1:6fep7XPQWxRlh4Hu+KsdH+6+YdUp+w6CwRXtMWSsXCA= github.com/fumiama/go-base16384 v1.7.0/go.mod h1:OEn+947GV5gsbTAnyuUW/SrfxJYUdYupSIQXOuGOcXM= github.com/fumiama/go-registry v0.2.7 h1:tLEqgEpsiybQMqBv0dLHm5leia/z1DhajMupwnOHeNs= diff --git a/plugin/aichat/main.go b/plugin/aichat/main.go index 8e35ec3f..9c6ad71e 100644 --- a/plugin/aichat/main.go +++ b/plugin/aichat/main.go @@ -22,7 +22,7 @@ import ( ) var ( - // en data [4 type] [8 temp] [8 rate] LSB + // en data [4 cfg] [4 type] [8 temp] [8 rate] LSB en = control.AutoRegister(&ctrl.Options[*zero.Ctx]{ DisableOnDefault: false, Extra: control.ExtraFromString("aichat"), @@ -30,9 +30,11 @@ var ( Help: "- 设置AI聊天触发概率10\n" + "- 设置AI聊天温度80\n" + "- 设置AI聊天接口类型[OpenAI|OLLaMA|GenAI]\n" + + "- 设置AI聊天(不)支持系统提示词\n" + "- 设置AI聊天接口地址https://xxx\n" + "- 设置AI聊天密钥xxx\n" + "- 设置AI聊天模型名xxx\n" + + "- 查看AI聊天系统提示词\n" + "- 重置AI聊天系统提示词\n" + "- 设置AI聊天系统提示词xxx\n" + "- 设置AI聊天分隔符(留空则清除)\n" + @@ -42,11 +44,12 @@ var ( ) var ( - modelname = model.ModelDeepDeek - systemprompt = chat.SystemPrompt - api = deepinfra.OpenAIDeepInfra - sepstr = "" - noreplyat = false + modelname = model.ModelDeepDeek + systemprompt = chat.SystemPrompt + api = deepinfra.OpenAIDeepInfra + sepstr = "" + noreplyat = false + nosystemprompt = false ) var apitypes = map[string]uint8{ @@ -61,6 +64,7 @@ func init() { pf := en.DataFolder() + "sep.txt" af := en.DataFolder() + "api.txt" nf := en.DataFolder() + "NoReplyAT" + syspf := en.DataFolder() + "NoSystemPrompt" if file.IsExist(mf) { data, err := os.ReadFile(mf) if err != nil { @@ -94,6 +98,7 @@ func init() { } } noreplyat = file.IsExist(nf) + nosystemprompt = file.IsExist(syspf) en.OnMessage(func(ctx *zero.Ctx) bool { return ctx.ExtractPlainText() != "" && (!noreplyat || (noreplyat && !ctx.Event.IsToMe)) @@ -134,24 +139,21 @@ func init() { temp = 100 } - var x deepinfra.API + x := deepinfra.NewAPI(api, key) var mod model.Protocol switch typ { case 0: - x = deepinfra.NewAPI(api, key) mod = model.NewOpenAI( modelname, sepstr, float32(temp)/100, 0.9, 4096, ) case 1: - x = deepinfra.NewAPI(api, key) mod = model.NewOLLaMA( modelname, sepstr, float32(temp)/100, 0.9, 4096, ) case 2: - x = deepinfra.NewAPI(api, key) mod = model.NewGenAI( modelname, float32(temp)/100, 0.9, 4096, @@ -161,7 +163,7 @@ func init() { return } - data, err := x.Request(chat.Ask(mod, gid, systemprompt)) + data, err := x.Request(chat.Ask(mod, gid, systemprompt, nosystemprompt)) if err != nil { logrus.Warnln("[aichat] post err:", err) return @@ -344,6 +346,9 @@ func init() { } ctx.SendChain(message.Text("成功")) }) + en.OnFullMatch("查看AI聊天系统提示词", zero.OnlyPrivate, zero.SuperUserPermission).SetBlock(true).Handle(func(ctx *zero.Ctx) { + ctx.SendChain(message.Text(systemprompt)) + }) en.OnFullMatch("重置AI聊天系统提示词", zero.OnlyPrivate, zero.SuperUserPermission).SetBlock(true).Handle(func(ctx *zero.Ctx) { systemprompt = chat.SystemPrompt _ = os.Remove(sf) @@ -387,4 +392,26 @@ func init() { } ctx.SendChain(message.Text("成功")) }) + en.OnRegex("^设置AI聊天(不)?支持系统提示词$", zero.OnlyPrivate, zero.SuperUserPermission).SetBlock(true).Handle(func(ctx *zero.Ctx) { + args := ctx.State["regex_matched"].([]string) + isno := args[1] == "不" + if isno { + f, err := os.Create(syspf) + if err != nil { + ctx.SendChain(message.Text("ERROR: ", err)) + return + } + defer f.Close() + _, err = f.WriteString("PLACEHOLDER") + if err != nil { + ctx.SendChain(message.Text("ERROR: ", err)) + return + } + nosystemprompt = true + } else { + _ = os.Remove(syspf) + nosystemprompt = false + } + ctx.SendChain(message.Text("成功")) + }) }