22package aichat
33
44import (
5+ "encoding/json"
56 "errors"
67 "math/rand"
8+ "reflect"
79 "strconv"
810 "strings"
911 "time"
1012
1113 "github.com/fumiama/deepinfra"
1214 "github.com/fumiama/deepinfra/model"
15+ goba "github.com/fumiama/go-onebot-agent"
1316 "github.com/sirupsen/logrus"
1417 "github.com/tidwall/gjson"
1518
3336 Help : "- 设置AI聊天触发概率10\n " +
3437 "- 设置AI聊天温度80\n " +
3538 "- 设置AI聊天接口类型[OpenAI|OLLaMA|GenAI]\n " +
39+ "- 设置AI聊天(不)使用Agent模式\n " +
3640 "- 设置AI聊天(不)支持系统提示词\n " +
3741 "- 设置AI聊天接口地址https://api.siliconflow.cn/v1/chat/completions\n " +
3842 "- 设置AI聊天密钥xxx\n " +
@@ -142,6 +146,43 @@ func init() {
142146 return
143147 }
144148
149+ if ! cfg .NoAgent {
150+ role := goba .PermRoleUser
151+ if zero .AdminPermission (ctx ) {
152+ role = goba .PermRoleAdmin
153+ if zero .SuperUserPermission (ctx ) {
154+ role = goba .PermRoleOwner
155+ }
156+ }
157+ reqs , err := chat .AgentOf (ctx .Event .SelfID ).GetAction (x , mod , gid , role , false )
158+ if err != nil {
159+ logrus .Warnln ("[aichat] agent err:" , err , reqs )
160+ return
161+ }
162+ logrus .Infoln ("[aichat] agent do:" , reqs )
163+ for _ , req := range reqs {
164+ if req .Action == "send_group_msg" {
165+ v , ok := req .Params ["group_id" ].(json.Number )
166+ if ! ok {
167+ logrus .Warnln ("[aichat] invalid group_id type" , reflect .TypeOf (req .Params ["group_id" ]))
168+ continue
169+ }
170+ gid , err = v .Int64 ()
171+ if ! ok {
172+ logrus .Warnln ("[aichat] agent conv req gid err:" , err )
173+ continue
174+ }
175+ if ctx .Event .GroupID != gid && ! zero .SuperUserPermission (ctx ) {
176+ logrus .Warnln ("[aichat] refuse to send out of grp from" , ctx .Event .GroupID , "to" , gid )
177+ continue
178+ }
179+ }
180+ ctx .CallAction (req .Action , req .Params )
181+ process .SleepAbout1sTo2s ()
182+ }
183+ return
184+ }
185+
145186 data , err := x .Request (chat .GetChatContext (mod , gid , cfg .SystemP , cfg .NoSystemP ))
146187 if err != nil {
147188 logrus .Warnln ("[aichat] post err:" , err )
@@ -150,7 +191,7 @@ func init() {
150191
151192 txt := chat .Sanitize (strings .Trim (data , "\n " ))
152193 if len (txt ) > 0 {
153- chat .AddChatReply (gid , zero . BotConfig . NickName [ 0 ], txt )
194+ chat .AddChatReply (gid , txt )
154195 nick := zero .BotConfig .NickName [rand .Intn (len (zero .BotConfig .NickName ))]
155196 txt = strings .ReplaceAll (txt , "{name}" , ctx .CardOrNickName (ctx .Event .UserID ))
156197 txt = strings .ReplaceAll (txt , "{me}" , nick )
@@ -302,6 +343,8 @@ func init() {
302343 Handle (newextrasetbool (& cfg .NoReplyAT ))
303344 en .OnRegex ("^设置AI聊天(不)?支持系统提示词$" , ensureconfig , zero .OnlyPrivate , zero .SuperUserPermission ).SetBlock (true ).
304345 Handle (newextrasetbool (& cfg .NoSystemP ))
346+ en .OnRegex ("^设置AI聊天(不)?使用Agent模式$" , ensureconfig , zero .OnlyPrivate , zero .SuperUserPermission ).SetBlock (true ).
347+ Handle (newextrasetbool (& cfg .NoAgent ))
305348 en .OnPrefix ("设置AI聊天最大长度" , ensureconfig , zero .OnlyPrivate , zero .SuperUserPermission ).SetBlock (true ).
306349 Handle (newextrasetuint (& cfg .MaxN ))
307350 en .OnPrefix ("设置AI聊天TopP" , ensureconfig , zero .OnlyPrivate , zero .SuperUserPermission ).SetBlock (true ).
0 commit comments