Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions chat/init.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// Package chat 提供聊天记录管理和 AI 模型交互功能
package chat

import (
Expand All @@ -11,21 +12,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),
Expand All @@ -34,18 +41,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)
Expand All @@ -69,3 +84,8 @@ func Sanitize(msg string) string {
}
return strings.TrimSpace(msg)
}

// Reset 清空全局聊天记录,重新开始
func Reset() {
lst.Reset()
}
2 changes: 1 addition & 1 deletion driver/funcall.go
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
4 changes: 2 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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 (
Expand Down
8 changes: 4 additions & 4 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -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=
Expand Down Expand Up @@ -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=
Expand Down
Loading