From ce40677a97579232b207108a86d008e027a070b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E9=94=85=E9=A5=AD?= <1156544355@qq.com> Date: Wed, 30 Jul 2025 20:51:55 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E2=9C=A8=20=E6=B7=BB=E5=8A=A0=E9=87=8D?= =?UTF-8?q?=E7=BD=AE=E8=81=8A=E5=A4=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- chat/init.go | 19 +++++++++++++++++++ driver/funcall.go | 2 +- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/chat/init.go b/chat/init.go index 96d1191..b7bf5b7 100644 --- a/chat/init.go +++ b/chat/init.go @@ -11,21 +11,27 @@ import ( zero "github.com/wdvxdr1123/ZeroBot" ) +// SystemPrompt 将 README.md 内容嵌入为默认系统提示词 +// //go:embed README.md var SystemPrompt string +// lst 全局聊天记录,每群/每用户独立保存最近 8 条 var lst = chat.NewLog(8, "\n\n", "自己随机开启新话题", "【", "】", ">>") func init() { + // 注册 ZeroBot 消息钩子,记录所有非空文本 zero.OnMessage(func(ctx *zero.Ctx) bool { txt := ctx.ExtractPlainText() ctx.State["__zbputil_chat_txt__"] = txt return txt != "" }).FirstPriority().SetBlock(false).Handle(func(ctx *zero.Ctx) { + // 计算群组 ID(私聊时使用负的 UserID) gid := ctx.Event.GroupID if gid == 0 { gid = -ctx.Event.UserID } + // 将用户消息追加到对应群组的聊天记录 lst.Add( gid, ctx.Event.Sender.Name(), ctx.State["__zbputil_chat_txt__"].(string), @@ -34,18 +40,26 @@ func init() { }) } +// Reply 将 AI 回复追加到指定群组的聊天记录 func Reply(grp int64, txt string) { lst.Add(grp, "", txt, true, false) } +// Ask 根据聊天记录构造可执行的 deepinfra 模型请求 func Ask(p model.Protocol, grp int64, sysp string, isusersys bool) deepinfra.Model { return lst.Modelize(p, grp, sysp, isusersys) } +// AskCustom 通用日志转换函数,允许自定义每条记录的映射逻辑 func AskCustom[T any](grp int64, f func(int, string) T) []T { return chat.Modelize(&lst, grp, f) } +// Sanitize 清洗 AI 返回文本: +// 1. 去掉换行后内容 +// 2. 去掉发言前缀(如【name】或[name]) +// 3. 去掉重复 10 次以上的子串 +// 4. 去除首尾空白 func Sanitize(msg string) string { msg, _, _ = strings.Cut(msg, "\n") msg = strings.TrimSpace(msg) @@ -69,3 +83,8 @@ func Sanitize(msg string) string { } return strings.TrimSpace(msg) } + +// Reset 清空全局聊天记录,重新开始 +func Reset() { + lst = chat.NewLog(8, "\n\n", "自己随机开启新话题", "【", "】", ">>") +} diff --git a/driver/funcall.go b/driver/funcall.go index 2043f05..0b9454e 100644 --- a/driver/funcall.go +++ b/driver/funcall.go @@ -162,7 +162,7 @@ func (f *FCClient) handleRequest(req *zero.APIRequest) (r *zero.APIResponse, err r = &zero.APIResponse{ // 发送api调用响应 Status: s, Data: data.Get("data"), - Msg: m, + Message: m, Wording: w, RetCode: c, Echo: req.Echo, From ed907238786b2be2729a47bf45ff86d877b5651b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E9=94=85=E9=A5=AD?= <1156544355@qq.com> Date: Sat, 9 Aug 2025 00:04:54 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E2=9C=A8=20=E6=9B=B4=E6=96=B0zb=E7=89=88?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index ad282e1..8cf086e 100644 --- a/go.mod +++ b/go.mod @@ -24,7 +24,7 @@ require ( github.com/swaggo/gin-swagger v1.5.3 github.com/swaggo/swag v1.8.10 github.com/tidwall/gjson v1.18.0 - github.com/wdvxdr1123/ZeroBot v1.8.0 + github.com/wdvxdr1123/ZeroBot v1.8.2-0.20250804063440-ccc03e33ac20 ) require ( diff --git a/go.sum b/go.sum index 19c49d6..193b36f 100644 --- a/go.sum +++ b/go.sum @@ -180,8 +180,8 @@ github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6 github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0= github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= -github.com/wdvxdr1123/ZeroBot v1.8.0 h1:v7m+0kGtL6XQlUH9O/LzmOntDJs2clzVj93YsAWWMbk= -github.com/wdvxdr1123/ZeroBot v1.8.0/go.mod h1:C86nQ0gIdAri4K2vg8IIQIslt08zzrKMcqYt8zhkx1M= +github.com/wdvxdr1123/ZeroBot v1.8.2-0.20250804063440-ccc03e33ac20 h1:Yzd+cbiJQYtf6cZDP5ZB/LqjNWiV752+5P6Eua+wnic= +github.com/wdvxdr1123/ZeroBot v1.8.2-0.20250804063440-ccc03e33ac20/go.mod h1:C86nQ0gIdAri4K2vg8IIQIslt08zzrKMcqYt8zhkx1M= github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= From ac532a21b5a372171bd0b49aaf7bc47c38e1d524 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E9=94=85=E9=A5=AD?= <1156544355@qq.com> Date: Sat, 9 Aug 2025 00:11:35 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=F0=9F=93=9D=20=E6=B7=BB=E5=8A=A0=E5=8C=85?= =?UTF-8?q?=E8=A7=A3=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- chat/init.go | 1 + 1 file changed, 1 insertion(+) diff --git a/chat/init.go b/chat/init.go index b7bf5b7..0916bdc 100644 --- a/chat/init.go +++ b/chat/init.go @@ -1,3 +1,4 @@ +// Package chat 提供聊天记录管理和 AI 模型交互功能 package chat import ( From 1715ca05c5584e675e309a0683e50c36e4d61720 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E9=94=85=E9=A5=AD?= <1156544355@qq.com> Date: Tue, 12 Aug 2025 16:47:40 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E2=9C=A8=20=E8=B0=83=E7=94=A8=E9=87=8D?= =?UTF-8?q?=E7=BD=AE=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- chat/init.go | 2 +- go.mod | 2 +- go.sum | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/chat/init.go b/chat/init.go index b7bf5b7..f2fc8e4 100644 --- a/chat/init.go +++ b/chat/init.go @@ -86,5 +86,5 @@ func Sanitize(msg string) string { // Reset 清空全局聊天记录,重新开始 func Reset() { - lst = chat.NewLog(8, "\n\n", "自己随机开启新话题", "【", "】", ">>") + lst.Reset() } diff --git a/go.mod b/go.mod index ad282e1..f815040 100644 --- a/go.mod +++ b/go.mod @@ -12,7 +12,7 @@ require ( github.com/RomiChan/syncx v0.0.0-20240418144900-b7402ffdebc7 github.com/RomiChan/websocket v1.4.3-0.20220227141055-9b2c6168c9c5 github.com/fumiama/cron v1.3.0 - github.com/fumiama/deepinfra v0.0.0-20250330125128-71ec2f7c085e + github.com/fumiama/deepinfra v0.0.0-20250812083039-f1b27f21d8c9 github.com/fumiama/go-base16384 v1.7.0 github.com/gin-gonic/gin v1.8.2 github.com/go-playground/assert/v2 v2.2.0 diff --git a/go.sum b/go.sum index 19c49d6..899a242 100644 --- a/go.sum +++ b/go.sum @@ -39,8 +39,8 @@ github.com/ericpauley/go-quantize v0.0.0-20200331213906-ae555eb2afa4 h1:BBade+Jl github.com/ericpauley/go-quantize v0.0.0-20200331213906-ae555eb2afa4/go.mod h1:H7chHJglrhPPzetLdzBleF8d22WYOv7UM/lEKYiwlKM= 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-20250330125128-71ec2f7c085e h1:L/Z5N6UfpuqNIiPUrjSzmrnWj3mjd3auwl/2ctpGXNY= -github.com/fumiama/deepinfra v0.0.0-20250330125128-71ec2f7c085e/go.mod h1:wW05PQSn8mo1mZIoa6LBUE+3xIBjkoONvnfPTV5ZOhY= +github.com/fumiama/deepinfra v0.0.0-20250812083039-f1b27f21d8c9 h1:X2h8RnCgC04LmwBoizYbFawXh/h6CouXmhYtaVuUn7k= +github.com/fumiama/deepinfra v0.0.0-20250812083039-f1b27f21d8c9/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=