feat(aichat): add more funcs

This commit is contained in:
源文雨 2025-03-30 22:12:48 +09:00
parent 2df52161e5
commit 62e9fe69ed
4 changed files with 49 additions and 18 deletions

View File

@ -1558,10 +1558,14 @@ print("run[CQ:image,file="+j["img"]+"]")
- [x] 设置AI聊天触发概率10 - [x] 设置AI聊天触发概率10
- [x] 设置AI聊天温度80 - [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聊天模型名xxx
- [x] 设置AI聊天系统提示词xxx - [x] 查看AI聊天系统提示词
- [x] 重置AI聊天系统提示词 - [x] 重置AI聊天系统提示词
- [x] 设置AI聊天系统提示词xxx
- [x] 设置AI聊天分隔符`</think>`(留空则清除) - [x] 设置AI聊天分隔符`</think>`(留空则清除)
- [x] 设置AI聊天(不)响应AT - [x] 设置AI聊天(不)响应AT

4
go.mod
View File

@ -12,7 +12,7 @@ require (
github.com/FloatTech/sqlite v1.7.1 github.com/FloatTech/sqlite v1.7.1
github.com/FloatTech/ttl v0.0.0-20240716161252-965925764562 github.com/FloatTech/ttl v0.0.0-20240716161252-965925764562
github.com/FloatTech/zbpctrl v1.7.0 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/syncx v0.0.0-20240418144900-b7402ffdebc7
github.com/RomiChan/websocket v1.4.3-0.20220227141055-9b2c6168c9c5 github.com/RomiChan/websocket v1.4.3-0.20220227141055-9b2c6168c9c5
github.com/Tnze/go-mc v1.20.2 github.com/Tnze/go-mc v1.20.2
@ -22,7 +22,7 @@ require (
github.com/disintegration/imaging v1.6.2 github.com/disintegration/imaging v1.6.2
github.com/fumiama/ahsai v0.1.0 github.com/fumiama/ahsai v0.1.0
github.com/fumiama/cron v1.3.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-base16384 v1.7.0
github.com/fumiama/go-registry v0.2.7 github.com/fumiama/go-registry v0.2.7
github.com/fumiama/gotracemoe v0.0.3 github.com/fumiama/gotracemoe v0.0.3

8
go.sum
View File

@ -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/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 h1:Hxo6EIhJo+pHjcQP9QgIJgluaT1pHH99zkk3njqTNMo=
github.com/FloatTech/zbpctrl v1.7.0/go.mod h1:xmM4dSwHA02Gei3ogCRiG+RTrw/7Z69PfrN5NYf8BPE= 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.20250330125231-d8be1c9d3b9c h1:nIybmanPvQknseVOJ+s4/m3q7EZxtqMoTy3wiiZts6E=
github.com/FloatTech/zbputils v1.7.2-0.20250329125132-70de78bc2407/go.mod h1:LOBLheF9yCSSYAA85MtkQNyVYP1DblttTLk5OYFbtpk= 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/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 h1:S/ferNiehVjNaBMNNBxUjLtVmP/YWD6Yh79RfPv4ehU=
github.com/RomiChan/syncx v0.0.0-20240418144900-b7402ffdebc7/go.mod h1:vD7Ra3Q9onRtojoY5sMCLQ7JBgjUsrXDnDKyFxqpf9w= 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/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 h1:ZWlwuexF+HQHl3cYytEE5HNwD99q+3vNZF1GrEiXCFo=
github.com/fumiama/cron v1.3.0/go.mod h1:bz5Izvgi/xEUI8tlBN8BI2jr9Moo8N4or0KV8xXuPDY= 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-20250330125128-71ec2f7c085e h1:L/Z5N6UfpuqNIiPUrjSzmrnWj3mjd3auwl/2ctpGXNY=
github.com/fumiama/deepinfra v0.0.0-20250329170232-577f83008e8d/go.mod h1:wW05PQSn8mo1mZIoa6LBUE+3xIBjkoONvnfPTV5ZOhY= 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 h1:6fep7XPQWxRlh4Hu+KsdH+6+YdUp+w6CwRXtMWSsXCA=
github.com/fumiama/go-base16384 v1.7.0/go.mod h1:OEn+947GV5gsbTAnyuUW/SrfxJYUdYupSIQXOuGOcXM= 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= github.com/fumiama/go-registry v0.2.7 h1:tLEqgEpsiybQMqBv0dLHm5leia/z1DhajMupwnOHeNs=

View File

@ -22,7 +22,7 @@ import (
) )
var ( 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]{ en = control.AutoRegister(&ctrl.Options[*zero.Ctx]{
DisableOnDefault: false, DisableOnDefault: false,
Extra: control.ExtraFromString("aichat"), Extra: control.ExtraFromString("aichat"),
@ -30,9 +30,11 @@ var (
Help: "- 设置AI聊天触发概率10\n" + Help: "- 设置AI聊天触发概率10\n" +
"- 设置AI聊天温度80\n" + "- 设置AI聊天温度80\n" +
"- 设置AI聊天接口类型[OpenAI|OLLaMA|GenAI]\n" + "- 设置AI聊天接口类型[OpenAI|OLLaMA|GenAI]\n" +
"- 设置AI聊天(不)支持系统提示词\n" +
"- 设置AI聊天接口地址https://xxx\n" + "- 设置AI聊天接口地址https://xxx\n" +
"- 设置AI聊天密钥xxx\n" + "- 设置AI聊天密钥xxx\n" +
"- 设置AI聊天模型名xxx\n" + "- 设置AI聊天模型名xxx\n" +
"- 查看AI聊天系统提示词\n" +
"- 重置AI聊天系统提示词\n" + "- 重置AI聊天系统提示词\n" +
"- 设置AI聊天系统提示词xxx\n" + "- 设置AI聊天系统提示词xxx\n" +
"- 设置AI聊天分隔符</think>(留空则清除)\n" + "- 设置AI聊天分隔符</think>(留空则清除)\n" +
@ -42,11 +44,12 @@ var (
) )
var ( var (
modelname = model.ModelDeepDeek modelname = model.ModelDeepDeek
systemprompt = chat.SystemPrompt systemprompt = chat.SystemPrompt
api = deepinfra.OpenAIDeepInfra api = deepinfra.OpenAIDeepInfra
sepstr = "" sepstr = ""
noreplyat = false noreplyat = false
nosystemprompt = false
) )
var apitypes = map[string]uint8{ var apitypes = map[string]uint8{
@ -61,6 +64,7 @@ func init() {
pf := en.DataFolder() + "sep.txt" pf := en.DataFolder() + "sep.txt"
af := en.DataFolder() + "api.txt" af := en.DataFolder() + "api.txt"
nf := en.DataFolder() + "NoReplyAT" nf := en.DataFolder() + "NoReplyAT"
syspf := en.DataFolder() + "NoSystemPrompt"
if file.IsExist(mf) { if file.IsExist(mf) {
data, err := os.ReadFile(mf) data, err := os.ReadFile(mf)
if err != nil { if err != nil {
@ -94,6 +98,7 @@ func init() {
} }
} }
noreplyat = file.IsExist(nf) noreplyat = file.IsExist(nf)
nosystemprompt = file.IsExist(syspf)
en.OnMessage(func(ctx *zero.Ctx) bool { en.OnMessage(func(ctx *zero.Ctx) bool {
return ctx.ExtractPlainText() != "" && (!noreplyat || (noreplyat && !ctx.Event.IsToMe)) return ctx.ExtractPlainText() != "" && (!noreplyat || (noreplyat && !ctx.Event.IsToMe))
@ -134,24 +139,21 @@ func init() {
temp = 100 temp = 100
} }
var x deepinfra.API x := deepinfra.NewAPI(api, key)
var mod model.Protocol var mod model.Protocol
switch typ { switch typ {
case 0: case 0:
x = deepinfra.NewAPI(api, key)
mod = model.NewOpenAI( mod = model.NewOpenAI(
modelname, sepstr, modelname, sepstr,
float32(temp)/100, 0.9, 4096, float32(temp)/100, 0.9, 4096,
) )
case 1: case 1:
x = deepinfra.NewAPI(api, key)
mod = model.NewOLLaMA( mod = model.NewOLLaMA(
modelname, sepstr, modelname, sepstr,
float32(temp)/100, 0.9, 4096, float32(temp)/100, 0.9, 4096,
) )
case 2: case 2:
x = deepinfra.NewAPI(api, key)
mod = model.NewGenAI( mod = model.NewGenAI(
modelname, modelname,
float32(temp)/100, 0.9, 4096, float32(temp)/100, 0.9, 4096,
@ -161,7 +163,7 @@ func init() {
return return
} }
data, err := x.Request(chat.Ask(mod, gid, systemprompt)) data, err := x.Request(chat.Ask(mod, gid, systemprompt, nosystemprompt))
if err != nil { if err != nil {
logrus.Warnln("[aichat] post err:", err) logrus.Warnln("[aichat] post err:", err)
return return
@ -344,6 +346,9 @@ func init() {
} }
ctx.SendChain(message.Text("成功")) 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) { en.OnFullMatch("重置AI聊天系统提示词", zero.OnlyPrivate, zero.SuperUserPermission).SetBlock(true).Handle(func(ctx *zero.Ctx) {
systemprompt = chat.SystemPrompt systemprompt = chat.SystemPrompt
_ = os.Remove(sf) _ = os.Remove(sf)
@ -387,4 +392,26 @@ func init() {
} }
ctx.SendChain(message.Text("成功")) 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("成功"))
})
} }