Skip to content

Commit 4ee7408

Browse files
committed
冷启动时从数据库载入聊天记录
1 parent e98ecb2 commit 4ee7408

1 file changed

Lines changed: 60 additions & 0 deletions

File tree

internal/agent/react_agent.go

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
"mumu-bot/internal/tools"
1717
"mumu-bot/internal/utils"
1818
"os"
19+
"strconv"
1920
"strings"
2021
"sync"
2122
"time"
@@ -184,12 +185,71 @@ func (a *Agent) Start() {
184185
if a.learner != nil {
185186
a.learner.Start()
186187
}
188+
189+
// 启动时从数据库加载历史消息到缓冲区
190+
a.loadBuffersFromDB()
191+
187192
a.bot.OnMessage(a.onMessage)
188193
a.wg.Add(1)
189194
go a.thinkLoop()
190195
zap.L().Info("Agent 已启动")
191196
}
192197

198+
// loadBuffersFromDB 从数据库加载消息日志到缓冲区
199+
func (a *Agent) loadBuffersFromDB() {
200+
cfg := config.Get()
201+
for _, gc := range cfg.Groups {
202+
if !gc.Enabled {
203+
continue
204+
}
205+
206+
// 获取缓冲区大小
207+
bufSize := cfg.Agent.MessageBufferSize
208+
if bufSize <= 0 {
209+
bufSize = 15
210+
}
211+
212+
// 从数据库获取最近的消息
213+
logs := a.memory.GetRecentMessages(gc.GroupID, bufSize, 0)
214+
if len(logs) == 0 {
215+
continue
216+
}
217+
218+
// 初始化缓冲区
219+
a.buffersMu.Lock()
220+
buf := utils.NewRingBuffer[*onebot.GroupMessage](bufSize)
221+
a.buffers[gc.GroupID] = buf
222+
223+
// 填充缓冲区
224+
for _, log := range logs {
225+
msgID, _ := strconv.ParseInt(log.MessageID, 10, 64)
226+
227+
// 还原合并转发内容
228+
var forwards []onebot.ForwardMessage
229+
if log.Forwards != "" {
230+
_ = sonic.UnmarshalString(log.Forwards, &forwards)
231+
}
232+
233+
msg := &onebot.GroupMessage{
234+
MessageID: msgID,
235+
GroupID: log.GroupID,
236+
UserID: log.UserID,
237+
Nickname: log.Nickname,
238+
Content: log.Content, // 这里使用解析后的内容作为 Content
239+
FinalContent: log.Content, // FinalContent 也是解析后的内容
240+
IsMentioned: log.IsMentioned,
241+
Time: log.CreatedAt,
242+
MessageType: log.MsgType,
243+
Forwards: forwards,
244+
}
245+
buf.Push(msg)
246+
}
247+
a.buffersMu.Unlock()
248+
249+
zap.L().Info("已从数据库加载消息历史", zap.Int64("group_id", gc.GroupID), zap.Int("count", len(logs)))
250+
}
251+
}
252+
193253
// Stop 停止
194254
func (a *Agent) Stop() {
195255
if a.learner != nil {

0 commit comments

Comments
 (0)